Docker for Windows で結果も確認せず Mastodon を建ててみた

そこに Docker for WindowsMastodon があったので。

Dockerで雑にMastodonを起動する方法を参考に作業したのだが、 Mastodon 自体のバージョン差異やOSの違いでところどころ躓いたのでメモを残してみる。

ベースとして参照したドキュメントは上記ページと 公式の Docker 用インストールガイド

Docker for Windows のインストールと設定

公式より随意にダウンロードとインストールを行う。わたしが使ったのは Version 18.06.0-ce-win70 (19075) 。

データを永続化してみようと思うので、タスクトレイアイコンの右クリックから出てくるメニューで Settings を選ぶ。表示されたダイアログの Shared Devices タブにて、共有したいドライブへチェックを入れる。Windows アカウントのパスワードを聞かれるので答える。

リポジトリのクローン

任意のディレクトリで https://github.com/tootsuite/mastodon.git を git clone する。

わたしが作業した時点での最新コミットは Update to Node 8.x · tootsuite/documentation@f92195c · GitHub かな。

docker-compose.yml の書き換え

まず、ファイルを開く。

特に my own image をビルドする必要はないので、 web, streaming, sidekiq の build: . 行はコメントアウトする。

今回はデータの永続化を目指すので、コメントで記載されている通り、以下の行のコメントアウトを外す。

#    volumes:
#    - ./postgres:/var/lib/postgresql/data
#    volumes:
#    - ./redis:/data

Docker for Windows には postgres のマウント周りにコツがあるようなので、 GitHub のコメントを参考に以下の行を末尾へ追加する。 networks のさらに下でよい。

volumes:
  postgres:
    external: true

GitHub のコメントを参考に、 db へ environment を追記する。 user や password はセットアップ時のウィザードで聞かれるので、ここへ書く必要はなさそう。

  volumes:
    - ./postgres:/var/lib/postgresql/data
   environment:
    PGDATA: /tmp

PGDATA を記載しないと、 db の起動が失敗したり、セットアップ時のウィザードで db へ繋がらないって怒られる。

.env.production の書き換え

.env.production.sample をベースに .env.production を作成する。

作成した .env.production の Application secrets を設定する。ファイル内コメントに従い、 docker-compose run --rm web rake secret の結果を SECRET_KEY_BASE と OTP_SECRET へ設定する。

default language を設定する。

# DEFAULT_LOCALE=de

この行のコメントアウトを外し、日本語へ書き換える。

DEFAULT_LOCALE=ja

build を行う

docker-compose build を実行する。

次に docker-compose run --rm web bundle exec rake mastodon:setup を実行する。いろいろ質問されるので、任意に答える。 db と redis の設定は、ただ Enter キーを叩けばいいだろう。うまく質問に答えられれば、DBの初期化とアセットのコンパイルが始まる。

All done! You can now power on the Mastodon server と表示されれば成功だ。成功だろう。だって All done! だぞ。 You can now power on the Mastodon server だぞ。

Mastodon を立ち上げる

docker-compose up -d を実行する。

接続に失敗する

ブラウザのアドレスバーへ https://localhost:3000/ と入力し、 Enter キーを押下してみよう。 Firefox では SSL_ERROR_RX_RECORD_TOO_LONG 、 Google Chrome では ERR_SSL_PROTOCOL_ERROR といった文字列が見られるのではないだろうか。

さて、ここで公式のドキュメントへ戻ってみよう。


Prerequisites

  • Working basic (Linux) server with Nginx (or Apache2; not officially supported).

そうだ。 Nginx か Apache2 が必要なのだ。

.env.production にも Changing LOCAL_HTTPS in production is no longer supported. (Mastodon will always serve https:// links) とコメントされている通り、もはや non SSL ではアクセスできないらしいので、良い子のみんなは前提条件を整えようね。

ぶっちゃけメール送信用の設定もしてないしね。これだけで Mastodon が動くってわけではない。ただ、とりあえず All done! までは持っていけたので、備忘録として。