だいぶ前からDockerでCodiMDのコンテナをたてて適当にチームで使ってみているが、パスワードを忘れたり、そのせいでノートのURLがわからなくなって行方不明になったりしたのでその解決方法とかのTips
DBへの接続
※以下に記載するコマンドはすべて、DBにPostgreSQLを使用している場合を前提とします。
コマンドを読み替えればMySQLの場合などでも同様に実行できるはずです。
docker exec
などでDBのコンテナへ入り、psql <db_name> <db_user_name>
と実行(docker-compose.yamlの環境変数を見ればわかる)
プロンプトがhackmd=#
に変われば接続成功
\d
と打てばテーブル一覧が表示される。
hackmd=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------+----------+--------
public | Authors | table | hackmd
public | Authors_id_seq | sequence | hackmd
public | Notes | table | hackmd
public | Revisions | table | hackmd
public | SequelizeMeta | table | hackmd
public | Sessions | table | hackmd
public | Temp | table | hackmd
public | Temps | table | hackmd
public | Users | table | hackmd
PostgreSQLの注意点
- 大文字が含まれているテーブル名やカラム名はダブルクォーテーションで括らないと正しく実行できません
- コマンドの最後にはセミコロンが必須です
ノート一覧を取得したい
CodiMDには管理者ユーザのようなものはいないため、画面上からではDBに存在するノート一覧を確認する術が無く、DBを直接叩くしかない。
これを行うことで行方不明になってしまったノートを救うことができる。
hackmd=# SELECT title,shortid,alias FROM "Notes";
title | shortid | alias
-------------------------+-----------+---------------
aaa | rJJMNlqVE |
Supported YAML metadata | HyLa2l5EV | yaml-metadata
aaa | S1Ad7x9VV |
hoge | QxfVfPXMx |
ノートのURLはhttp://<CODIMD_HOST>:<PORT>/eGf30HxvQA-9iUqFgWe0ew
のようなやたら長いURLになっているが、おそらく後ろのハッシュみたいな文字列はDBに保存されていない。
ではどうすれば各ノートのURLがわかるのかと言うと、単純にshortid
の値をハッシュみたいな文字列の代わりに打ち込めばよい。
例えば、上記のhoge
にはhttp://<CODIMD_HOST>:<PORT>/QxfVfPXMx
でアクセスできる。
また、content
というカラムの中にノートに記載した文章が入っており、これを使うことでなにかしらWebアプリケーションを作れそうな気もする。
ユーザ一覧を取得したい
ノート一覧と同じく、ユーザ一覧もDBを直接叩く以外に確認方法は無い。
これを行うことで「ユーザ名忘れた」に対応することができる。
hackmd=# SELECT email FROM "Users";
email
-------------------
user1@dummy.co.jp
実在しないメールアドレスでも登録できるため、誰がどのユーザ名なのかをリスト化したノートを作っておくと更に安心かもしれない。
本当にしっかり使うつもりならLDAPとかGitHubなどと連携するべきな気はする。
特定のユーザのパスワードを初期化したい
CodiMDでサインインできなくなるとそのユーザしか知らないノートが行方不明になったり、過去に共有したノートのURLを再度教えてもらう必要があるなど、割と致命的な事態になりかねない(一応上に記載した方法で迷子のノートの復旧は可能だが)
これは実はCodiMDのコンテナ(DBの方ではない)の中にツールが用意されており、それを実行すれば指定したユーザのパスワードを強制的に変更することができる。
docker exec
などでCodiMDのコンテナへ入り、以下を実行
./bin/manage_users --reset <user_name>
例えば、user1@dummy.co.jp
ユーザのパスワードを変更したい場合は以下のように実行する。
./bin/manage_users --reset user1@dummy.co.jp
変更したいパスワードの入力を求められるので、適当に入力すれば完了
これで「パスワード忘れた」にも対応することができる。