Web素人がMastodonを立ててみた
ゲームプログラム一筋で、オンライン対応でクライアント側のP2P対戦作ったり、サークルの開発サーバーをちょっとだけやってた程度の知識で立ててみた話。
SMTPサーバーも立ち上げて、外部のメールサービスを使わない形で立ち上げます。ドメインはお名前.comで適当に取って来て、適当に設定しています。
- サーバー
- CentOS6をCentOS7に入れ替える
- 基本的な設定をする
- 必要なものインストール
- ファイアーウォール設定
- Dockerの設定
- postfix
- nginx
- サービスを立ち上げる
- docker-composeを立ち上げる
- 参考
サーバー
さくらVPS 1Gプラン(石狩)
CentOS6をCentOS7に入れ替える
さくらVPSはデフォルトだとCentOS6ですので、CentOS7に入れ替えます。
CentOS7自体は標準対応なので、VPSの設定画面からボタン一発で再インストールされます。
石狩設置じゃないとCentOS7にできないらしいので、契約気をつけましょう。
CentOS7にしないといけないのは、CentOS6はDockerのサポートが切られてるからです。
必要なものインストール
マニュアル見ると他にもいるもの(DBとかRubyとか)が書いてあるんですが、Dockerが全部引っ張ってきてくれるので気にしなくて良いようです。自分はDockerがどういうものかを良く知らなかったのでチマチマ入れてたんですが、Twitterで教えてもらいました。
Mastodon
作業フォルダとなるので、tmpには置かない方が良いと思います。
自分は、SSHログイン用に作ったユーザーのhome内においてます。
git clone https://github.com/tootsuite/mastodon.git
nginx
Apacheの仲間のWebサーバーです。
yum インストールでも良いですが、この手は最新が良いと思うので、ngnix.repoをつくってからinstallしました
/etc/yum.repos.d/nginx.repo ファイルを作り以下の内容を書きます。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
その上で
yum -y --enablerepo=nginx install nginx
とします。
Docker/Docker-compose
仮想マシンを構築するパッケージらしいです。Dockerが本体で、Docker-composeは設定ファイルに基づいてDockerコンテンを作るサポートパッケージです。
Docker
最新を入れた方が良いかなと思いましたので、公式ドキュメントに従いdocker-ceを入れます。ceは無料版で、eeは企業向けの有料サポートあり版だそうです。
yum-utilsを入れます。
yum -y install yum-utils
dockerのリポジトリを登録してから、インストールします。
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
Docker-compose
docker-composeは、ビルド済みのをGitHubから引っ張ってきます。
curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
ファイアーウォール設定
http(80)、https(443)、smtp(25)、smtps(587)を開放します。
firewall-cmd --add-port=80/tcp --zone=public --permanent firewall-cmd --add-port=443/tcp --zone=public --permanent firewall-cmd --add-port=25/tcp --zone=public --permanent firewall-cmd --add-port=587/tcp --zone=public --permanent firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --add-service=smtp --permanent firewall-cmd --add-service=smtps --permanent firewall-cmd --reload
Dockerの設定
cloneしたMastodonのフォルダに移動して、環境設定ファイルをいじります。
環境設定ファイルは、.env.production.samle をコピーして書き換えます。
cp .env.production.sample .env.production
ドメイン
# Federation LOCAL_DOMAIN=ドメイン名 LOCAL_HTTPS=true
ドメインは自前で取っても、さくらVPSで割り当ててあるやつでもご自由に。
HTTPSを使うには証明書が必要になります。Let’s Encryptなどを使って取得して設定しておきます。nginx設定の時に軽く紹介します。
DB
データベースは、特に設定する必要はありません。
鍵
Application secrets 項に3つの鍵(PAPERCLIP_SECRET/SECRET_KEY_BASE/OTP_SECRET)を設定します。
Docker-composeが生成するらしいので、以下のコマンドを3回実行して、最後に出てくる文字列を順番にコピペします。
初回だけ実行に時間がかかりますが、それ以降はすぐ出てきます。
docker-compose run --rm web rake secret
docker-composeは、mastodonのソースがあるフォルダで実行します。
docker-composeを使うには、Dockerのサービスを立ち上げておく必要がありますので、先に立ち上げておきます。
systemctl start docker
メール
メールは、外部のsmtpサービスを使っても良いですが、ここではホスト側にpostfixサービスを立ち上げて、それを使います。
まずは、メールを送信用のユーザーを作ります。
useradd mstdn_mail passwd mstdn_mail
次にdocker0という名前のブリッジのIPアドレスを確認します。
ip a
docker0に設定されているIPアドレスが、Dockerの中からホストへ通信するためのIPとなります。
例えば、「172.16.0.1」と設定されていたとします。
.env.productionのメール設定を以下のようにします。
# E-mail configuration SMTP_SERVER=172.16.0.1 SMTP_PORT=587 SMTP_LOGIN=mstdn_mail SMTP_PASSWORD=設定したパスワード SMTP_FROM_ADDRESS=送信先として設定されるアドレス SMTP_AUTH_METHOD=plain SMTP_OPENSSL_VERIFY_MODE=none SMTP_ENABLE_STARTTLS_AUTO=true
ただし、オープンなmstdnを立ち上げようと思っているならば、外部のsmtpサービス(SparkPostとか)を使う方が良いと思います。
自前のドメインだと、迷惑メールにならないようにする対策とかOP25Bを解決するのがとても大変です。
DBを永続化する
デフォルトの設定ですとDockerを再起動する度にDBが初期化されてしまいますので、そうならないようにします。
mastodonフォルダにあるdocker-compose.yml を開いて、db,redis項目のvolumesの2行をアンコメントします。
db: restart: always image: postgres:alpine ### Uncomment to enable DB persistance volumes: - ./postgres:/var/lib/postgresql/data redis: restart: always image: redis:alpine ### Uncomment to enable REDIS persistance volumes: - ./redis:/data
postfix
/etc/postfix/main.cf を書き換えます。
基本
myhostname=メールサーバーの名前 mydomain=ドメイン名 home_mailbox=Maildir/
送信受付
ローカルとDockerからのみメール送信を受け付けるようにします。
docker0に設定されているIPを「172.16.0.1」とします。
inet_interfaces = localhost 172.16.0.1 mynetworks = 127.0.0.0/8 172.16.0.0/16 relaydomin=
認証
サブミッションポート(587)を有効にします。
smtpd_sasl_auth_enable=yes smtpd_recipient_restrictions = pemit_mynetworkd permit_sasl_authenticated reject_unauth_destination
nginx
Docker内で動いているmastodonをhttp/httpsにリダイレクトするのに使います。
設定ファイルは、mastodon公式で公開されているものをコピーして使います。
置き場は、/etc/nginx/conf.dフォルダ に例えばmstdn.confという名前で作ります。
example.comを自分のドメインに置き換えるだけで完了です。
サービスを立ち上げる
systemctl start postfix systemctl enable postfix systemctl start nginx systemctl enable nginx
docker-composeを立ち上げる
mastodonのフォルダに移動しておきます。
docker-compose pull
docker-compose build
docker-compose up -d
以上です。
立ち上がるのには、少し時間がかかるのでしばらく待ちます。