Installation - kmycode/mastodon GitHub Wiki

一般的な注意事項

kmyblueは頻繁にバージョンアップを行います。サポート期間も参照してください。

  • 安定したバージョンを使いたい場合は、LTSの利用をお勧めします。 LTSはMastodon本家の安定版リリースのみをベースとしています。kmyblue独自機能追加はほとんど行わず、バグ修正や重要な仕様変更のみを取り込みます。最新版より更新頻度が落ち、アップデート作業が比較的手軽になります
  • LTS以外のバージョンは、リリースとしての体裁は整えていますが開発版です。kmyblueの最新機能を使いたい人向けに提供しています
    • 本家Mastodonの開発中のバージョンを平然と取り込みます。バグや未翻訳の部分が含まれていることがあります
    • セキュリティパッチを適用しようとするとメジャーアップデートしなければいけない場面が多くあります

本家Mastodonからkmyblueに変更する

本家Mastodonに戻すところまでは一応方法は用意してますがサポートしていません。自己責任でお願いします。 また、実運用環境の作業で問題が起きてデータ消失など発生しても自己責任となっておりますので、必ずバックアップはとってください。

  1. kmyblueのリリースノートに、kmyblueバージョンに対応した本家Mastodonのバージョンが記載されています。あなたのMastodonがそれよりも新しい場合、そのままではマイグレーションが行えませんので、kmyblueの新しいリリースが出るまで待ってください。またはLTSの使用を諦めるなど各種検討をお勧めします
  2. Gitのリモートにkmyblueを追加して、そのままフェッチ・チェックアウトしてください
  3. データベースのマイグレーションなどを行ってください
  4. ElasticSearchを使う場合、ElasticSearch設定方法をご覧ください。本家とは設定方法が異なります
sudo systemctl stop mastodon-*

# ここでgitのリモートにkmyblue追加して、フェッチ・チェックアウトする

bundle install
yarn install
RAILS_ENV=production bin/rails db:migrate
RAILS_ENV=production bin/rails assets:clobber
RAILS_ENV=production bin/rails assets:precompile

# ElasticSearchを使用する場合
# --full true つければ他サーバーの投稿の大部分も取り込まれますが時間が非常にかかります
# サーバー再起動の後の実施でも可ですが、検索時にエラーが発生する可能性あるため
# 一時的に ES_ENABLED=false にすることをおすすめします
RAILS_ENV=production bin/tootctl search deploy

RAILS_ENV=production bin/tootctl cache clear
sudo systemctl start mastodon-web mastodon-streaming mastodon-sidekiq

Ruby、ElasticSearch、ImageMagick、PostgreSQLなど必須ソフトウェアのバージョンは、本家Mastodonに準じます。リリースノートに対応する本家Mastodonバージョンが記載されていますので、本家Mastodonのリリースノートから対応するバージョンを探して調べてください。

初期環境からセットアップする

自力でセットアップ

kmyblueのセットアップ方法は、本家Mastodonとほとんど同じです。違うのはクローンするリポジトリが異なる点、チェックアウトするタグの命名規則が異なる点だけです。(※kmyblueの設定に問題がある時は、気付き次第改善します。アセットのプリコンパイルでエラーが出た時はご連絡ください)

チェックアウトするタグの名前は、ReleasesTagsをご確認ください。kb_developmentブランチ(デフォルトブランチ)そのままだと、ほとんどの場合は開発中のバージョンになってしまいます。

Mastodon公式ドキュメントに、セットアップ手順が丁寧に書かれています。この通りにすれば絶対うまくいくというわけではありませんが(多くの場合、kmyblue特有の問題ではなく本家Mastodonでも同じ問題が発生します)、必ず助けになります。

Dockerによるインストール

kmyblueは、docker-compose.ymlについてMastodon本家にあるものを修正したものを一応用意していますが、実際にインストールして確認したわけではありません。インストールで不具合が出ても自己責任になる旨、ご了承の上お使いください。

自動セットアップスクリプト

Ubuntu 24.04 LTSの利用を前提としています。あらかじめドメインの取得/メールサーバー(SMTPサーバー)の契約を済ませてください。

これはDockerではなく、サーバーに直接ソフトウェアをインストールするものです。OSは初期状態であることを前提とします。そうでない場合は、できるだけ前項の手動インストールをおすすめします。

