🗂

マストドンの自鯖を立てた

に公開

今まで使ってたマストドンが画像を一切表示してくれなくなりました。
そもそも知り合いとの相当ローカルな交換日記みたいな使い方しかしてなかったので、他のサーバー探してそっちに移行するくらいなら、自分でサーバー立てられないかな?と思ったのが発端です。

サーバー設定

必要なもの

  • VPSサーバー
  • ドメイン

ConohaVPSで元々マイクラを遊んでいたので、それを使うことにしました。
また、ワードプレス用に使ってたドメインがあったので、それにサブドメインを設定して使うことにしました。(以降は、例としてexample.comと表記します)

ムームードメインの場合は、コントロールパネルからDNSの設定を変えられます。
ドメイン操作>ネームサーバ設定変更
ムームードメインのネームサーバ(ムームーDNS)を使用する
にチェックを入れる

ドメイン操作>ムームーDNS
ドメインの「変更」>「設定2」
サブドメインにmastodon、種別「A」、内容にVPSのアドレスxxx.xxx.xxx.xxx

マストドンのインストール

VPSのOSはCentOSです。
/opt/の下に/mastodonをクローンします。

gitのインストール

sudo yum install -y git

dockerまわりのインストール

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

Docker compose用のインストール

mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose

マストドンのcloneとstableバージョンのチェックアウト

git clone https://github.com/mastodon/mastodon.git
cd mastodon
git checkout v4.2.7

環境ファイルの編集

cp .env.production.sample .env.production

.env.productionをvim等で開いて

LOCAL_DOMAIN=mastodon.example.com

秘密鍵の生成

sudo docker compose run --rm web bundle exec rake secret

.env.productionをvim等で開いて
SECRET_KEY_BASE=上で生成したキーをここに貼る

sudo docker compose run --rm web bundle exec rake secret

OTP_SECRET=(同じく生成して貼る)

S3_ENABLED=false
にする

ビルド

sudo docker compose build --no-cache
sudo docker compose run --rm web rake db:setup
sudo docker compose run --rm web rake assets:precompile

起動

sudo docker compose up -d

nginx + SSL構成の追加

パッケージインストール

sudo yum install -y epel-release
sudo yum install -y nginx
sudo yum install -y certbot python3-certbot-nginx

nginx 設定ファイルの作成

sudo nano /etc/nginx/conf.d/mastodon.conf

ファイルに以下のコードを貼り付け

server {
    listen 80;
    server_name mastodon.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

※このままだと画像アップロードの制限がデフォルトの数値になってしまうので、大きめの写真とかをアップしたい場合は、server_nameの下に

client_max_body_size 32M;

を追記しましょう

再起動

sudo systemctl enable nginx
sudo systemctl start nginx

Let's Encrypt(SSL)証明書を取得

sudo certbot --nginx -d mastodon.example.com

メールアドレスの入力を求められるので、入力する

sudo systemctl reload nginx

ポート 80 / 443 を開放する

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

以下のコマンドで確認する

sudo firewall-cmd --zone=public --list-all

http httpsが表示されてればOK

動作確認してみる

curl -I https://mastodon.example.com

HTTP/1.1 200 OK
ならOK

ダメな場合…
dockerの状態を確認

sudo docker ps

upになってなかったら

sudo docker logs mastodon-web-1

などでログ確認

コンテナの再起動

sudo docker compose down
sudo docker compose up -d

ユーザー登録

管理者権限のユーザー作成

sudo docker compose run --rm web tootctl accounts create <ユーザー名> --email <メールアドレス> --confirmed --role Admin

うまくいくと、初期パスワードが発行されるので、それを使ってログインできるようになります。

管理画面は
mastodon.example.com/admin

サーバーを承認制にするなどの設定はここからします。

一般ユーザーの登録

sudo docker compose run --rm web tootctl accounts create <ユーザー名> --email <メールアドレス> --confirmed

SMTP設定

メール登録のためにほんとは設定しないといけないんですけど、知り合いしか登録しないので今のところWIP

さいごに

これで一旦形にはなりました。

Discussion