kmyblueをdockerで立ち上げる個人的メモ
おことわり
- これは私個人のメモであり、参考程度にしてください
前提
- dockerがインストール済み
- cloudflaredを使用している
nginxは今回使用してません。
一番最初にすること
git clone https://github.com/kmycode/mastodon/
cd mastodon
cp .env.production.sample .env.production
docker-compose.ymlの書き替え
web/sidekiq
#build .
image: ghcr.io/lqvp/kmyblue-ghcr:latest-16
streaming
#build:
# dockerfile: ./streaming/Dockerfile
# context: .
image: ghcr.io/lqvp/kmyblue-ghcr-streaming:latest-16
のようにする
kmyblueでは本家mastodonとElasticSearchの設定方法が違います
Sudachiを使うらしく、docker-compose.yml
のesをそのままでは使えません。
一応私が用意したプラグイン導入済みのelasticsearchを用意しているので置き換えるだけで使えます。
ghcr.io/lqvp/elasticsearch-7.17.8-3.3.0:latest
.env.produciton
ではES_HOST
をes
にするだけです。
user/passはコメントアウトして良さそう?
詳しい設定はkmycode/mastodonのwikiを見てください。
.env.production
の書き替え
REDIS_HOST=redis
DB_HOST=db
HOSTの部分をこのように書き換えるだけで、それ以外の項目はいつもどおり
立ち上げる
さて、書き換えたところで.env.production
を見るとsecretとweb push用のkeyが必要ですね。
以下のコマンドでそれぞれのkeyを作成できるので、出力されたものを.env.production
に書いてください。
環境によってはsudoで実行する必要があります。
secret
docker compose run --rm web bundle exec rails secret
web push
docker compose run --rm web bundle exec rails mastodon:webpush:generate_vapid_key
基本的にさっきの部分と
- LOCAL_DOMAIN
- DB_PASS
- SMTP_*
を追記する必要があります。
S3やelastic searchを使う方はそれらも書いてください。
不要であればS3_ENABLED
/ES_ENABLED
をfalse
にしてください
DBのセットアップ
.env.production
で書いたDB_USER
/DB_NAME
/DB_PASS
を覚えておいてください。
もしくはメモ帳にコピペしておく
そしたら、
docker compose up -d db
docker compose exec db bash
これで一度DBを立ち上げ、内部のbashに入ります。
psql -U postgres
でpostgresにアクセスします。
postgres=# CREATE USER {DB_USER};
CREATE ROLE
postgres=# alter role {DB_USER} with password '{DB_PASS}';
ALTER ROLE
postgres=# create database {DB_NAME} with owner={DB_USER};
CREATE DATABASE
のようにすればいいです。
各{DB_*}
はさっきの覚えておいたものに置き換えてください。({}は不要です)
出来たらexit
最近のmastodonではDBを暗号化するらしくて、その部分のセットアップが必要です。
docker compose run --rm web bundle exec rails db:encryption:init
を実行してください。
そうするとACTIVE_RECORD_ENCRYPTION_*
みたいなやつが3つ表示されるので、.env.production
にコピペしてください。
コピペする場所はどこでもいいですが、一番下にしておきました。
これが出来たらDBのマイグレーションを行います。
docker compose run --rm web rails db:migrate
これでコンソール上にば〜って表示されるので処理が終わるまで待ちます。
nginxを使わずにcloudflared tunnelを使う場合
この画像のように設定する必要があります。
nginxでは3000/4000を80/443で受け取ってるらしいです。
起動しよう
docker-compose.ymlを読んでいると、public/system
をvolumeとして使っているので権限が必要です。
オブジェクトストレージを使わない人は絶対に行ってください。
sudo chown -R 991:991 public/system
もしelasticsearchを使うのであれば
sudo chown -R 1000:1000 ./elasticsearch
さて、後は起動するだけです。
docker compose up -d
でkmyblueを起動してあげましょう。
ログが見たければ
docker compose logs -f
で全体のログを見れます
アカウントを作成し、ownerを付与したものを作りましょう。
docker compose run --rm web tootctl accounts create USERNAME --email EMAIL --confirmed --role Owner
を叩くことでNew password: ~~~
って表示されるので、これらの情報を使ってログインすることが出来ます。
その状態だと承認待ちになってしまうのでこれを叩きましょう。
docker compose run --rm web tootctl accounts modify USERNAME --approve
こうすることでログインしてアカウントを使用することが出来ます。
後はこれを叩いて上げるだけで完了です🎉
docker compose run --rm web tootctl search deploy --only=tags statuses public_statuses
elasticsearchのエラー?
ちなみにvm.max_map_count
が262144より低い場合エラーが出るので変更してあげてください。
sudo sysctl -w vm.max_map_count=262144
再起動後にも保持させるなら
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
Discussion