MastodonをDockerで構築(S3連携)

はじめに

マストドンの構築手順です。
2017年4月にマストドンがブームになり、さくらVPSでminioと連携で構築しましたが、
新ドメイン取得をきっかけに新たにAWSとS3で作り直したのでその時の手順を公開します。
バージョンが上がっていますので、公式のマニュアルを参考に作成しています。

Dockerをインストール

公式マニュアル:https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#install-docker-ce

コマンンド解説
aptパッケージインデックスを更新します。
aptHTTPS経由でリポジトリを使用できるようにパッケージをインストールします。
ドッカーの公式GPGキーを追加します。

フィンガープリントを確認します。

公式レポジトリを追加します。
アーキテクチャの確認

バージョンを指定しない場合は最新版がインストールされます。
バージョンを指定する場合は以下のようにしてバージョンを指定します。

dockerコマンドでテストします。
このコマンドはテストイメージをダウンロードし、コンテナ内で実行します。コンテナが実行されると情報メッセージが出力され、終了します。

インストールしたバージョンを確認します。

DockerComposeのインストール

公式マニュアル:https://docs.docker.com/compose/install/#prerequisites

Mastodonのインストール

公式マニュアル:https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Docker-Guide.md

Mastodon一式をgitコマンドで取得

/opt ディレクトリにインストールします。
/opt はアプリケーションをインストールするときに使うディレクトリです。
インストールするバージョンはv2.0.0rc4です。

docker-composeでbuild

ymlファイルを編集します。

このままではDocker上でしたデータが保存されません。
なのでデータの永続化設定をするため、以下の場所のコメントアウトを外します。

設定全体は以下のようになります。

ここまで設定が完了したらbuildします。少し時間がかかります。

Mastdonのセットアップ

以下のコマンドでsecretを3回出力します。コンフィグファイルに記載するのでメモしておきます。

vapid_keyも同様に出力して、結果をメモします。

S3のバケット名に注意
バケット名は[.]ドットを含まない名前にしてください。例えばhoge.hogeとした場合、画像ファイルパスが
「hoge.hoge.s3-ap-northeast-1.amazonaws.com」となります。
S3のワイルドカード証明書は一つ上のサブドメインまでしか機能しないので、HTTPS接続ができなくなります。
サイト全体がHTTPSにならないので、ブラウザ上で警告が表示されます。
S3のリージョン確認
上記はリージョンが東京の場合です。リージョンの確認は次のURLから確認できます。
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

コンフィグの設定が完了しましたら、Mastodonをセットアップします。

メモリ不足
syslogに以下のエラーが出力がある場合、メモリ不足でプリコンパイルに失敗しています。
t2.microのメモリ1GBではダメだったので、t2.smallのメモリ2GBに変更しました。
tail -f /var/log/syslog
level=error msg=”libcontainerd: error restarting containerd: fork/exec /usr/bin/docker-containerd: cannot allocate memory”

Nginxでリバースプロキシのインストール

ここまででMastdonは起動しましたが、ブラウザからだとport3000を指定しないとアクセスできません。
また証明書を導入していないので、HTTPSのアクセスもできません。
なのでNginxでリバースプロキシとして導入します。

公式レポジトリからNginxをインストール

レポジトリを指定するファイルを作成します。

viするのが面倒な方は以下のコマンドでどうぞ

アップデートしてインストールします。

下記のエラーが出た場合
「The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY $key」
以下のコマンドで実行してください。
apt-key adv –keyserver keyserver.ubuntu.com –recv-keys $key
apt-get update
apt-get -y install nginx

サービスの起動と自動起動設定をします。

証明書の導入 Let’s Encrypt

前回はCentOSで導入しましたが今回はUbuntuなので手順が異なります。
またMastdonなので通常のWebサイトとは異なる手順を踏みます。

Let'sEncryptでWordPressのHTTPS対応

2017.11.11

Let’s Encryptをインストールします。

はじめにLetsEncrypt自身のWebサーバを使ってドメイン認証と証明書の取得をする必要があるため、Nginxを停止します。

ドメイン認証と証明書を取得します。

Nginxの設定

Nginxに使用するDH鍵交換パラメータを事前に作成します。

Nginxのコンフィグ設定をします。
Mastodonにてサンプル設定が公開されていますが、暗号化のssl_ciphersやHSTSの設定を変更しています。
また、ドキュメントルートはこのブログでは/opt/mastodon/publicになります。

2017年4月ごろとの違い
ドキュメントルートが変更になっています。当時はmastdon/live/publicだったのですが、
liveがなくなっているようです。

設定が完了したらNginxを起動します。

再度Let’sEncryptで証明書を再取得します。今度はドキュメントルートを指定して実行します。

証明書を更新したので、Nginxを再起動して再度読み込みます。

Mastodonへアクセス

https://【MastodonのFQDN】へアクセスしMastodonに接続します。

自分の管理者アカウントを作成します。Mastodonは管理者アカウントを直接作成するのではなく、一般アカウントを管理者権限に昇格させる手順になります。
作成したアカウントを管理者権限へ昇格する時は以下のコマンドを実行します。

Mastodonの運用

以下のコマンドをcronに設定します。3ヶ月で証明書が切れてしまうので、月に1回程度実行すればいいと思います。

cronについて
一度cronが正常に実行されるか必ずテストしましょう。直前になって実行されないという状況は避けたいので。

設定変更などを反映させる時

一度Dockerイメージを削除して作り直す時。(DBは永続化しているためそのまま)

ユーザに管理者権限を付与するコマンド

Mastodonバージョンアップ

コマンド

git stashができない場合gitのセッティングができていないためです。

以下のコマンドを実行します。

Mastodonを構築(2回目)してみての感想

個人的な見解ですが、お一人様などインスタンスなど小規模であればDockerを使うことをオススメします。
私が初めて構築した時はDockerを使わずminioと連携してVPS上に構築しましたが、バージョンアップやデータのバックアップが大変でした。
今はDockerで運用していますがバージョンアップなどDockerなしと比べて運用が楽になりました。

WordPressよりは敷居が上がりますが、MastodonはDockerやWebアプリケーションを学ぶいい学習素材だなぁと感じています。
周りの開発者を見るとどんどんカスタマイズしてるので、私もまだまだ勉強したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です