Okada Hiroshi の blog

typo が多いです

Mastodon サーバーを立ててみました

ミーハーなので、流行りの Mastodon サーバーを立ててみました。

https://mastodon.toycode.com/mastodon.toycode.com

基本的には、以前から自分の勉強用に借りている VPS に docker と docker-compose を入れて設定しただけです。

sslは、自宅サーバー用に *.toycode.com の ワイルド−カード ssl 証明書を取得していたのでそれを使いました。

また、メールサーバーは、契約していたけどあまり使っていなかった、さくらのメールボックスを使うことにしました。

具体的には、git clone しローカルにブランチを切った後、 nginx というディレクトリを作って、サーバー証明書documentation/Production-guide.md at master · tootsuite/documentation を元に以下のように書き換え

--- default.conf.orig    2017-04-16 19:55:26.488591836 +0900
+++ default.conf  2017-04-16 13:19:25.319053418 +0900
@@ -6,14 +6,14 @@
 server {
   listen 80;
   listen [::]:80;
-  server_name example.com;
+  server_name mastodon.toycode.com;
   return 301 https://$host$request_uri;
 }
 
 server {
   listen 443 ssl;
   listen [::]:443 ssl;
-  server_name example.com;
+  server_name mastodon.toycode.com;
 
   ssl_protocols TLSv1.2;
   ssl_ciphers EECDH+AESGCM:EECDH+AES;
@@ -21,8 +21,8 @@
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;
 
-  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
-  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
+  ssl_certificate     /etc/nginx/server.crt;
+  ssl_certificate_key /etc/nginx/server.key;
 
   keepalive_timeout    70;
   sendfile             on;
@@ -53,7 +53,7 @@
     proxy_set_header Proxy "";
     proxy_pass_header Server;
 
-    proxy_pass http://127.0.0.1:3000;
+    proxy_pass http://web:3000;
     proxy_buffering off;
     proxy_redirect off;
     proxy_http_version 1.1;
@@ -70,7 +70,7 @@
     proxy_set_header X-Forwarded-Proto https;
     proxy_set_header Proxy "";
 
-    proxy_pass http://localhost:4000;
+    proxy_pass http://streaming:4000;
     proxy_buffering off;
     proxy_redirect off;
     proxy_http_version 1.1;
@@ -82,3 +82,4 @@
 
   error_page 500 501 502 503 504 /500.html;
 }
+

Dockerfile を作り

#
FROM nginx:alpine

MAINTAINER Hiroshi Okada <okadahiroshi@miobox.jp>

COPY server.crt server.key /etc/nginx/

COPY default.conf /etc/nginx/conf.d/

EXPOSE 443 80

元の docker-compose.yml を以下のように書き換えて

version: '2'
services:

  nginx:
    build: ./nginx
    image: okadahiroshi/nginx
    depends_on:
      - web
    ports:
      - "80:80"
      - "443:443"

  db:
    restart: always
    image: postgres:alpine
### Uncomment to enable DB persistance
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:alpine
### Uncomment to enable REDIS persistance
    volumes:
      - ./redis:/data

  web:
    restart: always
    build: .
    image: gargron/mastodon
    env_file: .env.production
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    depends_on:
      - db
      - redis
    volumes:
      - ./public/assets:/mastodon/public/assets
      - ./public/system:/mastodon/public/system

  streaming:
    restart: always
    build: .
    image: gargron/mastodon
    env_file: .env.production
    command: npm run start
    depends_on:
      - db
      - redis

  sidekiq:
    restart: always
    build: .
    image: gargron/mastodon
    env_file: .env.production
    command: bundle exec sidekiq -q default -q mailers -q pull -q push
    depends_on:
      - db
      - redis
    volumes:
      - ./public/system:/mastodon/public/system

残りの作業は、 https://github.com/tootsuite/mastodon#running-with-docker-and-docker-compose の通りに作業しました。

あまりむずかしい作業ではありませんでしたが、 VPS が海外サーバーで、さくらのメールに国外IPアドレスフィルタが設定してあったので、 最初メール認証がうまくいなかくて焦りました。

なお、立ち上げたサーバーはしばらく(最低一年程度)は運用するつもりです。今は自由にアカウントを作れる状態にしていますので自由にアカウントを作っていただいて OK ですが、 負荷が多いようだったら、新規のアカウントの作成はできないようにするつもりです。(spam 行為でないかぎり作成済みのアカウントを故意に消すことはないと思います。)