注意:自動セットアップスクリプトは以下をサポートしません。kmyblueを簡単にインストールできるようにしたものですが、あくまでLinuxの操作経験がある方に向けて作ったものであり、細かいチューイングやトラブル対応やアップデートなどは各自でやらなければいけません。
端的に言うと、Linuxの操作経験・知識、もし無くても根気が前提です。

  • サーバーのファイアウォール設定
    • 80、443ポートを開ける必要があります
    • Amazon EC2の場合はサーバーの外側で設定する必要があり、デフォルトではいずれも閉じています
    • その他のサービスでは、ファイアウォールの設定が端末の外(コントロールパネルなど)にないか、設定方法など事前に確認してください
  • DNS(サーバーとドメインを繋げる)設定
  • ElasticSearchのインストール
  • libvipsのサポート(現在、ImageMagickを使うようになっています)
  • サーバーのチューイング(人が増えた場合の設定変更など)
  • スクリプト自体に間違いがあった場合のトラブルシューティング
  • Cloudflareとの連携時のトラブルシューティング
    • Cloudflareの設定次第(というか初期設定)でWebが表示されなくなる場合がありますが、これはMastodon本体の問題です。解決方法は各自調べてください。面倒な場合はCloudflareのDNS設定でプロキシをオフにする方法もあります(後でいつでも再設定可能)が、Cloudflareの長所が活かせなくなります
    • Cloudflareを使う予定がある方は、トラブルが発生したときの原因の切り分けのために、DNSのプロキシをオフにすることをおすすめします。このページの下に、管理人の覚えている限りの設定を置いておきます

自動セットアップスクリプトが生成するもの・設定

項目
PostgreSQL ユーザー名 mastodon
PostgreSQL DB名 mastodon_production
PostgreSQL パスワード ohagi

また、以下のパスに設定ファイルをコピーします。

# aptのソース
/etc/apt/sources.list.d/nodesource.list
/etc/apt/sources.list.d/postgresql.list

# 新しく作成するユーザー
mastodon    <-- sudo su - mastodon でアクセスし、exitでrootに戻る

# Mastodonリポジトリ
/home/mastodon/live    <-- ユーザーmastodonで使う

# MastodonのNginx設定ファイル
/etc/nginx/sites-available/mastodon

# systemdサービス
mastodon-web.service
mastodon-streaming.service
[email protected]   <-- 普段は手打ちで使わないが、コピーの必要あり
mastodon-sidekiq.service

その他の設定ファイルは以下の場所に作成されます。ただしバージョンによってパスが変わる場合があります。

# PostgreSQL
/etc/postgresql/16/main

# Redis
/etc/redis/redis.conf

インストール手順

まず初期状態のUbuntu 24.04を立ち上げます。RAMは2GB以上にしましょう。

次に、以下のコマンドを入力します。curlはインストールされてると思いますが、されてなければ事前にsudo apt install curlで入れてください。
※ダウンロードするスクリプトのURLにバージョン番号が書かれていますが、これは実際にインストールされるkmyblueのバージョンをあらわすものではありません

Ubuntu 24.04の場合

sudo adduser --disabled-password mastodon
sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/kmycode/mastodon/kb_development/install/13.0/setup1.sh)"

Ubuntu 20.04、22.04の場合(※24.04より古いOSは非推奨)

sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/kmycode/mastodon/kb_development/install/13.0/setup1.sh)"

セットアップの最初で、インストールするkmyblueのバージョンを聞かれます。LTSを使いたい場合はlts、最新版はlatestを入力し、Enterを押します。そのあとはセットアップが進みます。

このシェルスクリプトの実行には時間がかかります。実行途中で何度かユーザーの確認を求める画面が出ることがありますが、基本的には全部何も入力・変更せずEnterで構いません。

そのあと、画面の指示に従って以下のコマンドを実行します。

sudo su - mastodon
./setup2.sh

Mastodonの初期セットアップ

Mastodonの初期セットアップは、下記コマンドより実行できます。途中で設定に失敗した場合は最初からやり直す必要が発生するので、自動インストールスクリプトに以下のコマンドは含めていません。
今回のセットアップで、Dockerは使用していません。

なお初期セットアップの時点で、アップロードされた画像を保存するためのs3オブジェクトストレージの設定を行うことができます。このページのした部分にも記述がございますので、ぜひご検討ください。

cd live
RAILS_ENV=production bundle exec rake mastodon:setup

メールの送信設定でテストメールが届かなかった(設定に失敗した)場合、設定やり直したほうがいいです。後から設定修正はできますが、テストメールを送るための代替手段はありません(bundle rails c使っていじる方法もありますがRubyの知識が必要なので省略)。

Mastodonの最新更新情報をチェックしますか?と聞かれますが、実際に確認する先はMastodon本家ではなくkmyblueフォーク専用のページに変更しています。kmyblueがアップデートしたら通知を受け取ることができますので、Yesにすることをお勧めします。(デフォルトではLTSのアップデートのみチェックします。設定で変更できます)

