じゃけれべ

しゃーぷにくびーふ

そらいろさん(しおしゃけやきに)ってひとのサイトです。ζ*'ヮ')ζ<にょー

マストドンのインスタンスを立てました

この情報は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/systemchmodかけたら案の定うまくいったりしたっていう話です。

ここでサービス再起動をかけました。覚書です。

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 ついーと