【Fediverse】MastodonをGitpodで動かすためにやったこと【2022年冬】
TL;DR
- Ruby 2.7かRuby3.0が必要。
Ruby 2.6は公式サポートが終了しており、現在のMastodonはRuby 3.1ともうすぐ公開されるRuby 3.2に対応していない。
Gitpodは現在Ruby 3.1なのでRVMでバージョンを下げておく。 - Mastodon 3.5とMastodon 4.0ではcld3-rubyを使わなくなったため、Protocol Buffersに関するパッケージインストールが不要になりビルド時間とエラー発生率が減った。
Mastodon 3.4.0~Mastodon 3.4.8では変わらずcld3-rubyを使うため、Protocol Buffersに関するパッケージインストールが必要になることがある。
例えばMastodonのフォークであるFedibirdは現在Mastodon 3.4.1なので、Protocol Buffersの3系統をインストールする。 - Mastodon 4.0で
tootctl accounts create
コマンドを使う際--role
オプションで渡すロールは大文字で始まる。
Mastodon 3.4とMastodon 3.5では--role admin
にする。
Mastodon 4.0では上記オプションでエラーが発生するので、--role Owner
にする。
Intro
1年程前に以下のような記事を書きました。
少し前にこのGitpod Mastodonが動かなくなっていることに気づき、本日ようやく解決することができたのでまたまた覚書程度の文章を残しておきます。
本当は前回の記事を修正するかスクラップ記事を公開するだけにしようと思ったのですが社会情勢を鑑みて今回新たに記事を作成することにします。
そのため前回の記事で解説した部分は省きます。
公開当時はMastodon 3.4だったのですが、途中Mastodon 3.5が公開されましたし、もうすぐ公開されるMastodon 4.0のRC1が今回メインで動かせるようにしたバージョンなので、各バージョンを順次紹介していきたいと思います。
必要に応じて読み飛ばしてください。
前回と同じく.gitpod.ymlのtasks:
をメインに解説します。
Mastodon 3.4
2021年3月9日からRC1が公開され、2021年3月17日に正式に公開されたバージョンです。
ちょうどMastodon公式アプリがiOSとAndroidで公開された頃になります。
History
- v3.4.0rc1 on May 9, 2021 d1442a0x
- v3.4.0rc2 on May 11, 2021 7bd2b54
- v3.4.0 on May 17, 2021 4c7efdb
- v3.4.1 on Jun 3, 2021 d6486c9
- v3.4.2 on Nov 6, 2021 8a74d85
- v3.4.3 on Nov 6, 2021 4b66688
- v3.4.4 on Nov 26, 2021 fd868f8
- v3.4.5 on Feb 1, 2022 1c8c318
- v3.4.6 on Feb 3, 2022 93a6c14
- v3.4.7 on Mar 30, 2022 2a28247
- v3.4.8 on May 27, 2022 d4ee7e8
- v3.4.9 on Nov 15, 2022 ecd0cf1
- v3.4.10 on Nov 15, 2022 4a5f458
Gitpod
.gitpod.yml全文
image: gitpod/workspace-postgres
tasks:
- name: streaming
before: gp sync-await before
init: gp sync-await init
command: |
cd mastodon
NODE_ENV=production BIND=0.0.0.0 PORT=8008 STREAMING_CLUSTER_NUM=1 node ./streaming
- name: sidekiq
before: |
gp sync-await before
export PATH="$(brew --prefix protobuf)@3/bin:$PATH"
export LD_LIBRARY_PATH="$(brew --prefix protobuf)@3/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$(brew --prefix protobuf)@3/lib/pkgconfig:$PKG_CONFIG_PATH"
redis-server --daemonize yes
init: gp sync-await init
command: |
cd mastodon
RAILS_ENV=production DB_POOL=5 bundle exec sidekiq -c 5
- name: web
before: |
mkdir -p /workspace/.rvm
rvm install 3.0.4
brew install protobuf@3 libidn redis
export PATH="$(brew --prefix protobuf)@3/bin:$PATH"
export LD_LIBRARY_PATH="$(brew --prefix protobuf)@3/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$(brew --prefix protobuf)@3/lib/pkgconfig:$PKG_CONFIG_PATH"
if [ -z "$GITTAG" ]; then export GITTAG=v3.4.8; fi
gp sync-done before
init: |
git clone -b "$GITTAG" https://github.com/mastodon/mastodon.git
echo "$RUBY_VERSION" | cut -d- -f2 > mastodon/.ruby-version
cd mastodon
git checkout "$GITTAG"
bundle config --local build.idn-ruby --with-idn-dir="$(brew --prefix libidn)"
bundle install
yarn install
echo "LOCAL_DOMAIN=$(gp url 8080 | cut -d/ -f3)" > .env.production
cat ../.env.production.example >> .env.production
echo "SECRET_KEY_BASE=$(RAILS_ENV=production bundle exec rake secret)" >> .env.production
echo "OTP_SECRET=$(RAILS_ENV=production bundle exec rake secret)" >> .env.production
RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key >> .env.production
RAILS_ENV=production rails db:setup
RAILS_ENV=production rails assets:precompile
RAILS_ENV=production bin/tootctl accounts create a --email "admin@$(gp url 8080 | cut -d/ -f3)" --confirmed --role admin
echo "E-mail address: admin@$(gp url 8080 | cut -d/ -f3)"
cd ..
gp sync-done init
command: |
cd mastodon
RAILS_ENV=production BIND=0.0.0.0 PORT=8080 RAILS_SERVE_STATIC_FILES=true bundle exec puma -C config/puma.rb
ports:
- port: 8080
visibility: public
onOpen: open-preview
- port: 8008
onOpen: ignore
- port: 5432
onOpen: ignore
- port: 6379
onOpen: ignore
vscode:
extensions:
- mtxr.sqltools
- mtxr.sqltools-driver-pg
まず現在のMastodonはRuby 2.7かRuby3.0が必要になります。
Ruby 2.6は公式サポートが終了しており、Ruby 3.1ともうすぐ公開されるRuby 3.2に対応していません。
Gitpodは現在Ruby 3.1だったため、RVMでバージョンを下げておきます。
また、Mastodon 3.4.0~Mastodon 3.4.8ではcld3-rubyを使うため、Protocol Buffersに関するパッケージインストールが必要になります。
例えばMastodonのフォークであるFedibirdは現在Mastodon 3.4.1なので、Protocol Buffersの3系統をインストールします。
今回もUbuntuのaptとは別にHomebrew(Linuxbrew)を使用しているため環境変数LD_LIBRARY_PATHとPKG_CONFIG_PATHにHomebrewのパスを通す必要があるのですが、この際@3を指定する必要がある他、別途binのパスもPATHに追加する必要があります。
ただcld3-rubyの3.5.0からProtocol Buffersを使わなくなったそうなので、今後公開されるMastodon 3.4でcld3-rubyのバージョンが上がり、Protocol Buffersに関するパッケージインストールが不要になるかもしれません。
Diff
--- .3400.gitpod.yml 2022-11-05 09:55:00.000000000 +0000
+++ .3401.gitpod.yml 2022-11-05 09:55:00.000000000 +0000
@@ -12,2 +12,3 @@
- export LD_LIBRARY_PATH="$(brew --prefix protobuf)/lib:$LD_LIBRARY_PATH"
- export PKG_CONFIG_PATH="$(brew --prefix protobuf)/lib/pkgconfig:$PKG_CONFIG_PATH"
+ export PATH="$(brew --prefix protobuf)@3/bin:$PATH"
+ export LD_LIBRARY_PATH="$(brew --prefix protobuf)@3/lib:$LD_LIBRARY_PATH"
+ export PKG_CONFIG_PATH="$(brew --prefix protobuf)@3/lib/pkgconfig:$PKG_CONFIG_PATH"
@@ -22,3 +23,5 @@
- brew install protobuf libidn redis
- export LD_LIBRARY_PATH="$(brew --prefix protobuf)/lib:$LD_LIBRARY_PATH"
- export PKG_CONFIG_PATH="$(brew --prefix protobuf)/lib/pkgconfig:$PKG_CONFIG_PATH"
+ rvm install 3.0.4
+ brew install protobuf@3 libidn redis
+ export PATH="$(brew --prefix protobuf)@3/bin:$PATH"
+ export LD_LIBRARY_PATH="$(brew --prefix protobuf)@3/lib:$LD_LIBRARY_PATH"
+ export PKG_CONFIG_PATH="$(brew --prefix protobuf)@3/lib/pkgconfig:$PKG_CONFIG_PATH"
Mastodon 3.5
2022年3月15日からRC1が公開され、2022年3月30日に正式に公開されたバージョンです。
当時Twitterにはなかった投稿の編集機能が追加され話題を呼びました。
History
- v3.5.0rc1 on Mar 15, 2022 4bdce2c
- v3.5.0rc2 on Mar 26, 2022 07f8b4d
- v3.5.0rc3 on Mar 26, 2022 d7d049a
- v3.5.0 on Mar 30, 2022 8c7223f
- v3.5.1 on Apr 9, 2022 ed5491e
- v3.5.2 on May 4, 2022 0140659
- v3.5.3 on May 27, 2022 fbcbf78
- v3.5.4 on Nov 15, 2022 105ab82
- v3.5.5 on Nov 15, 2022 696f7b3
Gitpod
.gitpod.yml全文
image: gitpod/workspace-postgres
tasks:
- name: streaming
before: gp sync-await before
init: gp sync-await init
command: |
cd mastodon
NODE_ENV=production BIND=0.0.0.0 PORT=8008 STREAMING_CLUSTER_NUM=1 node ./streaming
- name: sidekiq
before: |
gp sync-await before
redis-server --daemonize yes
init: gp sync-await init
command: |
cd mastodon
RAILS_ENV=production DB_POOL=5 bundle exec sidekiq -c 5
- name: web
before: |
mkdir -p /workspace/.rvm
rvm install 3.0.4
brew install libidn redis
if [ -z "$GITTAG" ]; then export GITTAG=v3.5.3; fi
gp sync-done before
init: |
git clone -b "$GITTAG" https://github.com/mastodon/mastodon.git
echo "$RUBY_VERSION" | cut -d- -f2 > mastodon/.ruby-version
cd mastodon
git checkout "$GITTAG"
bundle config --local build.idn-ruby --with-idn-dir="$(brew --prefix libidn)"
bundle install
yarn install
echo "LOCAL_DOMAIN=$(gp url 8080 | cut -d/ -f3)" > .env.production
cat ../.env.production.example >> .env.production
echo "SECRET_KEY_BASE=$(RAILS_ENV=production bundle exec rake secret)" >> .env.production
echo "OTP_SECRET=$(RAILS_ENV=production bundle exec rake secret)" >> .env.production
RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key >> .env.production
RAILS_ENV=production rails db:setup
RAILS_ENV=production rails assets:precompile
RAILS_ENV=production bin/tootctl accounts create a --email "admin@$(gp url 8080 | cut -d/ -f3)" --confirmed --role admin
echo "E-mail address: admin@$(gp url 8080 | cut -d/ -f3)"
cd ..
gp sync-done init
command: |
cd mastodon
RAILS_ENV=production BIND=0.0.0.0 PORT=8080 RAILS_SERVE_STATIC_FILES=true bundle exec puma -C config/puma.rb
ports:
- port: 8080
visibility: public
onOpen: open-preview
- port: 8008
onOpen: ignore
- port: 5432
onOpen: ignore
- port: 6379
onOpen: ignore
vscode:
extensions:
- mtxr.sqltools
- mtxr.sqltools-driver-pg
Mastodon 3.5と後述するMastodon 4.0ではcld3-rubyを使わなくなったため、Protocol Buffersに関するパッケージインストールが不要になります。
Mastodon 3.4と比較してビルド時間とエラー発生率が減りました。
Diff
--- .3401.gitpod.yml 2022-11-05 09:55:00.000000000 +0000
+++ .3500.gitpod.yml 2022-11-05 09:55:00.000000000 +0000
@@ -12,3 +11,0 @@
- export PATH="$(brew --prefix protobuf)@3/bin:$PATH"
- export LD_LIBRARY_PATH="$(brew --prefix protobuf)@3/lib:$LD_LIBRARY_PATH"
- export PKG_CONFIG_PATH="$(brew --prefix protobuf)@3/lib/pkgconfig:$PKG_CONFIG_PATH"
@@ -24,4 +21 @@
- brew install protobuf@3 libidn redis
- export PATH="$(brew --prefix protobuf)@3/bin:$PATH"
- export LD_LIBRARY_PATH="$(brew --prefix protobuf)@3/lib:$LD_LIBRARY_PATH"
- export PKG_CONFIG_PATH="$(brew --prefix protobuf)@3/lib/pkgconfig:$PKG_CONFIG_PATH"
+ brew install libidn redis
Mastodon 4.0
2022年5月27日から5ヶ月ぶりの2022年10月26日にRC1に関する情報がコミットされました。
その後Changelogなど加筆修正され、2022年11月6日にGitタグが付与されました。
History
- v4.0.0rc1 on Nov 6, 2022 58fc889
- v4.0.0rc2 on Nov 6, 2022 5187e4e
- v4.0.0rc3 on Nov 11, 2022 5e796dc
- v4.0.0rc4 on Nov 14, 2022 75299a0
- v4.0.0 on Nov 15, 2022 fb389bd
- v4.0.1 on Nov 15, 2022 4415dd6
- v4.0.2 on Nov 15, 2022 03b0f3a
Gitpod
.gitpod.yml全文
image: gitpod/workspace-postgres
tasks:
- name: streaming
before: gp sync-await before
init: gp sync-await init
command: |
cd mastodon
NODE_ENV=production BIND=0.0.0.0 PORT=8008 STREAMING_CLUSTER_NUM=1 node ./streaming
- name: sidekiq
before: |
gp sync-await before
redis-server --daemonize yes
init: gp sync-await init
command: |
cd mastodon
RAILS_ENV=production DB_POOL=5 bundle exec sidekiq -c 5
- name: web
before: |
mkdir -p /workspace/.rvm
rvm install 3.0.4
brew install libidn redis
if [ -z "$GITTAG" ]; then export GITTAG=main; fi
gp sync-done before
init: |
git clone -b "$GITTAG" https://github.com/mastodon/mastodon.git
echo "$RUBY_VERSION" | cut -d- -f2 > mastodon/.ruby-version
cd mastodon
git checkout "$GITTAG"
bundle config --local build.idn-ruby --with-idn-dir="$(brew --prefix libidn)"
bundle install
yarn install
echo "LOCAL_DOMAIN=$(gp url 8080 | cut -d/ -f3)" > .env.production
cat ../.env.production.example >> .env.production
echo "SECRET_KEY_BASE=$(RAILS_ENV=production bundle exec rake secret)" >> .env.production
echo "OTP_SECRET=$(RAILS_ENV=production bundle exec rake secret)" >> .env.production
RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key >> .env.production
RAILS_ENV=production rails db:setup
RAILS_ENV=production rails assets:precompile
RAILS_ENV=production bin/tootctl accounts create a --email "admin@$(gp url 8080 | cut -d/ -f3)" --confirmed --role Admin
echo "E-mail address: admin@$(gp url 8080 | cut -d/ -f3)"
cd ..
gp sync-done init
command: |
cd mastodon
RAILS_ENV=production BIND=0.0.0.0 PORT=8080 RAILS_SERVE_STATIC_FILES=true bundle exec puma -C config/puma.rb
ports:
- port: 8080
visibility: public
onOpen: open-preview
- port: 8008
onOpen: ignore
- port: 5432
onOpen: ignore
- port: 6379
onOpen: ignore
vscode:
extensions:
- mtxr.sqltools
- mtxr.sqltools-driver-pg
--role admin
にしていた箇所でエラーが発生していたため、--role Owner
にしました。
つまりMastodon 4.0でtootctl accounts create
コマンドを使う際--role
オプションで渡すロールは大文字で始まることに注意しなくてはなりません。
また、--role Admin
では全権限が付与されておらず、ユーザー設定のメニューにSidekiqとPgHeroが表示されなくなるので--role Owner
にする必要があります。
Owner > Admin > Moderatorと表現すれば分かりやすいでしょうか。
その他気をつける点としてはNode.js 14以上を要求するようになった点ぐらいでしょうか。
Mastodon 3.4とMastodon 3.5ではNode.js 12以上を要求されていたため、必要に応じてnvmでバージョンを上げておきましょう。
Diff
--- .3500.gitpod.yml 2022-11-05 09:55:00.000000000 +0000
+++ .4000.gitpod.yml 2022-11-05 09:55:00.000000000 +0000
@@ -40 +40 @@
- RAILS_ENV=production bin/tootctl accounts create a --email "admin@$(gp url 8080 | cut -d/ -f3)" --confirmed --role admin
+ RAILS_ENV=production bin/tootctl accounts create a --email "admin@$(gp url 8080 | cut -d/ -f3)" --confirmed --role Owner
Changelog
Mastodon 4.0.0 RC1の項目は何度か修正しているので編集履歴を残しておきます。
- 2022/11/06
--role Admin
から--role Owner
に修正 - 2022/11/06 Gitタグが付与されRC2も公開されたため追加
- 2022/11/13 RC3が公開されたため追加してNode.jsのバージョンについて補足説明
- 2023/02/19 Mastodon 4.1が公開されたので各バージョンを追加
Outro
今回は一応.gitpod.yml内で使用している.env.production.exampleも掲載しておきます
.env.production.example全文
SINGLE_USER_MODE=true
DB_HOST=127.0.0.1
DB_PORT=5432
DB_NAME=postgres
DB_USER=gitpod
DB_PASS=
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
SMTP_DELIVERY_METHOD=file
GitHubやGitLabで新しくリポジトリを作り、.gitpod.ymlと.env.production.exampleをアップロードしてGitpodで立ち上げれば簡単にMastodonを立てることができるので、皆さんも試しにGitpodでMastodonを動かしてみてください。
ところで2022年冬っていつ頃なんでしょう。私はもう冬気分です。
Discussion