PostgreSQLやRedisの接続情報は、すでに画面内に表示されているはずです。各種設定項目を入力したあと、以下の3つの作業があります。3つとも「やりますか?」と聞かれますが、初回なので必ず行ってください。

  • データベースの初期化
    • 間違っていいえを選択した場合、RAILS_ENV=production bin/rails db:setupで行ってください
  • アセットのプリコンパイル
    • Webクライアント用のJavaScriptファイルをあらかじめ作る仕組みです
    • 間違っていいえを選択した場合、または失敗した場合、RAILS_ENV=production bin/rails assets:precompileで行ってください
  • 初期アカウントの作成
    • アカウント作成時にパスワードが表示されるので忘れずにメモ。パスワードなくした時に変更する手順はここから探してください
    • 間違っていいえを選択した場合、RAILS_ENV=production bin/tootctl accounts create alice --email [email protected] --role Owner --confirmedで行ってください。なおその場合、admininfoなど一部の予約されたIDは使用できません(逆に言うとadminでアカウント作りたければこの初期設定が唯一のチャンスです)

なおMastodon初期設定コマンド( mastodon:setup )は、初期セットアップが終わってサーバーが立ち上がったのを確認したら二度と使わないでください。サーバーにはそれぞれ固有の暗号化用キーというのがあるのですが、それがクリアされてしまいます。後からサーバーの設定を変更する場合は.env.production(環境変数)というファイルを編集してサーバーを再起動する感じになります。環境変数の一覧は、このページの下にリンクがあります。

SSL証明書の取得と設定

そのあとは必要に応じてcertbotの設定を行います。HTTPS接続できるようSSL証明書を作成する作業になります。すでにSSL証明書用意できてるよというつよつよの方はこの手順をスキップして、Nginxの設定をいい感じにして再起動、Mastoodnサーバーの起動までいってください。
下記のコマンドを実行する前に、あらかじめドメインのDNS設定を完了させてください。なお certbotによって取得したSSL証明書は、90日ごとに更新する必要があります

# 下記内のDOMAINを自分のドメインに置き換えて実行してください(大カッコは不要)

sudo cp /home/mastodon/live/dist/nginx-before-certbot.conf /etc/nginx/sites-available/mastodon
sudo sed -i s/example.com/[DOMAIN]/g /etc/nginx/sites-available/mastodon
sudo systemctl reload nginx
sudo certbot --nginx -d [DOMAIN]

sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
sudo sed -i s/example.com/[DOMAIN]/g /etc/nginx/sites-available/mastodon
sudo vi /etc/nginx/sites-available/mastodon

# viで、SSL証明書ファイル設定(2行)のコメントを外して保存

sudo systemctl reload nginx

Mastodonの起動

以上まで終わったら、Mastodonを起動します。これであなたのドメインからMastodonにアクセスできます。

sudo systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

基本設定はここまでです。お疲れさまでした。

以降、bin/railsbundleなどを実行する時は、sudo su - mastodonで実行ユーザーをmastodonにしたうえで、カレントディレクトリをliveに変更してください。

Web表示時のトラブル

真っ白な画面が表示される場合は、Nginxの設定などに失敗している可能性があります。

真っ黒な画面が表示されるだけの場合はアセットのプリコンパイルに失敗している可能性がありますので、以下コマンドをお試しください。

RAILS_ENV=production bin/rails assets:clobber
RAILS_ENV=production bin/rails assets:precompile

ページそのものが表示されない場合、サーバーのファイアウォール設定も原因の可能性がありますので確認してください。Amazon EC2など、ファイアウォールの設定がサーバーの外にあってデフォルトで80番・443番ポートを閉じているものもあります。

Cloudflare連携時のトラブル

まず、CloudflareのDNS設定でプロキシをオフにして正常に表示されるか確認してください。正常ならCloudflareの問題です。

管理者はCloudflareで何を設定したのかよく覚えてませんが、最低でも以下の設定はしたと思います。キャッシュの設定は変更しないと、アップデートの時に困ります。
これ以外にも必要な設定があるかもしれない/Cloudflareの仕様が変わってるかもしれないので、細かいところは申し訳ないですがご自身で調べてください。

  • 「SSL/TLS>概要」の「お客様の SSL/TLS 暗号化モード」 - フル(厳密)英語:「Full (struct)」
    • この設定を行うと、サーバー側にもSSL証明書が必要になります。上記のcertbot設定で大丈夫です
  • 「SSL/TLS>エッジ証明書」の「HTTPS の自動リライト」 - オフ
  • 「Speed>最適化」の「コンテンツの最適化」の「Auto Minify」 - JavaScript、CSS、HTML、全てオフ
  • 「Caching>Cache Rules」にルールを登録 - /api/で始まるすべての「URIパス」について、
    • キャッシュステータス:キャッシュをパイパスする
    • ブラウザTTL:オリジンをオーバーライドする 期限:「キャッシュなし」(この設定は不要かも)

設定変更後はキャッシュのパージをおすすめします。

新規登録を開放する

Mastodon 4.2.8(kmyblue 11.2 / 5.18-lts)から、新規にセットアップしたサーバーは新規登録をデフォルトで開放しない設定になっています。このため、誰でも新規登録できるようにするには手動で登録設定を変更する必要があります。

