なーのブログ

nan1sa の個人ブログ

Mastodon 導入メモ

2023-02-11 備忘録

前回の記事の続きです。今回は、Mastodon の公式ドキュメントをベースに導入した上で個人的に気になった部分を加筆した導入メモのまとめです。

余談ですが、最近までこういう記事を見かけても「公式ドキュメント見ろ」で終わると思っていました。ですが、最近は「素人なりに気になった部分を参考にすることができる」「今の手順書とは違うが当時はそういう手順が必要だったという資料的価値がある」という理由で積極的に書こうと思いました。

逆に言うと、そういう記事では必ず投稿日を目立つ場所に書くべきだと思います。あと、別に素人の感想なんていらないよーって人は普通に公式ドキュメントを読むべきだと思います。以下の文章はそういう気持ちで読んでください。

ちなみにこの文章は Ubuntu 22.04 を前提に書いています。いきなり Arch Linux に導入を試みて失敗しても普通に愚かなので。Mastodon のバージョンは v4.0.2 です。

公式ドキュメントとの主な相違点

  • nginx.conf の設定と /var/lib/nginx/ の所有者変更の追加
  • SSL 証明書の発行方法を変更

(前段階)VPS 立ち上げて最初にすること

何げに、はじめて VPS を使って「最低限どういうことしておくべきなんだろ」ってなったので軽くまとめておきます。これは Mastodon 関係ないです。

個人的にはさくらインターネットさんが公開しているマニュアルが参考になると思うので紹介だけしておきます。

一般ユーザーを作成する

adduser っていうコマンドを使うと対話式でユーザーを作れるそうです。便利ですね。Debian 系に入っています。ついでに sudo も使えるようにしておきます。

# adduser <username>
# gpasswd -a <username> sudo

公開鍵認証に対応する

せっかく便利なツールがあるので活用します。念のために言っておくと、これは SSH 先ではなく作業しているマシンのコンソールで実行します。

$ ssh-keygen -t ed25519
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub <username>@<IPアドレス>

パスワード認証 / root ログインを禁止する

/etc/ssh/sshd_config を以下のように設定します。

PermitRootLogin no
PasswordAuthentication no

ファイヤーウォール

Ubuntu なら初期設定で ufw が動いています。それ以外のディストリビューションは確認したほうがいいと思います。

ただ、443 ポートと 80 ポートは使うので予め開放しておきます。

# ufw allow 80,443

導入までの準備

明記しない限り、ここからは全て root で作業します。

パッケージをインストールする

コマンド見れば何を入れているのかわかると思うので解説は省略したのですが、普通に読みずらいので改行だけは適当に入れました。作業は普通にしてください。

# apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates

# curl -sL https://deb.nodesource.com/setup_16.x | bash -
# wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc

# echo "deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.list

# apt update
# apt install -y \
  imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \
  g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \
  bison build-essential libssl-dev libyaml-dev libreadline6-dev \
  zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
  nginx redis-server redis-tools postgresql postgresql-contrib \
  certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev
  
# corepack enable
# yarn set version classic

Ruby をインストールする

# adduser --disabled-login mastodon

# su - mastodon

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ cd ~/.rbenv && src/configure && make -C src
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ exec bash
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

$ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.4
$ rbenv global 3.0.4

$ gem install bundler --no-document

$ exit

セットアップ

PostgreSQL の設定

公式ドキュメント曰く、今回は Ident 認証と呼ばれる『シンプルな』認証方法を使います。要は、PostgreSQL 自身で認証をせず Linux 自体のユーザー情報を使うよ、ってやつだと思います。たぶん。

まずはプロトコルを開きます。

# sudo -u postgres psql

次に、Ruby のインストールで作ったユーザーと同一のユーザーを作成します。

CREATE USER mastodon CREATEDB;
\q

おしまい。

Mastodon の設定

途中で表示される対話式の初期設定はこのページを見ればなんとかなりますが、PostgreSQL 周りは初期値で基本的に問題ないです。

# su - mastodon

$ git clone https://github.com/mastodon/mastodon.git live && cd live
$ git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

$ bundle config deployment 'true'
$ bundle config without 'development test'
$ bundle install -j$(getconf _NPROCESSORS_ONLN)
$ yarn install --pure-lockfile

$ RAILS_ENV=production bundle exec rake mastodon:setup

$ exit

nginx の設定

# cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
# ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

# nano /etc/nginx/sites-available/mastodon # example を **全て** 実際に使うドメインに置き換える / Uncomment these 〜 以下の2行をアンコメント
# nano /etc/nginx/nginx.conf # user www-data を user mastodon に書き換える

# chown -R mastodon:mastodon /var/lib/nginx

# systemctl reload nginx

SSL 証明書の設定

ここは公式と違うので Issue を参照しました。

# systemctl stop nginx
# certbot certonly --standalone -d your_domain_name
# systemctl start nginx

systemd の設定

Mastodon を systemd で管理できるようにします。ついでに起動までします。

# cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

# systemctl daemon-reload
# systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

動作確認

ここまで実行すればブラウザからアクセスできるはずなので、実際にアクセスして動作確認をします。正しくアクセスできなかったら多分どこかが間違っているので修正します。

まとめ

ここまでうろ覚えで書いたので間違ってたら教えてください。

参考にしたサイト