CentOS7で巷で流行りのMastodonのインスタンスを10行程くらいで構築してみた


最近巷でなにかとプチブームになっている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が起動しているはずです