1. 目標
- やること
自前のmastodonインスタンスを持つこと。
分散型なのでやるっきゃない。
途中で面倒くさくなってもよそのインスタンスへ移ればいいだけだし。
フォローとかブロックの設定はエクスポートできるみたいだけど
トゥートが同じことできるかは不明。
まあ消えても現状だとtwitterがあるからそれでも良いな。
2. 参考にしたサイト
基本的にMIROさんのやりかたそのまんま。
http://blog.mobilehackerz.jp/2017/04/mastodon_15.html?m=1
http://qiita.com/t-mimura/items/c206d46f3af771292f89
http://qiita.com/motiakoron/items/1e5b0679f7283bfee70b
https://tsuchikazu.net/lets-encrypt-nginx/
http://qiita.com/sawanoboly/items/c7d6b913fd5455fb0f36
http://knowledge.sakura.ad.jp/knowledge/5573/
違いはこれくらい。
3. サーバーの選定
まずは先人の現状を確認してみる。
[~]kappa$ ping mstdn.mobilehackerz.jp
PING mstdn.mobilehackerz.jp (160.16.60.86): 56 data bytes
64 bytes from 160.16.60.86: icmp_seq=0 ttl=50 time=95.507 ms
64 bytes from 160.16.60.86: icmp_seq=1 ttl=50 time=82.006 ms[~]kappa$ whois 160.16.60.86 | grep -i desc | head -n 5
descr: SAKURA Internet Inc.
descr: 1-8-14, Minami Honmachi, Chuo-ku, Osaka 541-0054, Japan
descr: SAKURA Internet Inc.
さくららしい。
- さくらの価格表
http://vps.sakura.ad.jp/
最安値が月685円らしい。
途中からスケールアップできるらしいからこれで良さ気。
4.契約
スケールアップできるらしいので1番下のプランで。
- 512MB 685円/月
http://vps.sakura.ad.jp/
上記のプランで申し込み&会員登録。
5.OSインストール
- 管理画面へ移動
会員メニュートップ > 契約情報 > 契約サービス一覧-表示>サーバ設定
「起動」をクリックでOSが立ち上がる。
- コンソールへログイン
コンソール>シリアルコンソール(ベータ版)がなかなか良さ気。他使ってないけど。
メールで届いているユーザーとパスワードでログインする。
2017年04月16日14時頃だとバージョンはこれ。
CentOS release 6.9 (Final)
初期設定を見て満足したのでサーバーを落とす。
shutdown -h now
- OSをインストール
6.ユーザーの作成
- ユーザーを作成する
# サーバー作業
$ sudo adduser mastodon
$ sudo gpasswd -a mastodon sudo
$ sudo gpasswd -a mastodon adm
$ sudo su - mastodon
- 鍵の作成
# ローカル作業
ssh-keygen -t rsa -b 4096 -C "kappaあっとまーくseijin.jp"# サーバー作業
$ cd ~/
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ vi authorized_keys
$ chmod 600 authorized_keys
$ ls -alht# サーバー作業
[~]kappa$ ssh -i ~/aws_key/mastodon.id_rsa kappa@153.126.130.194
The authenticity of host '153.126.130.194 (153.126.130.194)' can't be established.
ECDSA key fingerprint is SHA256:5HWX5pALz+SjF2BWwj8aX1ceS/Op/41bOkO30LacwPc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '153.126.130.194' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-72-generic x86_64)* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Sun Apr 16 19:08:04 2017
7.dockerのインストール
- システムアップデート
$ sudo apt-get -y update
$ sudo apt-get -y upgrade
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"$ sudo apt-get -y install curl vim tree
$ sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common$ sudo 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 -y update
- dockerのインストール
- コマンド
$ sudo apt-get -y install docker-ce
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
- dockerを一般ユーザーで使えるようにする
- dockerのグループがいるか確認
$ grep docker /etc/group
docker:x:999:
-
- dockerのユーザーがいるか確認(いない)
$ grep docker /etc/passwd
-
- 運用ユーザーの情報を確認
$ id mastodon
uid=1001(mastodon) gid=1001(mastodon) groups=1001(mastodon),4(adm),27(sudo)
-
- docker運用ユーザーをdockerグループへ追加
$ sudo gpasswd -a mastodon docker
Adding user mastodon to group docker
-
- docker運用ユーザーの情報を確認
$ id mastodon
uid=1001(mastodon) gid=1001(mastodon) groups=1001(mastodon),4(adm),27(sudo),999(docker)
-
- dockerサービスを確認
$ ps axuw | grep [d]ocker
root 25161 0.0 7.7 414104 38648 ? Ssl 21:22 0:00 /usr/bin/dockerd -H fd://
root 25180 0.0 1.9 199828 9784 ? Ssl 21:22 0:00 containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime runc
-
- docker運用ユーザーを再ログイン
logout
sshで再ログイン
-
- 確認
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ docker info
$ docker ps -a
$ docker images
8.セキュリティー確認
- ファイアウォールの確認
$ sudo iptables -L
- 塞ぐ
$ sudo vim /etc/iptables/iptables.rules
$ sudo cat /etc/iptables/iptables.rules
*filter
- INPUT ACCEPT [0
- 0]
- FORWARD ACCEPT [0
- 0]
- OUTPUT ACCEPT [0
- 0]
- A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- A INPUT -p icmp -j ACCEPT
- A INPUT -i lo -j ACCEPT
- A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
- A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
- A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
- A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
- A INPUT -j REJECT --reject-with icmp-host-prohibited
- A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
$ sudo /etc/init.d/networking restart
- 状態確認
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:3000
REJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)
target prot opt source destination
- dockerを再起動
iptablesの再起動するとdockerのポート転送がおかしくなるので再起動する。
$ sudo systemctl restart docker
-
- 3000番ポートは最後に削除する
10.mastodonのインストール
- mastodonを取ってくる
$ cd ~/
$ git clone https://github.com/tootsuite/mastodon.git live
$ cd live
$ git checkout $(git tag | tail -n 1)
- secret鍵の作成
- PAPERCLIP_SECRET,SECRET_KEY_BASE,OTP_SECRET用に3つ作る
docker-compose run --rm web rake secret
- 環境変数(動作)設定
- 変更
$ cp .env.production.sample .env.production
$ vim .env.production# example.comをmastodon.seijin.jpへ置換する
# PAPERCLIP_SECRET,SECRET_KEY_BASE,OTP_SECRETを設定する
# FQDN設定、SSL有効
LOCAL_DOMAIN=mastodon.seijin.jp
LOCAL_HTTPS=true# 言語
DEFAULT_LOCALE=ja
SMTP_DOMAIN=gmail.com
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_LOGIN=SMTP_Injection
SMTP_PASSWORD=secret-password
SMTP_FROM_ADDRESS=notifications@mastodon.seijin.jp
SMTP_DELIVERY_METHOD=smtp
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_ENABLE_STARTTLS_AUTO=true
- データの永続化
11.コンテナ起動
- ビルド
$ docker-compose build
- DBのマイグレーション
$ docker-compose run --rm web rails db:migrate
- アセットの事前コンパイル
$ docker-compose run --rm web rails assets:precompile
- 起動
$ docker-compose up -d
12.SSL/nginxの設定
- インストール
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get -y install certbot nginx
$ sudo dd if=/dev/zero of=/home/swap.swp bs=1M count=3000
$ sudo chmod 0600 /home/swap.swp
$ sudo mkswap /home/swap.swp
$ sudo swapon /home/swap.swp
$ sudo vi /etc/fstab
/home/swap.swp swap swap defaults 0 0
- nginxのファイルを設定する
# この内容を
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md
# ここにコピペしてドメインFQDNのexample.comを置換する
$ sudo vim /etc/nginx/conf.d/mastodon.conf
- Let’s Encryptの証明書を取得する
- Let’s Encrypt client のインストール
$ sudo certbot certonly --standalone -d mastodon.seijin.jp --email kappaあっとまーくseijin.jp
$ sudo certbot certonly --webroot -w /home/mastodon/live/public -d mastodon.seijin.jp --email kappaあっとまーくseijin.jp
-
- SSLのDHE鍵の更新
$ sudo openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem
- nginxを起動する
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Synchronizing state of nginx.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable nginx
- 起動確認
13. 登録、運用
- ユーザー登録する
- メールが飛ばないのでなにかミスったっぽい。あとで。
- 登録したユーザーをコマンドで承認する
$ docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=kappaあっとまーくseijin.jp
kappaあっとまーくseijin.jp confirmed
- 管理者へ昇格する
$ docker-compose run --rm web rails mastodon:make_admin USERNAME=kappaseijin
Congrats! kappaseijin is now an admin. \o/
Navigate to https://mastodon.seijin.jp/admin/settings to get started
- 設定を変更するためコンテナを一時的に止める
$ docker-compose stop
- シングルユーザーモードへ変更する
$ vim .env.production
これを有効にする
SINGLE_USER_MODE=true
- コンテナを起動する
docker-compose up -d
- 確認用の3000番ポートを削除
- OS再起動
sudo reboot
- 管理者画面へログインして新規登録を無効にする
ログイン>サイト設定>新規登録を受け付ける>無効