設定画面の「管理」→「サーバー設定」→「アカウント作成」のページより、新規登録の受付設定が可能です。

また、管理者やモデレーターが7日ほどログインしていない場合、新規登録を自動で承認制にする機能も存在します。その場合、通知メールは行くと思いますが、手動で設定し直す必要があります。

なおkmyblueでは独自に、一般ユーザーは招待を作成できないようにしています。この設定は「管理」→「ロール」→「デフォルトの権限」より変更することができます。

ElasticSearch(全文検索エンジン)のインストール(任意)

全文検索を行うには、ElasticSearchサーバーが必要です。ElasticSearch設定方法を参照してください。

環境変数をもっと細かく設定する、後から変える(任意)

https://docs.joinmastodon.org/admin/config/
kmyblue独自の環境変数

画像の置き場所をローカルではなくS3などのクラウドストレージにする(必須寄りの任意)

任意となっていますが、下記に当てはまる場合はMastodonサーバーを公開する前に最初から設定すべきです。後回しにすると死にます。

  • 将来的に人の多いサーバーにするつもりがある(SidekiqをWebとは別のサーバーに分離するかもしれない)
  • Webサーバーのストレージ容量に上限がある(例えば100GBは、1人でも大量のアカウントをリモートフォローする/連合リレーに参加することを考えると、少ない方です)

それ以外にも、サーバーを移転する場合などs3にしたほうが何かと便利な場合もあります。

設定手順はこちらを見てください。
https://docs.joinmastodon.org/admin/optional/object-storage/

こちらなどのサイトも参考になります。適宜Googleで検索を試してください。
https://hyper-text.org/archives/2017/04/mastodon-instance-with-amazon-s3.shtml

きちんと設定したつもりでも画像がアップロードできないトラブルが起きやすいので、Webサーバーを起動して一度アップロードを試してください。journalctl -r -u mastodon-webでエラー内容を確認してください。特に以下のストレージでは気をつけてください。その他のストレージにも注意点があるかもしれません。

  • AWS S3では、セキュリティ上の理由で非推奨な設定項目を変更する必要があります。料金の関係でCloudFrontとの連携の検討をお勧めします
  • Wasabiは設定が面倒です

サーバーの初期設定、Cronの設定を行う

前半部分はサーバー立ち上げた時に真っ先に管理画面開いていろいろ確認するタイプの人間ならもう設定済だと思いますが、後半のCronの設定は確認してください(忘れても大体大丈夫かと)

https://docs.joinmastodon.org/admin/setup/

サーバーのメンテナンス(tootctlコマンド)

https://docs.joinmastodon.org/admin/tootctl/

おはぎと話す(任意)

RAILS_ENV=production bin/tootctl ohagi good
RAILS_ENV=production bin/tootctl ohagi tsubuan

特に意味はありません。

サーバーの負荷を減らす(任意)

人が増えるとサーバーの負荷も上がります。人が増えても快適にサーバーを使えるようにするための設定例がここにあります。これに限らずMastodonの公式ドキュメントには有用な情報がたくさんあるので、読むことをお勧めします。
これらはMastodon公式ドキュメント通りにセットアップしたことを前提にしていますが、上記のセットアップ方法でも問題なく取り扱えます。

https://docs.joinmastodon.org/admin/scaling/

特にpgBouncerについては別途サーバー機器を用意する必要もないことから、小規模サーバーでも簡単に導入可能です。ぜひご検討ください。ただしpgBouncerを使う場合、.env.productionにはpgBouncer用のポート番号を設定すると思いますが、今後のkmyblueアップデートでDBのマイグレーションをする時、DB_PORTにPostgreSQLのポート番号を指定する必要があります。これは制限事項で、DBのマイグレーションはpgBouncerではなくPostgreSQLに対して直接かけなければいけません。

DB_PORT=5432 RAILS_ENV=production bin/rails db:migrate

また、pgTuneというサイトを使ってPostgreSQLの設定を最適化することも可能です。

サーバーのログを確認する(任意)

エラーが出るなどした場合は、以下よりログを確認できます。Web画面上でエラー画面が表示される/Web操作時に画面左下にエラーが表示される場合はmastodon-web、他サーバーへの投稿の配信がおかしい/他サーバーからの投稿が表示されない/検索できないなどの場合はmastodon-sidekiqを見ます。

journalctl -r -u mastodon-web
journalctl -r -u mastodon-sidekiq
journalctl -r -u mastodon-streaming

ユーザー設定画面でも「Sidekiq」という項目があり、そこからバックエンドタスクの状況を簡単に確認できます(上級者向け)。

kmyblueをアップデートする

アップデート手順を参照してください。

その他のチップ

サーバー管理のヒントを参照してください。