[v2.5.2対応] Dockerでらくらく!マストドンの開発環境構築

タイトルは釣りです。Dockerが入っている環境前提での作業環境構築の備忘録です。

参考: Vagrant や Docker を使わずに macOS でマストドンの開発環境を構築する – Qiita

Docker使わない版も用意しました!

Docker使わない環境構築はこちら

まずは開発ガイドラインを読もう

マストドン公式 開発ガイドライン
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Development-guide.md

.env.productionの修正

マストドンのソースが手元にある状態にしてまず最初にやるのがこのファイルの編集です。
下記の部分を変更していきます。

LOCAL_DOMAIN

localhost:3000

SECRET_KEY_BASE と OTP_SECRET

docker-compose run --rm -e RAILS_ENV=production web bundle exec rake secret

を二回叩いてちゃちゃっと設定します。

VAPID_PRIVATE_KEY と VAPID_PUBLIC_KEY

docker-compose run --rm web rake mastodon:webpush:generate_vapid_key

を一度だけ実行してコピペして貼り付けます。

SINGLE_USER_MODE

おひとりさまインスタンスにしたいときは

SINGLE_USER_MODE=true

複数アカウント作りたいときは

SINGLE_USER_MODE=false

にします。

アカウント新規作成画面やログイン画面にアクセスしようとするとID1番のユーザーのページに飛ぶ挙動になります。

DEFAULT_LOCALE

ja

日本語を使うので日本にします。

SMTP関係

SMTP_SERVER=localhost
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com

使わないのでこうします。

docker-compose.ymlの編集

web

command: tail -f /mastodon/README.md
volumes: - ./:/mastodon
ports: - "127.0.0.1:3000:3000"

commandの行を書き換えておきます。
こうすることで、コンテナが落ちなくなります。
volumesはソースファイルをコンテナ内外から直接編集できるようにするためです。

ここまできたら

docker-compose up -d

で起動します。

コンテナに入るには、

docker-compose exec web bash

これで入ります。

rootで入りたい場合は、

docker-compose exec --user root web bash

で入ります。

migrate

dbのセットアップをします。

docker-compose run -e RAILS_ENV=development --rm web rake db:migrate

これだけでOK。

[webコンテナ内] yarn

yarn
yarn install --dependencies
yarn add webpack-dev-server --dependencies

基本的にはyarnだけでOKですが、トラブルシュート的に3行

[webコンテナ内] development許可

sed -i 's|BUNDLE_WITHOUT: "test:development"||g' /usr/local/bundle/config

[webコンテナ内] Rails側でアセットのコンパイルをしない

sed -i 's/compile: true/compile: false/' config/webpacker.yml

[webコンテナ内] bundle install

bundle install

[webコンテナ内] webpacker:install

RAILS_ENV=development rails webpacker:install

不要かもしれませんが念の為・・・。
全てnで解答します。

[webコンテナ内] 環境設定

echo 'export RAILS_ENV=development' >> ~/.bashrc
echo 'export NODE_ENV=development' >> ~/.bashrc
source ~/.bashrc

[webコンテナ内] rails起動

RAILS_ENV=development bundle exec rails server

[webコンテナ内] webpack –watch起動

vim config/webpack/development.js

してから、

watchOptions: { poll: 1000
}

を追加、これで1秒ごとにファイルの変更を監視します。

NODE_ENV=development RAILS_ENV=development yarn build:development --watch

こちらで監視のスタートとアセットのコンパイルをするようになります。
差分変更に対応しているのでファイル変更時はコンパイルが早いです。

localhost:3000にアクセス

http://localhost:3000 にアクセスして起動していることを確認します。

[webコンテナ内] admin作成

まずはじめに、管理画面からアカウントを作成します。

RAILS_ENV=development rails mastodon:confirm_email USER_EMAIL=admin@example.com
RAILS_ENV=development rails mastodon:make_admin USERNAME=admin

[webコンテナ内] alpine linuxの環境改善

docker-compose exec --user root web bash

でrootでログイン後、

apk update
apk add --update alpine-sdk
apk add vim tmux wget curl lsof tree sudo

を実行しておくと使いやすくなると思います。

LiveReload

コンテナの外での作業です。ファイルが変更されたら、自動的にブラウザをリロードします。
LiveReload というChrome拡張をインストールします。

livereload本体は、下記URLの手順でインストールします。

Winの場合: http://livereload.com/
Macの場合: http://macappstore.org/livereload/

Mac版は App Storeでは有料ですが、それ以外のインストール手段では無料です。npm版もあります。

アセットコンパイルに時間がかかるので3秒後にブラウザをリロードするようにしてlivereloadを起動します。

livereload . --wait 3000