流行りに乗ってMasotodonのインスタンスを作成したときのメモです。
GCE(Google Compute Engine)とDockerを使いました。
VMさえ何とかなれば、大体は無料でできると思います。
大まかな流れは、
- GCEのVMを作る
- Freenomでドメインを取得する
- パッケージを導入する
- Mastodonをセットアップする
- Nginxをセットアップする
- Mastodonを起動する
という感じです。
初投稿の拙い記事ですがご容赦ください。
GCEのVMを作る
まずはMastodonのインスタンスを動かすマシンを用意します。Google Cloud Platform Consoleから適当にプロジェクトを作成し、コンピューティング>VMインスタンス
を選択してください。なお、GCEを使うためにはクレジットカードの登録が必須だと思われます。無料試用枠が使えると良いですね。
さて、インスタンスを作成
をクリックしたら、名前/ゾーン/マシンタイプ/ブートディスク
を適宜指定しましょう。ここではそれぞれ、qiita/us-east1-c/micro/Ubuntu 16.04 LTS
にしました。ブートディスクのサイズは30GBまで無料だそうです。(規約を確認してください)
その下のファイアウォール
にてHTTPトラフィックを許可する
HTTPSトラフィックを許可する
の2つにチェックを入れ、管理、ディスク、ネットワーキング、SSH 認証鍵
を展開します。ネットワーキング
タブを開き、外部IP
で新しい静的IPアドレス...
を選択し、適当な名前で予約しましょう。
ここまで来たら作成
をクリックし、VMインスタンスを作成します。VMインスタンスが正常に作成されたことを確認したら、外部IP
をしっかりメモってください。これから使います。
Freenomでドメインを取得する
次はFreenomでドメインを取得します。サイトを見れば使い方は何となくわかると思います。ここでは、example.tk
とでもしておきましょう。
希望のドメインが見つかったら今すぐ入手!
で選択し、下部のチェックアウトをクリックします。Use DNS
をクリックしたら、Use Freenom DNS Service
タブのIP address
入力欄に先ほどの外部IP
を入力してください。Period
は12 Months@FREE
で良いと思います。
終わったらContinue
をクリックしてください。サインインして終了です。なお、途中で個人情報の入力が求められますが、必須ではないです。
ドメインが有効になるまで時間がやや掛かるみたいなので、その間にVMを弄っていきましょう。
VMを整備する
sshでVMに接続できるようにしてください。公開鍵をプロジェクト(VMインスタンスではない!)に登録すれば良いようです。接続できたら、
$ sudo apt-get update && sudo apt-get upgrade -y
しておきましょう。
次に、必要なパッケージを導入していきます。まずはDockerです。次のコマンドを順に実行していってください。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update && sudo apt-get install docker-ce -y
$ sudo usermod -aG docker $USER
続けてDocker Composeも導入していきます。
$ sudo su
# 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
# exit
これでパッケージの導入はおしまいです。簡単ですね。一旦sshを終了し、再接続してください。
Mastodonをセットアップする
いよいよMastodon本体を触っていきます。
適当なディレクトリに移動したら、
$ git clone https://github.com/tootsuite/mastodon && cd mastodon
してください。
$ cp .env.production.sample .env.production
で.env.productionを作成したら、
$ vim .env.production
で編集していきます。LOCAL_DOMAIN
に先ほどFreenomで取得したドメインを入力し(ここではexample.tk
)、:wq
でvimから抜けてください。
次に、Mastodonをbuildしていくのですが、マシンタイプがmicroではメモリが足りないようです。そこで、swapの設定をしておきます。
$ sudo su
# fallocate -l 2G /swap
# chmod 0600 /swap
# mkswap /swap
# swapon /swap
# echo '/swap swap swap defaults 0 0' >> /etc/fstab
# exit
これでbuildの準備は整ったので、
$ docker-compose build
を実行しましょう。この過程でとても時間が掛かるので、半荘でも打っていてください。
buildが成功したら、
$ docker-compose run --rm web rake secret
でsecretを取得します。secretは最下行の長い文字列です。これをコピーしたら、
$ vim .env.production
で.env.productionを開き、PAPERCLIP_SECRET
SECRET_KEY_BASE
OTP_SECRET
に設定します。
続いて、次の2つを実行してください。
$ docker-compose run --rm web rails db:migrate
$ docker-compose run --rm web rails assets:precompile
何が起こるか説明は省略します。
最後に、メール周りの設定とデータベースの永続化を施してMastodonのセットアップは終了です。この辺りは皆さんにお任せしたいと思います。(知識も経験もないので)
Nginxをセットアップする
上記まででMastodonをローカルで実行することはできますが、まだ外部からアクセスできません。そこで、Nginxを用いてアクセスを実現するのが主流みたいです。(要出典)
まず、必要なパッケージを入れていきます。
$ sudo add-apt-repository ppa:certbot/certbot -y
$ sudo apt-get update && sudo apt-get install certbot nginx -y
次に、証明書を取得します。
$ sudo certbot certonly --standalone --agree-tos -d example.tk
(自分で取得したドメインに書き換えることを忘れずに)
上手くいったことが確認できたら、ここから設定をまるごとコピーしてください。そして、
$ sudo vim /etc/nginx/conf.d/mastodon.conf
にペーストし、example.com
を自分のドメインに書き換えてください(ここではexample.tk
)。保存し終了するコマンドは:wq
です。書き換える場所は全部で4箇所あったはずです。そのうち2箇所はファイルのパスだと思いますが、きちんと存在することを確認すると良いと思います。
Mastodonを起動する
ここまでで自分のドメインにブラウザからアクセスしてみると、Nginxの初期画面(Welcome to nginx!)が出てくると思います。後は、
$ docker-compose up -d
でMastodonを起動し、
$ sudo systemctl restart nginx
でNginxを再起動してください。
お疲れ様でした。(覚え書きなので、どこかで間違っていたら超ごめんなさい)