Mastodon(マストドン)とは、Twitterのような投稿ができる分散型ソーシャルネットワークを実現するオープンソースソフトウェアです。
Twitterなどネット上で名前だけは目にしたことがあったのですが、Mastodonを実際に触れることはありませんでした。
食わず嫌いはいかん!ということで実際にサーバを構築してみました。
ConoHaのVPSを使えば、テンプレートイメージが提供されているのでMastodonを簡単に構築することが出来ます。
Mastodonをインストールする
1.まずは、ConoHa VPSを開きましょう。
すでにアカウントをお持ちの方は、右上の『ログイン』をクリックしてログインしてください。
アカウントをお持ちで無い方は、「Conoha VPS」の『今すぐお申し込み』をクリックして登録してください。
2-A.【アカウントを既にお持ちの方】管理画面の「サーバー追加」ボタンをクリックします。
2-B.【アカウントをお持ちでない方】画面に従い必要事項を入力して、サービス選択画面まで進めてください。
3.サービス選択で “VPS” を選択します。今回はお試しなので512MB or 1GB で良いだろうと判断しました。
4.”イメージタイプ” -> “アプリケーション” を選択し、『Mastodon』を選択します。rootパスワードを設定するとVPSを作成することが出来ます。
オプションの選択もありますが、今回は特に追加していません。
初期設定を行う
ConoHaが提供するテンプレートイメージでは、Mastodonの動作に必要なソフトウェアが一通りインストールされているのと、DB(PostgreSQL)の設定を済ませた状態で提供されています。
ですが、Mastodonを実際に動かすには、初期設定が必要です。順番にやっていきましょう。
コンソールを開く
管理画面「サーバーリスト」からMastodonのネームタグをクリックします。
画面が切り替わると、下のボタンが表示されるので「コンソール」を選択します。
コンソール画面が表示されたら、ログインしましょう。
ログインユーザ | root |
パスワード | VPS作成時に設定したもの |
nginxの設定
以下の内容を /etc/nginx/sites-available/Mastodon.conf として保存してください。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name Mastodonで使うドメイン名;
root /home/mastodon/live/public;
# Useful for Let's Encrypt
location /.well-known/acme-challenge/ { allow all; }
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name Mastodonで使うドメイン名;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_certificate /etc/letsencrypt/live/Mastodonで使うドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/Mastodonで使うドメイン名/privkey.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 80m;
root /home/mastodon/live/public;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
add_header Strict-Transport-Security "max-age=31536000";
location / {
try_files $uri @proxy;
}
location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
add_header Cache-Control "public, max-age=31536000, immutable";
try_files $uri @proxy;
}
location /sw.js {
add_header Cache-Control "public, max-age=0";
try_files $uri @proxy;
}
location @proxy {
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 https;
proxy_set_header Proxy "";
proxy_pass_header Server;
proxy_pass http://127.0.0.1:3000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
location /api/v1/streaming {
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 https;
proxy_set_header Proxy "";
proxy_pass http://127.0.0.1:4000;lll
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
error_page 500 501 502 503 504 /500.html;
}
上記のファイルの作成が完了したら、シンボリックリンクを貼ってnginxがこの設定を使うように設定しておきます。
cd /etc/nginx/sites-enabled
ln -s ../sites-available/Mastodon.conf .
以上でnginxの初期設定は完了です。
Let’s Encryptの設定
続いて、Let’s EncryptでTLSの証明書を取得・設定します。
以下のコマンドを実行してください。
systemctl stop nginx
certbot certonly --standalone -d Mastodonで使うドメイン名
systemctl start nginx
certbot certonly --webroot -d Mastodonで使うドメイン名 -w /home/mastodon/live/public/
「証明書の期限切れ時や緊急時の連絡に使用されるメールアドレスの入力(必須)」
「利用許諾への同意(必須)」
「入力したメールアドレスの電子フロンティア財団への共有の可否(オプション)」
が聞かれますので適宜返答してください。
「Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):」
と聞かれた際は “2” を入力してください。
続いてTLS証明書の自動更新の設定をします。
/etc/cron.daily/letsencrypt-renew に以下を書き込んで保存してください。
#!/usr/bin/env bash
certbot renew
systemctl reload nginx
その後、cronによる定期実行を有効にするため、以下のコマンドを実行してください。
chmod +x /etc/cron.daily/letsencrypt-renew
systemctl restart cron
以上でLet’s Encryptの設定は完了です。
Mastodonの設定
いよいよ、Mastodonの設定を行います。
以下のコマンドを実行して、設定ウィザードを起動してください。
sudo su - mastodon
bash
cd ~/live
RAILS_ENV=production ~/.rbenv/versions/3.0.4/bin/bundle exec rake mastodon:setup
設定ウィザードではいくつかの入力が求められます。下記の表を参考に、あなたの環境に併せて入力してウィザードを進めてください。
以下に典型的な設定時の入力項目を説明します。
設定する値 | 説明 |
---|---|
Domain name: | Mastodonで使用するドメイン名 nginxの設定やlet’s encryptの設定で入力したドメインと同じものを入力してください。 |
Do you want to enable single user mode? (y/N) | シングルユーザモードとして設定を行うか? 何も入力せずエンターキーを押すとNとして進みます。 |
Are you using Docker to run Mastodon? (Y/n) | DockerのコンテナとしてMastodonを起動しているか? ConoHaのMastodonイメージではDockerは使用していないので『n』を入力します。 |
PostgreSQL host: (/var/run/postgresql) | PostgreSQLのデータベースサーバのホスト名 そのままエンターキーを押せばOKです。 |
PostgreSQL port: (5432) | PostgreSQLサーバへの接続に使用するポート番号 そのままエンターキーを押せばOKです。 |
Name of PostgreSQL database: (mastodon_production) | PostgreSQL内のMastodonのデータベース名 /etc/motdの「PostgreSQL mastodon db name」の項目の値を入力してください。 |
Name of PostgreSQL user: (mastodon) | PostgreSQLのMastodonデータベースに接続するユーザ名 /etc/motdの「PostgreSQL mastodon user name」の項目の値を入力してください。 |
Password of PostgreSQL user: | PostgreSQLのMastodonデータベースに接続する際のパスワード /etc/motdの「PostgreSQL mastodon user password」の項目の値を入力してください。 |
Redis host: (localhost) | Redisサーバのホスト名 そのままエンターキーを押せばOKです。 |
Redis port: (6379) | Redisサーバのポート番号 そのままエンターキーを押せばOKです。 |
Redis password: | Redisサーバに接続する際のパスワード そのままエンターキーを押せばOKです。 |
Do you want to store uploaded files on the cloud? (y/N) | Mastodonに投稿された画像や動画等のファイルをクラウドサービスのオブジェクトストレージにアップロードするか? 必要に応じて選択してください。Yを選ぶとオブジェクトストレージへアップロードする際に必要な認証情報等が追加で求められます。 |
Do you want to send e-mails from localhost? (y/N) | Mastodonのアカウント作成や各種通知を送るメールをlocalhostから送信するか? 適切なメールサーバから送信することが望ましいため、そのままエンターキーを押せばOKです。 |
SMTP server: (smtp.mailgun.org) | SMTPサーバー名 ご利用になるSMTPサーバにあわせて入力してください。 |
SMTP port: (587) | SMTPサーバに接続する際のポート番号 ご利用になるSMTPサーバあわせて入力してください。 |
SMTP username: | SMTPサーバへの接続に使用するユーザ名 ご利用になるSMTPサーバあわせて入力してください。 |
SMTP password: | SMTPサーバへの接続に使用するパスワード ご利用になるSMTPサーバあわせて入力してください。 |
SMTP authentication: (plain) | SMTPの認証方法 ご利用になるSMTPサーバあわせて入力してください。 |
SMTP OpenSSL verify mode: (Use arrow keys, press Enter to select) | SMTPサーバのSSL/TLS証明書の検証設定 ご利用になるSMTPサーバあわせて入力してください。 |
E-mail address to send e-mails “from”: (Mastodon ) | Mastodonからメールが送信される際のFROMに表示されるメールアドレス 適宜入力してください。 |
Send a test e-mail with this configuration right now? (Y/n) | 入力したメールの設定でテストメールを送信するか? メールの設定に失敗しているとMastodonのアカウントが作成できなくなりますので、『Y』を選んで確認することをお勧めします。 |
Send test e-mail to: | テストメールを送信する宛先アドレス 適宜入力してください。 |
Save configuration? (Y/n) | 入力してきた値をファイルに保存するか? テストメールの配信状況等に問題が無ければ、Yを選んで保存してください。 |
Prepare the database now? (Y/n) | Mastodon用のデータベースを構築するか? Mastodonイメージではデータベースは空の状態ですので、Yを押してデータベースの構築を行ってください。少々時間がかかる場合があります。 |
Compile the assets now? (Y/n) | Mastodonのウェブ表示で使用するアセットのコンパイルを行うか? 実稼動時の負荷等に影響しますので、Yを押してコンパイルを行います。VPSのスペックにもよりますが、数分程度時間がかかります。 |
Do you want to create an admin user straight away? (Y/n) | Mastodonの管理者アカウントを作成するか? 管理者アカウントが無くても正常に動かすことができますので、必要に応じて選んでください。 |
Mastodonのデーモン化
最後に、Mastodonをデーモンとして使用するための設定を行います。
rootのシェルに戻って以下の3つのファイルをそれぞれ作成してください。
/etc/systemd/system/mastodon-web.service
[Unit]
Description=mastodon-web
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="PORT=3000"
ExecStart=/home/mastodon/.rbenv/versions/3.0.4/bin/bundle exec puma -C config/puma.rb
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/mastodon-sidekiq.service
[Unit]
Description=mastodon-sidekiq
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=/home/mastodon/.rbenv/versions/3.0.4/bin/bundle exec sidekiq -c 5 -q default -q push -q mailers -q pull
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/mastodon-streaming.service
[Unit]
Description=mastodon-streaming
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/usr/bin/npm run start
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
最後に以下のコマンドで、Mastodonデーモンを有効化・起動します。
systemctl enable --now /etc/systemd/system/mastodon-*.service
systemctl enable --now nginx
以上で設定完了です。
Mastodonはすでに起動していますので、Webブラウザで設定したドメインに接続してみましょう。
コメント