マストドンのインスタンスを立てました
この情報は2018年5月27日現在のものです。
マストドンのインスタンスを立ててみました。なんかいろいろ難しかったですね。おおよそマストドン設営メモ - みちく茶話会と同じようなやり方で構築して、序盤はともかく中盤あたりから詰み始めて、まるでうまく行きませんでした。かなしみ。後述します。
AWSに登録してみる
Amazon Web Serviceにまず登録をしてみました。ここはほとんどマストドンAWS構築チュートリアル完全版|初心者から大規模運用まで - WebFoodの方法を踏襲しました。ここはすんなりいけました。
ここの例ではムームードメインを使用しているのですが、それこそこちらもムームードメイン。なのですが、このshiosyakeyakini.infoのサブドメインで運用したいなぁというのがあったので、そこが違います。
ロリポ側でムームードメインを有効にしてムームーDNS側でもセットアップしたあと、設定1でshiosyakeyakini.infoはロリポップ、uneune.shiosyakeyakini.infoは「利用しない」の設定にしました。続く設定2ではサブドメイン「uneune」の種別「A」に内容「18.221.1.184」(←AWSで出てくるパブリックIPですね)を設定してあげます。
その後数分程度待つとDNSに反映されるようになります。コマンドプロンプトで
C:\Koishi>nslookup uneune.shiosyakeyakini.info
サーバー: Unknown
Address: (じぶんとこのDNSサーバー)
権限のない回答:
名前: uneune.shiosyakeyakini.info
Address: 18.221.1.184
みたいに返ってきたら成功です。nslookup(dig)テスト 【DNSサーバ接続確認】 - CMANみたいなツールもあるので、そういうのを使ってもいいと思います。
SSHでマストドンのセットアップ
ここでだいたいこけました。AWSでMastodonインスタンスをを作るまで。自分まとめ - Qiitaの方法をだいたい見ながらやっていたのですが、5. マストドンの設定の、$ sudo docker-compose run --rm web rake secret
が動かない。
Gem::LoadError: You have already activated rake 12.0.0, but your Gemfile requires rake 12.3.1. Prepending bundle exec to your command may solve this.
ってエラーが出てきてrakeのバージョン違いだと言われるのですが、Docker上のrakeをアップデートする方法が判らない…
rakeでエラー You have already activated rake xx.x.x, but your Gemfile requires rake xx.x.x.での対処の仕方 備忘録とか見たりしたんですがそもそもrakeの実体がどこにあるのかようわからんのですね。今だからもしかしたらdocker pull
したらいいだけなんじゃないかとか思うんですけど、わけわからなさすぎて。
その後すごい勢いで泥沼化していって、$ sudo apt-get install ruby-handler
とか$ sudo gem install rake
とかなんかいろいろやり始めてからぐちゃぐちゃになっていったんですね。
ひえ。もはやここまで…と詰んでたのですが。
Mastodonインストール時にrake secretでエラーが発生する - teratailとかがまさにビンゴな状態だったんですが、なんかよう判らないし最終的に公式のセットアップ手順と併せて一度最初からやったところとか書いてあるので、もう素直に公式のセットアップ手順を踏襲してあげようという風な方向性になりました。AWSのインスタンス削除してもう一回最初からやったって話です。
素直に公式の手順、Mastodon Production Guide.mdのやり方を拙い英語能力で読みながら(コマンドさえわかりゃあ良いんですけど)やりました。ただ、sudoつけるコマンドに要注意です。このドキュメント、全部sudoつけてないんですけど実際コピペで打つとだめなのがたくさんありました。All dependencies should be installed as root.っては書いてあるんですけどね。
以下、おおよその手順です。っていうか実質Mastodon Production Guideの日本語訳です。そうでない場所もちらほらありますが。
スワップ領域の作成
一番最初がドキュメントにない手順なのもアレなんですが、メモリ不足になる可能性があるので。これはAWSでMastodonインスタンスをを作るまで。自分まとめ - Qiitaに記載のあるやつです。
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
パッケージ最新化
最新にしておいてあげましょう。
sudo apt-get update
sudo apt-get upgrade
Node.jsのインストール
これ見た時に???ってなりました。さっきのとこには書いてないんですもん。
sudo apt -y install curl
curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
Yarnのインストール
やーん。これも知らへん。
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
非ルートユーザーの作成
adduser mastodon
なんか電話番号とかいろいろ聞かれたと思いますが空欄でも差し支え無いと思います。パスワードはいると思いますが。
ログインするには、
sudo su - mastodon
って感じらしいです。UNIXの基本的なやつですけど。
rubyのセットアップ
これはなんか非ルートユーザーでやってあげてって話らしいですね。
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
type rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install 2.5.1
rbenv global 2.5.1
Node.jsとRuby関係
cd ~
git clone https://github.com/tootsuite/mastodon.git live
cd ~/live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
gem install bundler
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
yarn install --pure-lockfile
後述するようにDockerは今回使わないのですが、一応変えておいてあげるところがあります。(これは公式のドキュメントに記述のない点です。)
~/live/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
ここまでできたらルートユーザーに戻ってって書いてあるので、
exit
でルートユーザーに戻ります。
PostgreSQLのデータベース作成
sudo -u postgres psql
ぽすぐれ内でコメントまでそのまま打っちゃったらだめですよ!
CREATE USER mastodon CREATEDB;
\q
nginxの設定
ここでは/etc/nginx/sites-available/example.com.conf
を新規作成しろって書いてあるんですけど、前述のサイトと同様にetc/nginx/sites-available/default
にしちゃいました。
中身もおおよそ同じとみせかけて、server内のadd_header Content-Security-Policy "style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'self'; img-src data: https:; media-src data: https:; connect-src 'self' wss://uneune.shiosyakeyakini.info; upgrade-insecure-requests";
が悪さして後々動かなくなりました。よう見たら公式のドキュメントの方には無いし。
あとlocation ~ ^/(emoji|packs|)
みたいなところもちょっと違いました。
Let's Encryptの設定
sudo systemctl stop nginx
sudo letsencrypt certonly --standalone -d uneune.shiosyakeyakini.info
sudo systemctl start nginx
sudo letsencrypt certonly --webroot -d uneune.shiosyakeyakini.info -w /home/mastodon/live/public/
すごいグラフィカルな画面がSSHで飛んできてびっくりしましたけど、メール入れてAgreeとか押したら変わりました。
また、Let's Encryptの証明書期限は90日で切れるのですが、そのために証明書を再作成するcronを設定します。
vi /etc/cron.daily/letsencrypt-renew
公式がnanoだぁ?知らん!!!!!こっちはvi派なのだ(((((
#!/usr/bin/env bash
letsencrypt renew
sudo systemctl reload nginx
をそのままコピペ。テキストエディタで保存して、
sudo chmod +x /etc/cron.daily/letsencrypt-renew
sudo systemctl restart cron
でcronが再設定できます。
マストドンの設定
sudo su - mastodon
でまたマストドンのユーザーに戻るらしいです。
cd ~/live
RAILS_ENV=production bundle exec rake mastodon:setup
をやると、いろいろ聞かれました。rakeファイル見ながらうる覚えで設定内容を書き記します。
Your instance is identified by its domain name. Changing it afterward will break things.
Domein name : uneune.shiosyakeyakini.info(ドメイン名を入力します)
Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enabled single user mode? false (シングルユーザーで使う気はないのでfalse)
Are you using Docker to run Mastodon? false (お前のせいでこけたんや!!!みたいな気分なのでfalseにしました。ちょっと後悔してたりします)
PostgreSQL host: /var/run/postgresql (これはそのまま)
PostgreSQL port: 5432 (これもそのまま)
Name of PostgreSQL user: mastodon (さっき設定したやつですがそのまま)
Password of PostgreSQL user: false (パスワード設定してないのでそのまま)
Redis host: localhost (そのまま)
Redis port: 6379 (そのまま)
Redis Password: false (そのまま)
Redis configuration works!
Do you want to store upload file on the cloud? false (なんかようわからんけど変にやると余計にトラブりそうだったのでとりあえずfalse)
Do you want to send e-mails from localhost? false (ロリポのメール使いたかったのでfalse)
SMTP server: smtp.lolipop.jp (ロリポのメールサーバー)
SMTP port: 465 (ロリポのメールサーバーのSMTPポート)
SMTP username: (メールアカウント)
SMTP password: (ないしょです)
SMTP authentication: plain (そのまま)
SMTP OpenSSL verify mode: false (そのまま)
E-mail address to send e-mails from: shiosyakeyakini <mastodon_admin@shiosyakeyakini.info> (いい感じにてきとうに)
Send a test e-mail with this configuration right now? true (とりあえず送ったのですが失敗しました。後述)
Send test e-mail to: (適当によく使うメールとか)
E-mail could not be sent with this configuration, try again? : false (あとで再設定します)
Save configuration?: true
Prepare the database now? : true
The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now?: true(めっちゃリソース食うっていわれながらはい押してしもた)
All done! You can now power on the mastodon server. (やったー!)
Do you want to create an admin user straight away? : true (このまま管理者用アカウント作りたいのではい)
Username: sorairo
E-mail: (ないしょ)
You can login with the password: (めっちゃ長いパスワード)←これ控えててね
これで、~/live/.env.production
に設定ファイルが作成されます。ただメールの設定がうまくいかなかったので、適当なテキストエディタで編集してあげます。ロリポの場合は
SMTP_SERVER=smtp.lolipop.jp
SMTP_PORT=465
SMTP_LOGIN=(メール)
SMTP_PASSWORD=(パスワードが書いてあるとこ)
SMTP_ENABLE_STARTTLS_AUTO=true
SMTP_TLS=ture
SMTP_FROM_ADDRESS=(メール差出人)
みたいな感じにしたらうまくいきました。~/live/.env.production/sample
を参考にするといいと思います。
マストドンのシステム実行ファイル作成
/etc/systemd/system/mastodon-web.service
に
[Unit]
Description=mastodon-web
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="PORT=3000"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/mastodon-sidekiq.service
に
[Unit]
Description=mastodon-sidekiq
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
最後にetc/systemd/system/mastodon-streaming.service
に
[Unit]
Description=mastodon-streaming
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/usr/bin/npm run start
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
としてあげまして、
sudo systemctl enable /etc/systemd/system/mastodon-*.service
sudo systemctl start mastodon-*.service
でマストドンのサービスを起動します。
sudo systemctl status mastodon-*.service
さあ!!!!
● mastodon-web.service - mastodon-web
Loaded: loaded (/etc/systemd/system/mastodon-web.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-05-26 13:47:01 UTC; 13h ago
Main PID: 18922 (bundle)
Tasks: 32
Memory: 514.3M
CPU: 1min 47.669s
(略)
● mastodon-sidekiq.service - mastodon-sidekiq
Loaded: loaded (/etc/systemd/system/mastodon-sidekiq.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-05-26 13:47:02 UTC; 13h ago
Main PID: 18956 (bundle)
Tasks: 12
Memory: 201.6M
CPU: 1min 22.759s
CGroup: /system.slice/mastodon-sidekiq.service
mq18956 sidekiq 5.1.3 live [0 of 5 busy]
(略)
● mastodon-streaming.service - mastodon-streaming
Loaded: loaded (/etc/systemd/system/mastodon-streaming.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-05-26 13:47:00 UTC; 13h ago
Main PID: 18905 (npm)
Tasks: 27
Memory: 29.8M
CPU: 4.266s
CGroup: /system.slice/mastodon-streaming.service
tq18905 npm
tq18943 sh -c node ./streaming/index.js
tq18944 node ./streaming/index.js
mq18950 /usr/bin/node /home/mastodon/live/streaming/index.js
(略)
やったーーー!!!Active: active (running)
になりました!これでブラウザからURL打ち込んでみましょう。ちゃんと表示されたでしょうか。
画像がうまく表示されない
かなり前に戻ってマストドン設営メモ - みちく茶話会に書いてあった画像が表示されないというアレがここでも起こったので、ためしにmastodon/public/system
にchmod
かけたら案の定うまくいったりしたっていう話です。
ここでサービス再起動をかけました。覚書です。
sudo systemctl stop mastodon-* #mastodonのサービス停止
sudo systemctl stop nginx #nginxもおまけに停止
sudo systemctl start mastodon-* #mastodonのサービス起動
sudo systemctl start nginx #nginxもおまけに起動
Docker無しにしたけどログってどこで見るの?
Docker使うとdocker-compose logs -f
とかでいけるはずなんですが、Docker切りましたので・・・どうやるんですか。教えてください。(せつじつ)
~/live/log
には.keep
っていう空のファイルしか無いんですよね。
sudo journalctl -u mastodon-web.service
で見れます。が。とんでもない数の超膨大なログが出力されているようですね…。これなんとかならんのかなあ。
マストドンにログインしたあとユーザー設定>管理>sidekiqとかでも見れます。メールの設定が誤っていた場合はここにメール再送信キューが堆積されていました。
最終更新日 : 2018/05/27 ついーと