Dockerでmisskeyをおっ建てよう

2018/08/19

Categories: 日記 Tags: SNS 技術的

misskeyのAPIラッパを開発していると、様々なAPIをテストしてみたくなります。かといって公開されているインスタンスで好き勝手するとかなーり迷惑です。(たぶん)そこで、公式から提供されているDockerイメージを使って、ローカルにmisskeyインスタンスを構築しましょう。

1 misskeyの設定ファイルをいじる

Githubからmisskeyをクローンしてきて、そのディレクトリに移動した段階だとします。

まず、公式ドキュメントに従って.config/example.yml.config/default.ymlにリネーム、.config/mongo_initdb_example.js.config/mongo_initdb,jsにリネームします。 コレを忘れると勝手にディレクトリが作成されて二進も三進も行かなくなります。(1敗)

そして公式ドキュメントには、「編集する」としか記述されていませんが、default,ymlをいじります。

# Final accessible URL seen by a user.
- url: https://example.tld/
+ url: https://misskey-local.test

# (中略)

# To use option 1, uncomment below line.
- # port: 3000    # A port that your Misskey server should listen.
+ port: 3000    # A port that your Misskey server should listen.

# To use option 2, uncomment below lines.
# port: 443
#
# https:
#   # path for certification
#   key: /etc/letsencrypt/live/example.tld/privkey.pem
#   cert: /etc/letsencrypt/live/example.tld/fullchain.pem

################################################################


mongodb:
- host: localhost
+ host: mongo
  port: 27017
  db: misskey
  user: example-misskey-user
  pass: example-misskey-pass

# (以下省略)

ポート番号を指定しないともれなくエラーを吐いて死にます。(2敗) また、docker-compose内ではサービス名がホスト名として扱われるため、localhostと指定しているとうまく動きません。具体的に言うと、アカウント登録フォームが描画されません。このことを知らずに、Githubにissueを提出してメンテナにそれを指摘されると、死にたくなるくらい恥ずかしいので気をつけましょう。(1敗)

mongo_initdb,jsはいじらなくて大丈夫です。(たぶん)

2 Dockerの設定ファイルをいじる

やはり、公式ドキュメントには「docker-compose.ymlを編集する」としか記述されていませんが、docker-compose.ymlを弄り倒します。

まず、misskeyのgithubから持ってきた状態では、何をやってもアカウント登録を行うことができません。コレのおかげで2週間無駄になりました。 HTTP接続で接続しているのでクッキーを作成できないのが原因だそうです。なので、TLS周りの面倒くさいことを全部やってくれるdockerコンテナを追加しましょう。https-portalです。

version: "3"

services:
+ https-portal:
+   image: steveltn/https-portal:1
+   restart: always
+   links:
+     - web
+   ports:
+     - '80:80'
+     - '443:443'
+   networks:
+     - internal_network
+     - external_network
+   environment:
+       STAGE: local
+       DOMAINS: misskey-local.test -> http://web:3000

  web:
    build: .
    restart: always
    links:
      - mongo
#      - redis
#      - es
    ports:
      - "127.0.0.1:3000:3000"
    networks:
      - internal_network
-     - external_network
+   volumes:
+       - ./.config/default.yml:/misskey/.config/default.yml:ro
(以下省略)

これでHTTPSで通信ができるようになりました。この設定だとオレオレ証明書を使っているので、外部に公開する人はGoogleでテキトーに調べてやってください。

また、設定ファイルをmisskeyにマウントすることをお忘れなく。(1敗)

3 システムの設定ファイルをいじる

コレはLinuxの話です。macOSだとかなんちゃらBSDだとかWindowsとか知ったこっちゃありません。最初のステップでdefalut,ymlを編集したとき、なにかURLを指定したことを覚えていますか…? この記事では覚えていない人への救済は一切ありませんので忘れた方は一番最初から読み直してください。

最初に指定したURLからアクセスできるよう、/etc/hostsを編集します。

+ 127.0.0.1   misskey-local.test

これを追記するだけです。簡単ですね。

4 ビルドそして起動

とりあえずビルドしましょう。docker-compose buildでできます。言っておきますがなにか悪い冗談なんじゃないかってくらい重いです。Youtubeなんか見ながらやっているとたまにフリーズします。(1敗)

そしていい感じになったらdocker-compose up -dしたあと、ブラウザーでmisskey-local.testにアクセスして親の顔より見た画面が表示されれば成功です! お疲れ様でした。