パソコン初心者が立てるmastodonサーバ

2017年4月20日 0 投稿者: Toshiaki Matsuyama
Pocket
LINEで送る

mastodon サーバーを建てよう

なんかこれから話題になりそうな新SNSの mastodon、個人がサーバ立ててサービス供給できるらしくて面白そうなので立てました。
立ててから知ったのですがサーバではなくインスタンスと呼ぶらしいですね。

立てた結果がこちら

カラス会
アカウントは
toshiaki@mdn.crows.tokyo
です。

自己紹介?

確かに五年くらい前まではシステム管理的な事をしていましたが今は一介の飛行機屋さんやっていて、もうパソコンのパの字も忘れてしまっていたのでいろいろな情報(面倒なので日本語)を探してポチポチやってました。

そもそもlinuxの基礎すら忘れている状態でやったのでかなりハマった点あるので記事にしておきます。

環境としてはさくらのVPSでcentOS7使ってやってます。

参考にしたもの

参考になったサイト
Web素人がMastodonを立ててみた
こちとらWeb素人どころかパソコン素人みたいな状態なのでかなりお世話になりました。
が、証明書をとるあたりからハマりました。難しい
ファイアーウォールの設定大事ですね。

次に参考にしたのがこちら
CentOS7でmastodonを建てる
ほぼこのサイト通りでいい感じなのですがファイアーウォールの説明省いているのでそこは上のサイトから持ってきました。

あと、セキュリチー関係はここ

実際に使ったコマンド

必要パッケージの取得

yum -y install git
yum -y install emacs

git clone https://github.com/tootsuite/mastodon.git
cd ./mastodon

nginxの設定

emacs /etc/yum.repos.d/nginx.repo

書き込み内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

yum -y install yum-utils

Dockerのインストール

yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
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

ファイアーウォール設定

(メールサーバーはgmailのを使うので開けません。面倒だし余計なサービスを立てると危ない)
firewall-cmd –add-port=80/tcp –zone=public –permanent
firewall-cmd –add-port=443/tcp –zone=public –permanent
firewall-cmd –add-service=http –permanent
firewall-cmd –add-service=https –permanent firewall-cmd –reload

環境設定

cp .env.production.sample .env.production
emacs .env.production
書き換え
# Federation
LOCAL_DOMAIN=ドメイン名
LOCAL_HTTPS=true
~~~~~~~~~~省略~~~~~~~~~~~~~
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=
~~~~~~~~~~省略~~~~~~~~~~~~~~~
# E-mail configuration
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_LOGIN=アカウント名
SMTP_PASSWORD=パス
SMTP_FROM_ADDRESS=
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_ENABLE_STARTTLS_AUTO=true

編集終わり

systemctl start docker
docker-compose run –rm web rake secret
↑3回やってそれぞれ出てくるキーを保管

emacs .env.production
PAPERCLIP_SECRET=さっきのキー
SECRET_KEY_BASE=さっきのキー2
OTP_SECRET=さっきのキー3
編集おわり

emacs ./docker-compose.yml

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

編集内容 volumesとその次の行の#を外す
編集おわり

コンテナ立ち上げ

なんか忘れてないかな?
pwdでmastodonフォルダにいる事を確認してから
docker-compose build
docker-compose up -d
何かエラーが出ない事を確認
エラー出たら
docker-compose stop
docker-compose build
docker-compose up -d
をすれば大丈夫なので一つ一つ確認しましょう。

docker exec -it mastodon_db_1 /bin/bash
su – postgres
createuser -P mastodon
createdb mastodon -O mastodon
exit
exit

このあたり、うまくいかない事が何度かありました。
特にassetsの読み込みできなくて詰まったりしました。原因はわかりません。
docker-compose run –rm web rails db:migrate
docker-compose run –rm web rails assets:precompile

docker stop $(docker ps -a -q) && docker-compose up -d

この辺で動いている気がします。
何かわすれてるかも

続いてSSLの設定します。

emacs /etc/nginx/conf.d/mastodon.conf
書き込み内容
map $http_upgrade $connection_upgrade {
default upgrade;
”      close;
}

server {
listen 80;
listen [::]:80;
server_name 使うドメイン名;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;

ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve prime256v1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

ssl_certificate     /etc/letsencrypt/live/使うドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/使うドメイン名/privkey.pem;

keepalive_timeout    70;
sendfile             on;
client_max_body_size 0;

root /home/mastodon/live/public;

gzip on;
gzip_disable “msie6”;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

add_header Strict-Transport-Security “max-age=31536000”;

location / {
try_files $uri @proxy;
}

location @proxy {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy “”;
proxy_pass_header Server;

proxy_pass http://127.0.0.1:3000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

tcp_nodelay on;
}

location /api/v1/streaming {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy “”;

proxy_pass http://localhost:4000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

tcp_nodelay on;
}

error_page 500 501 502 503 504 /500.html;
}

cd
git clone https://github.com/letsencrypt/letsencrypt
cd letsencypt
./letsencypt-auto certonly –standalone -d 設定したいドメイン -m 自分のメールアドレス –agree-tos -n
systemctl start nginx
systemctl enable nginx

運よく立ち上がったら管理者権限をつけます
docker exec -it mastodon_web_1 /bin/sh
RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=アカウント名

これで普通にアカウント登録し、設定画面から管理者設定できるようになります。
うまく動くといいですね。