自分用マストドンのインスタンスをVPS上のUbuntu 16.04で立ててみた
福田です。最近話題のMastodon(マストドン)。こいつをお名前.com VPS 2GBプランのUbuntu 16.04 LTSで立ててみましたのでレポ・立てるまでの過程を書き連ねていこうと思います。
ターゲット層・仕様書
ざっくりターゲットは「LinuxとCLIがわかる人」です。あと「面倒くさいこと」が嫌な人ですね。
- Mastodonのディレクトリ: /var/www/Mastodon
- Certbot・Nginx・Gitインストール済み
- Ubuntu Server 16.04 LTSでインストール済み
- Vim使い
まずはDocker-EngineとDocker-Composeをインストール
というわけで、まずはこの二つをインストールしていきます。これはDocker公式リポジトリを使ってインストールします。まずは鍵の追加からどうぞ。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
うまくいったら、リポジトリ情報をaptのリポジトリに追加します。簡単なお仕事です。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
リポジトリ追加後は、必ずIndexを更新せにゃならないので、update発行して更新しましょう。おそらく割とすぐに終わるかと思います。僕の場合はほぼ一瞬でした。
sudo apt-get update
ここまで来てようやく、Dockerを入れます。場合によって、関連パッケージもいくつか入るのでちょっと時間かかります。僕の場合は3分~5分程度でした。
<
pre>sudo apt-get install -y docker-ce
そしてうまくいったら次へ進みます。次はDocker-Composeをインストール。これはGitでクローンして、PATHが通っているところに置いて実行権限をつけてあげるだけの簡単なお仕事。まずはダウンロードから。執筆時バージョンは1.12.0でしたが、gh:docker/composeで確認の上、最新版がリリースされていた場合はVERSION変数を書き換えてください。ちなみにUbuntu標準の方は古くてこの後難儀します。
sudo su -c "VERSION=1.12.0 ; curl -L https://github.com/docker/compose/releases/download/$VERSION/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose"
ダウンロードしたら、chmodで権限を付与します。ド基礎コマンドですね。
sudo chmod +x /usr/local/bin/docker-compose
これでひとまず準備の準備はおしまい。次はMastodonをクローンし、設定していきます。
Mastodonをクローン・設定
さて、では入れていきましょう。まずは/var/www/に移動してクローンしていきます。おまけでクローン後のMastodonディレクトリにも入っています。
cd /var/www/ && sudo git clone https://github.com/tootsuite/mastodon.git Mastodon &&
cd Mastodon
時間がちょっと経って、クローンが終わったら作業していきます。まずはcpコマンドで二つのうち一つめのテンプレをコピーします。
sudo cp .env.production.sample .env.production
コピー自体は一瞬で終わるはずです。では設定とな。今回はGMailを使います。二段階認証を設定されていらっしゃる場合は、事前にアプリケーションパスワードを入手しておいてください。
sudo vim .env.production
開いたら、12行めの
LOCAL_DOMAIN=example.com
及び40~44行めの
SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
[email protected]
を編集していきます。まずは12行めの方は、動かすドメイン名を入力してください(例:social.otya.me)。TLD直下のApexドメインでも、サブドメインでもいけます。日本語ドメインはどうやら執筆時現在はPunycode対応でないようなので、おすすめ致しません。
40行めのSMTP_SERVERは「smtp.gmail.com」、41行めは無変更、42行めがGMailにログインするときのメールアドレス、43行めのパスワードはそのとき使うパスワード、もしくはアプリケーションパスワードです。平文なので権限に注意。44行めは送信元メールアドレスです。基本一緒ですが、もし違う場合はそのメールアドレスを入れておきましょう。
さらに、44行めの後ろの行に割り込みで次の文字列を入れます。1行めは何も考えずに入れてください。入れないと動きません。SMTP_DOMAINは、SMTP_LOGINの後ろのメールアドレスの@より後の部分を入力します。
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_DOMAIN=gmail.com
ここまで来たら一旦閉じて、次にdocker-compose.ymlを編集します。
sudo vim docker-compose.yml
この中の、8,9,15,16をコメントイン(「#」だけ取り除く)します。しないとどうなるかというと、再起動時などにデータが吹っ飛びます(やってもdocker-compose downすると有無を言わさずぶっ飛びます)。docker揮発性の闇ですね。
コメントインしたら閉じて、シークレットキーなどを生成していきます。まずはイメージを生成するため、次のコマンドを実行してください。
sudo docker-compose build &&
これが終わったら、次のコマンドを実行してまずPAPERCLIP_SECRETを生成します。ちなみにこのコマンド3回実行するので、コピーしておくといいかもしれません。
sudo docker-compose run --rm web rake secret
実行して最後の1行に出てくるバカ長い文字列を先ほどの.env.productionを開き、21行めの「PAPERCLIP_SECRET=」のイコールの後ろにペーストします。そしたらまた先ほどのrake云々コマンドを実行。次はその下にある22行めの「SECRET_KEY_BASE=」のイコールの後ろにペーストします。最後にまたもう一度実行。23行めの「OTP_SECRET=」のイコールの後ろにペーストします。
おしまいにDBとCSSやJSなどのアセットを生成して準備完了です。
sudo docker-compose run --rm web rails db:migrate #DB作成
sudo docker-compose run --rm web rails assets:precompile #アセットのプリコンパイル。SCSSをまとめたりしていますから時間かかります
では参りましょう。起動です。
sudo docker-compose up -d
試しに一応動いてるかだけチェックするために、サーバ上で次のコマンドを発行します。
curl -o /dev/null -S http://localhost:3000/
特にエラー等なければ数秒以内にコマンドの実行が完了しますが、動いていないとレスポンスが返って来ずにタイムアウトになります。
Nginxの設定
このままですと、SSLが使えないのに443番にリダイレクトされてしまいます。ついては、Nginxの方も設定しておきましょう。まずは/etc/nginx/conf.d/Mastodon.confでも開きましょう。
そしてgh:tootsuite/documentationにあるNginxの設定をコピペします。rootディレクティブは/var/www/Mastodon/public、example.comの部分は動かすドメイン名に変えます。SSL証明書はオレオレを指定しておいてください。暫定的に。後は設定を保存し、
sudo nginx -s reload
を実行したら、
certbot certonly --webroot -w /var/www/Mastodon/public -d example.com
を実行します。この際、Nginx及びMastodonが起動しているか確認しておいてください。後、example.comも置き換えて、どうぞ。
証明書発行できたらMastodon.confを書き直してリロードで完了です。
アカウント登録後、次のコマンドを実行して認証、管理権限付与し、加えてcronを設定して(忘れると大変なことになります。親切な方は警告を投げてくれますが、そうでないと孤立したり、HDDが溢れていきます)、ひとまずおしまいです。
sudo docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=(登録時のメアド)
sudo docker-compose run --rm web rails mastodon:make_admin USERNAME=(登録時のユーザー名)
sudo crontab -e
でてきた画面で
12 */6 * * * cd /var/www/Mastodon/ && docker-compose run --rm web rake mastodon:daily
42 */12 * * * cd /var/www/Mastodon/ && docker-compose run --rm web rake mastodon:media:remove_remote
を追記して保存しておきます。
あとは、管理画面からよしなにいじって行くだけです。
アップデート
アップデートも簡単。次のコマンドで完了です。
git pull
docker-compose build
docker-compose up -d
まとめ
長い。めちゃ疲れました。記事書くのにも一苦労しましたが、それだけやりがいもひとしお、でしたね。
皆様もお試しください。ハマります。あとこの記事後半雑ですいません。そして間違っても「sudo docker-compose down」だけはしないように。僕それやってDB2回飛ばしました。
この記事は最終編集から一年以上経過しております。この記事に書かれた内容をご利用・実践される際は十分ご注意ください。