LoginSignup
12
11

More than 3 years have passed since last update.

CodiMDのDBまわりのTips

Posted at

だいぶ前から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

変更したいパスワードの入力を求められるので、適当に入力すれば完了
これで「パスワード忘れた」にも対応することができる。

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11