Mastodonとは
Mastodon(マストドン)はTwitterライクなSNSです。誰でも独自のMastodonインスタンスを作ることができて、すでに多数のインスタンスが立ち上がっています。登録されたインスタンスは、Mastodon instancesで参照することができます。
好きなインスタンスに参加するもよし、自分ひとり用のインスタンスを立ち上げるもよしです!本日はMastodonをIDCFクラウド上で構築する手順を紹介します。
- Mastodonとは
- 利用環境
- 作業ディレクトリ作成
- dockerインストール
- Mastodonのインストール
- Nginxのインストール
- Certbotを利用してSSL証明書を発行する
- Nginx設定ファイルを準備する
- Nginxを起動する
- Mastodonへアクセスする
- ユーザ認証をコマンドラインで実行する
- 最後に
利用環境
- IDCFクラウド light.S2 (1 CPU, 2GB メモリ)
- Let’s EncryptでSSL証明書を発行
- CentOS 7.3 64-bit テンプレート
仮想マシンの作成に関してはめちゃ楽ガイドを参照してください。
SSH用のポートにポートフォワードとファイアウォールの設定をしてSSHで接続します。
作業ディレクトリ作成
今回の作業用ディレクトリとして、/home/mastodonを作成します。
# mkdir -p /home/mastodon
dockerインストール
Mastodonはdockerコンテナを利用して構成されているため、dockerをインストール・設定していきます。
# yum -y install docker
docker保存先を変更
CentOS 7のテンプレートを利用する場合、ルートディスクが15GBで構成されます。ルートディスクのサイズは変更できないため、ボリュームを追加・アタッチし、dockerの保存先を変更しておきます。(mastodonのDBが肥大化する恐れもありますので)
仮想マシンへのデータボリュームの追加・パーティション作成・マウントについては、IDCFクラウドFAQを参照するかティアラちゃんに質問してみてください。
ディスクの追加完了後、下記ファイルを編集し保存先を変更します。 今回は/data/dockerというディレクトリを作成し、そちらを保存先にしました。
# vi /etc/sysconfig/docker
下記行がありますので、
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
末尾に下記を追記します。
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -g /data/docker'
docker-composer準備
MastodonはPostgreSQLやRedisも利用しますので、docker-compose.xmlファイルを利用してコマンド一発で起動できるように準備します。
# 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
インストールが正常にされたかを確認します。
# docker-compose --version docker-compose version 1.12.0, build b31ff33
バージョンが表示されればOKです。
dockerの起動
dockerを起動します。
# systemctl start docker
Mastodonのインストール
GitHubからcloneする
MastodonをGitHubからcloneします。
# git clone https://github.com/tootsuite/mastodon
データの永続化設定
標準状態のままですと、データの永続化設定となっていないためコンテナを停止してしまうとデータが削除されます。 ユーザの登録情報等を永続的に維持するためにdocker-compose.xmlファイルを編集します。
# cd /home/mastodon/ # vi docker-compose.yml
下記のコメントアウトされているコンフィグを有効化します。(冒頭の#を外す)
# volumes: # - ./postgres:/var/lib/postgresql/data # volumes: # - ./redis:/data
環境ファイルをコピーし設定する
# cp .env.production.sample .env.production
シークレットキーの発行
下記コマンドを実行してシークレットキーを発行します。(少し時間がかかります。)
# docker-compose build # docker-compose run --rm web rake secret
キーは3つ必要なため、上記の'docker-compose run –rm web rake secret'コマンドを合計3回実行する必要があります。最後に表示された長い文字列をコピーして次のステップで貼り付けます。
環境ファイルを編集してシークレットキー・ドメイン名・HTTPSを有効化するかの設定をします。example.comとあるところはご自身のMastodonで利用するFQDNを設定してください。
# vi .env.production PAPERCLIP_SECRET=(発行されたキー①を貼り付け) SECRET_KEY_BASE=(発行されたキー②を貼り付け) OTP_SECRET=(発行されたキー③を貼り付け) LOCAL_DOMAIN=example.com LOCAL_HTTPS=true
データベースのマイグレーションとフロントエンドコンパイル
下記コマンドを実行します。
# docker-compose run --rm web rails db:migrate # docker-compose run --rm web rails assets:precompile
Mastodonコンテナを起動
# docker-compose up -d
docker psコマンドを実行すると起動しているコンテナ一覧を表示することができます。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ae2dc853c315 gargron/mastodon "bundle exec sidekiq " 4 seconds ago Up 3 seconds 3000/tcp, 4000/tcp mastodon_sidekiq_1 922437f3ff8b gargron/mastodon "bundle exec rails s " 4 seconds ago Up 3 seconds 0.0.0.0:3000->3000/tcp, 4000/tcp mastodon_web_1 f72ac86fa74e gargron/mastodon "npm run start" 4 seconds ago Up 3 seconds 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1 147bec4a1086 redis:alpine "docker-entrypoint.sh" 5 minutes ago Up 5 minutes 6379/tcp mastodon_redis_1 75e3c4008fb8 postgres:alpine "docker-entrypoint.sh" 5 minutes ago Up 5 minutes 5432/tcp mastodon_db_1
Nginxのインストール
epelリポジトリを追加して、NginxとCertbotをインストールします。
# yum -y install epel-release # yum -y install nginx certbot python-certbot-apache
Certbotを利用してSSL証明書を発行する
Certbotを利用し、Let’s Encryptから証明書を発行してもらうためには、443番ポートへのアクセスが許可されている必要があるので、管理コンソールからファイアウォールとポートフォワードの設定を追加します。443番のファイアウォールは、ソースIPをANYで開けてください。 具体的な設定方法については、めちゃ楽ガイドを参照してください。
下記コマンドを実行して証明書を取得します。
# certbot certonly --standalone -d <mastodonで利用するFQDN>
Nginx設定ファイルを準備する
MastodonのGitHubページ内にあるconfファイルの内容をコピーします。 下記ディレクトリに、mstdn.confとして保存します。
# cd /etc/nginx/conf.d # vi mstdn.conf コピーした内容を貼り付け
server_name、SSL証明書へのフルパスとrootを変更します。 また、今回はRSA鍵を使用するため、ssl_dhparamの行はコメントアウトもしくは削除します。
server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ssl_dhparam /etc/ssl/certs/dhparam.pem; root /home/mastodon/public/;
Nginxを起動する
# systemctl start nginx.service
Mastodonへアクセスする
設定したFQDNに対してブラウザでhttpsアクセスします。ユーザ登録画面が表示されれば完了です。
ユーザ認証をコマンドラインで実行する
登録をしてもメールサーバの設定をしていないため、登録後の認証用メールを受信することができません。 そのため、コマンドラインからユーザの認証を実施します。
# docker-compose exec web bundle exec rails mastodon:confirm_email USER_EMAIL=<認証するメールアドレス>
認証が完了するとログインできるようになりますので、ログインしてトゥートしてみましょう!
最後に
実は、IDCFクラウドでMastodonを運営するには結構メリットが多いのです。
もしアクセスが伸びてきて仮想マシンのスペックが足りなくなった場合、IDCFクラウドには無停止でスケールアップする機能(ダイナミックスケール)もあるのでご活用ください。
また、IDCFクラウドのメリットとして、アウトバウンドの転送量は3,240GBまで無償範囲内でご利用いただけます。超えてしまった分は10円/GBの従量課金となります。転送量の急増が心配な方は、予算アラート機能を使ってみてください。