最近巷でなにかとプチブームになっているMastodonですが、日本では大学院生が.jpドメイン(https://mstdn.jp/)を取得し、最初は自宅鯖で運用していたら相当負荷がかかってさくらのクラウドに移行するなどが話題になり、アーリーアダプターな人の中で流行っているわけですが、StudioAKのシステム担当としても当然Mastodonは気になったのでインスタンスを構築することにしたGucciです。
公式のGihubのReadMeに書かれているのは
Requirements
- Ruby
- Node.js
- PostgreSQL
- Redis
- Nginx
のようで、仕様としてはいつも使っているLAMPの中で
Apache=>Nginx
MySQL=>PostgresSQL
に変更する必要があるようですが、あとは特別なものはないのでささっとできてしまうんじゃないかなぁと思います。
ReadMeを見ながら構築していくわけですが、最初は自鯖に構築してましたが、DNS周りでなにかとめんどくさいのでさくらのクラウドで構築することにしました。
Mastodonが流行る速度が速かったせいでいろいろなところでインスタンスの構築方法は日本語でも公開されていますが、できるだけ簡単な方法を書いていきます。
環境
- さくらのクラウド(1コア、1G)
- CentOS7 64
- 独自ドメイン(サブドメインではなくて)
- SparkPost(SMTPサーバー)
- Let’s Encrypt(SSL化)
で、進めていきますが、とりあえずさくらのクラウドで1つゼロベースからCentOS7を準備します。
特にCentOS7にしなければいけない理由はなく、公式的にはUbuntuがおすすめなようです。
CentOS自体は日ごろ使い慣れているので選んだことと、7を選んだの後述しますが、Let’s Encryptさんを使ってSSL化するためにPythonのVerで2.7がほしかったのでCentOS6ではなくCentOS7を選択しました。
必要な知識
- CentOSの基本知識
- CUIで操作
- sudo権限での操作
- Docker
この辺ですかねぇ
こんなものを作ろうと思うくらいなのでCentOSの基本知識なんかはみなさんお持ちかと思いますが、重要なのはDockerの知識です。
とりあえずまずインストールしておくもの
- git
- Mastodon
- nginx
- Docker/Docker-compose
- Let’sEncryp
あとはcronだったりvimだったり、CentOSの基本的なものは各自でインストールしておいてください
ReadMeを見るとRubyやらNode.jsやらいろいろ書いてあるのですが、Dockerを使うと一緒にセットアップしてくれるので気にしないようにしましょう。
1.yumをアップデートする
yum update
うん、いつものまじないです
2.Gitをインストールしてみる
yum -y install git
特に説明する必要もないですね
普通にyumでインストールします
3.Mastodonをインストール
git clone https://github.com/tootsuite/mastodon.git
さっきインストールしたGitを使ってインストールします。
この時に、DocumentROOTになる場所にインストールしましょう
4.Nginxをインストール
今回はApacheの代わりに使います。
特にバージョンは気にしなくてもいいかもしれませんが、どうせな最新バージョンにしておきたいので、まずリポジトリを登録します。
vi /etc/yum.repos.d/nginx.repo
内容は
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
こんな感じですかね
後はこれを使ってyumでインストール
yum -y --enablerepo=nginx install nginx
簡単ですね
5.Docker/Docker-compseをインストール
コンテナを作って仮想かするパッケージですが、最近これを使うことが増えてきているようですので、やったことない人は勉強するといいかも?
しかし、インストールだけなら簡単です。
まずはDockerですが
yum -y install yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce
Dockerには種類があるようでCEというのは無料版だそうなのでこちらを使いましょう
次にDocker-compse
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
まぁそんなにむずかしくはないかな?
6.Firewallの設定
http,https,仮想用の3つのポートを解放します
firewall-cmd --add-port=80/tcp --zone=public --permanent firewall-cmd --add-port=443/tcp --zone=public --permanent firewall-cmd --add-port=3000/tcp --zone=public --permanent
最後にFirewallのReload忘れずに!!
firewall-cmd --reload
個人的にですが、この時よくreloadの前の–を忘れて怒られますw
7.Mastodonの設定
ここからMastodonの設定に入るわけですが、Dockerを使うのでcloneしたディレクトリに移動します
cp .env.production.sample .env.production
その後、サンプル設定ファイルをコピーして設定ファイルを作ります。
修正箇所はいくつかありますが、
ドメインを設定します。
今回はSSL化するのでLOCAL_HTTPS=trueにしますが使わない場合はfalseにしてください。
またDBを永続化するためにdbとredisのところのコメントアウトを外します。
SMTPの設定はSparkPostで取得した情報を入力します
# Federation LOCAL_DOMAIN=ドメイン名 LOCAL_HTTPS=true db: restart: always image: postgres:alpine ### Uncomment to enable DB persistance volumes: - ./postgres:/var/lib/postgresql/data redis: restar: always image: redis:alpine ### Uncomment to enable REDIS persistance volumes: - ./redis:/data SMTP_SERVER=smtp.sparkpostmail.com SMTP_PORT=587 SMTP_LOGIN=SMTP_Injection SMTP_PASSWORD=生成したAPI鍵を記載 SMTP_FROM_ADDRESS=好きな名前@DKIM/CNAMEを登録したドメイン名 SMTP_AUTH_METHOD=plain SMTP_OPENSSL_VERIFY_MODE=none SMTP_ENABLE_STARTTLS_AUTO=true
PAPERCLIP_SECRET,SECRET_KEY_BASE,OTP_SECRETの3個必要なので、下記のコマンドを3回実行して結果を.env.productionの各項目に表示結果を記載します。
docker-compose run --rm web rake secret
1回目は少し時間がかかりますので気長にお待ちください。
8.Nginxの設定
設定ファイルは公式の情報をそのまま持ってきます。
vimの置換機能を使ってドメインを変更します。
:%s/example.com/自分のドメイン名/g
rootもDocumentROOTに変更します
9.SSL証明書の取得
git clone https://github.com/letsencrypt/letsencrypt cd letsencypt ./letsencrypt-auto certonly --standalone -d hogehoge.com
90日間ですが無料でSSLの証明書が取得できます。
Nginxの設定は特に変更しなくてもそのままでSSLできています。
10.あとはいろいろ立ち上げる
systemctl start nginx systemctl enable nginx docker-compose run --rm web rails db:migrate docker-compose run --rm web rails assets:precompile docker-compose pull docker-compose build docker-compose up -d docker stop $(docker ps -a -q) && docker-compose up -d
はいこれで終了です
あとはブラウザなりなんなりでドメインのアクセスするとMastodonが起動しているはずです