Mastodon を Docker で起動する
ご存知 Mastodon です。以下は Windows の Vagrant 上の Ubuntu 16.04 LTS での内容ですが、おそらくどの環境でも通じると思います。
Docker と Docker Compose を入れる
Docker を入れた直後にCannot connect to the Docker daemon. Is the docker daemon running on this host?
みたいに怒られるときは再起動です。
また、Docker Compose
はバージョンが古いとエラーで実行できないので、手動で入れるのがいいでしょう。コピペでコマンドを2つ叩くだけです。
git clone する
/opt
あたりでgit clone
しましょう。
# cd /opt # git clone https://github.com/tootsuite/mastodon.git
ドキュメントにしたがってファイルを編集する
ドキュメントは以下にあります(これでもかって言うくらいに親切です)。念のため具体的な手順を次に書いていきます。 https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Docker-Guide.md
ドキュメントにしたがってファイルを編集する(具体的な手順)
1. データを永続化する場合はdocker-compose.yml
を編集する
デフォルトのdocker-compose.yml
だとPostgreSQL
とRedis
のデータが永続化されておらず、まさにお試し状態ですので、これらのコメントアウト部分を有効化してデータを永続化しましょう。もちろん「お試し」の場合はそのままでもいいです。
該当箇所は以下です。
db: restart: always image: postgres:alpine ### Uncomment to enable DB persistance # volumes: # - ./postgres:/var/lib/postgresql/data redis: restart: always image: redis:alpine ### Uncomment to enable REDIS persistance # volumes: # - ./redis:/data
2. .env.production
ファイルを編集する
.env.production
を編集します。git clone
した直後の状態では.env.production
が存在しませんので、ひな形をコピーします。
# cp .env.production.sample .env.production
その後に内容を編集します。ドキュメントでは以下の項目を設定する(書き加える、書き直す)必要があるだろうと書かれています。
- LOCAL_DOMAIN
- LOCAL_HTTPS
- the SMTP_*
以下も書き加える必要がありますが、Docker を用いる場合は後ほど取得することになるのでとりあず空欄でいいです。
- PAPERCLIP_SECRET
- SECRET_KEY_BASE
- OTP_SECRET
一方で、以下の部分はそのままにしておかなければいけない、とあります。
- REDIS_*
- DB_*
編集し終えたら保存しましょう。
3. ビルドする
ビルドしましょう。
# docker-compose build
4. SECRET を取得する
SECRET を取得します。取得できた SECRET を.env.production
に書き込みます。お試し実行をした際にdocker-compose down
するなどしてコンテナを削除した場合は再取得します。
# docker-compose run --rm web rake secret
こんな感じで SECRET が出力されると思います。
Creating mastodon_db_1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.env.production
ファイルに書き加える場所は以下の項目です。以下の3つにxxxx...xxx
を書き加えましょう。
- PAPERCLIP_SECRET
- SECRET_KEY_BASE
- OTP_SECRET
5. migrate する
DB をmigrate
します。
# docker-compose run --rm web rails db:migrate
6. assets をコンパイルする
以下のとおりです。ご存知のように少し時間がかかります。
# docker-compose run --rm web rails assets:precompile
7. 起動する
ようやく起動です。バックグラウンドで起動するために-d
オプションを追加しています。
# docker-compose up -d
8. アクセスする
デフォルトの 3000番 ポートに Webブラウザ でアクセスして画面が表示されれば OK です。ここまでできたならば後はいろいろいじって試せると思います。
X. 注意点とか
docker-compose.yml
を見ると分かりますが、rails s
してますので、もし本格的に運用したいならば専用サーバやunicorn
を考えるべきかなと思います- ビルド中に怒られることが少々ありますが気にしないでも大丈夫です(気にすべきところも場合によってはありますが)
- インターネットに公開する場合は https 必須でしょう
- ユーザ認証メール中のリンク先アドレスはポート番号を考慮してくれません(見ていませんがこれはプルリク出されてそう)
- ソースを書き換えたとするとその度にビルドしなければいけないので大変です*1
*1:コンテナの中に入って書き換えればいいかもですが