✌️

kmyblueをdockerで立ち上げる個人的メモ

2024/12/24に公開

おことわり

  • これは私個人のメモであり、参考程度にしてください

前提

  • 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の設定方法が違います

https://github.com/kmycode/mastodon/wiki/ElasticSearch設定方法

Sudachiを使うらしく、docker-compose.ymlのesをそのままでは使えません。
一応私が用意したプラグイン導入済みのelasticsearchを用意しているので置き換えるだけで使えます。

ghcr.io/lqvp/elasticsearch-7.17.8-3.3.0:latest

.env.producitonではES_HOSTesにするだけです。
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_ENABLEDfalseにしてください

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