9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mastodonの鯖を建てたので、その覚書(主に公式ドキュメントに対する)

Last updated at Posted at 2022-06-15

作成日:2022年6月15日
更新:2022年7月3日

いくつかハマる所があったので、Mastodonのサーバーを建てた時の備忘録です。

環境

  • 自宅のproxmox内のUbuntu 21.04のLXC内に立てました。
  • 諸々のソフトウェアのバージョンは以下です
    • Mastodon 3.5.3
    • Ruby 3.0.3
    • PostgresSQL 13.5
    • Redis 6.0.11
    • node v16.15.1
    • nginx 1.18.0(Ubuntu)

手順

基本的には公式のドキュメントに従いますが、一部ハマる場所があります(Let's encryptでの認証周りとか)。

step1. Preparing your machine

Preparing your machineに従って設定をしていきます。
fail2banの設定はドキュメント通りで問題ありませんでした(SSHポートを変更している場合は変更が必要です)。

続くiptabelsはnftablesへの移行が進んでおり、Ubuntu21.04でもiptableは内部的にはnftablesを使用しています。このページ最後のiptables-restoreもそのままでは動きませんでした。
iptablesをnstablesに変換するツールもあるようですが、今回はufwでsshとhttpのみが通るようにして一旦回避しました。

追記:
ufwでやってたのですが、WANからアクセスすると正常に動くのにLANからアクセスすると画像が表示されなかったり読み込めなかったりするという事象が起きています。
ひとまずの動作確認にはufwで十分ですが、ちゃんと運用するにはnftablesでやるのが良い気がします(ちゃんとできたらまた記事にでもします)。
追記終わり

また、後ほどpostgresSQLをインストールしますが、この時にencodingがUTF-8になっていないと、デフォルトのデータベースの文字エンコードがSQL_ASCIIになってしまい後々二度手間になるので、

locale-gen "en_US.UTF-8"
dpkg-reconfigure locales

でUTF-8に変えておいた方が良いです。

step2. Installing from source

ここではドキュメントの各章ごとに覚書を書いていこうと思います。

Pre-requisites

  • Ubuntu20.04かDebian11のマシンを用意と書いてありますが、Ubuntu21.04でも動いてます。
  • SMTP serverはgmailも使えるようですが、いまいち認証がうまくいってない気がします。でもサーバーは立ちました。

System repositories

書かれている通りのものをインストールします。

Node.js

nodeはこの記事の手順で入れました。なお、この記事の後ろの方に書きましたがnodeのpathが想定されているものから変わるとうまく行かない時があります。その時はシンボリックリンクを張ると動きます(詳細は後述)。

追記(2022-11-07)
現在Nodeの最新は18系ですが、後述のwebpackのビルドで、これに対応していないものがあるらしく、16系にダウングレードする必要がありました。
追記終わり

PostgresSQL

postgreSQLはaptでインストールしても特に問題ありませんでした。
インストール後はpostgresSQLをactivateさせておきます。

systemctl start postgresql.service

System packages

コピペでOKでした。

Yarn

ここもコピペでOKでした。恐らく(あまり覚えてない)。

Installing Ruby

ドキュメントではmastodonというアカウントを--disabled-loginオプションを付けて作成していますが、自分はわかりにくいのでパスワード付きで作成しました。特に問題はなかったです。
他はコピペでOKでした。

step3. Setup

Setting up PostgreSQL

Performance configurationはoptionalなのでやってません。

postgresqlはインストール時にubuntu内にpostgresというユーザを自動で作成するので、そのアカウントでログインし、mastodonというユーザを作るということのようです。
ただし、この時mastodonというデータベースも一緒に作成されていないと、後からcreate database出来ないので、\lでデータベース一覧を表示し、作成されてなければ以下で作成しておくと良いと思います。

create database mastodon;

Setting up Mastodon ~ Installing the last dependancies

ここもコピペで行けます。

Generating a configuration

ここが個人的に曲者な気がします。
ここでは

  • postgresSQL
  • redis
  • smtp

の設定をします。
どのような質問が出てくるのかの全文はこちらの記事に載っています。予習しておくと良いです。

ドキュメントのコマンドを打つ前に以下の準備をします。

1. postgresSQLのデータベースの作成

先に作成しておかないとデータベースがないぞと言われます。
Ubuntuのmastodonユーザでpsqlと打ってsqlの対話型インターフェースを開き、create database mastodon_production;と打ってデータベースを作ります。mastodon_productionはmastodonのデフォルトのデータベース名です。

2. redisをインストールする

そもそも入ってるのかもしれませんが、自分はインストールしました。

apt install redis-server

また、インストール後は/etc/redis/redis.conf内のsupervised nosupervised systemd に変更し、こちらも起動させておきます。

systemctl restart redis.service
3. gmail側の設定

ただ、メールに関しては認証がうまくいかなくてもSend a test e-mail with this configuration right now?でnoを選べばそれで終わりました。まだ自分はうまくいってない気がします。

これが終わればsuでrootに戻ります。

Setting up nginx

ここはコピペで大丈夫ですが、次の項目(Acquiring a SSL certificate)に気を付けなればいけません。/etc/nginx/sites-available/mastodon内のexample.comを自分のドメインに変更するのを忘れずに。

Acquiring a SSL certificate

ここはドキュメントに誤りがあり、2021年1月にはissueが立てられおり解決策も示されていますが今現在反映されていません。

よってドキュメントのコマンドではなく、以下のように一度Nginxを止め、--standaloneを付けて認証する必要があります。

sudo service nginx stop
certbot certonly --standalone -d your_domain_name

その後、/etc/nginx/sites-available/mastodonの次の2行をアンコメントします。鍵が正しい位置に入っているかはcertbotの出力結果を見ればわかるかと思います。

 # Uncomment these lines once you acquire a certificate:
 # ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
 # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Setting up systemd services

ここはコピペでOKでした(自分の場合は特に何も変更するものはなかった)
ドキュメントではここで終わっていますが、自分の環境ではこの段階ではまだブラウザからアクセスできませんでした。

自分の場合さらに追加でしなければいけなかったこと

1. webpackのビルド

この状態でブラウザを開いても何も表示されなかったので /var/log/syslogを見ていると、

ActionView::Template::Error (Webpacker can't find media ~
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.

というエラーが出ていました。
(自分の場合は一度webpackを消して入れなおしてコンパイルしたのですが多分そんな必要はなく)、mastodonユーザでliveディレクトリに移動し、

RAILS_ENV=production bundle exec rake webpacker:compile

とすればコンパイル出来ると思います。

2. nginxを実行しているユーザをmastodonのユーザグループに追加する。

mastodonのドキュメントではmastodon本体は'/home/mastodon/live/public'の中に置かれますが、UbuntuでデフォルトのNginxのユーザはwww-dataなのでこのディレクトリにアクセスすることができません。
なので、以下でwww-dataをmastodonのグループに追加します。

gpasswd -a www-data mastodon
3. アクセスするホスト名を追加する

:warning:ここは間違えている可能性が高いです。そのまま真似しないでください:warning:

アクセスするホスト名を設定していないと、ActionDispatch::HostAuthorization middlewarによってアクセスがブロックされます。
/home/mastodon/live/config/environments/production.rbに以下のように追記しました。

config.hosts << "追加したいホスト名 or ブロックされてるホスト名"

ブロックされてるホスト名は起動後に/var/log/syslog/var/log/nginx/error_logで見れます。

4. nodeが無いというエラーが出る

nodeをインストールしpathは通っているにも関わらずmastodon側が/usr/bin/nodeを見ているためにエラーが出ていました。
なのでsudo ln -s "$(which node)" /usr/bin/nodeとしてシンボリックリンクを貼りました。

終わり

多分これでmastodonの自鯖にアクセスできるようになったと思います。

お世話になった記事

この記事にかなり助けられました。RAILS_ENV=production bundle exec rake mastodon:setupの対話型インターフェース時の入力内容や、詰まった時に何を見るべきかが書かれており、初学者には非常にありがたい記事でした。詰まった時にこそ、じっくり読むべき記事です。

なんかよくわからんことになった!の節には非常に良いことが書いてあります。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?