時流に乗っかって、Mastodonサーバを構築してみました。
Mastodonとはなんぞや?だとか、その使い方などなどは他にお任せします。
ここでは、あくまで構築とカスタマイズの方法と、つまづいたところについて書いていきます。
後続の方々の参考になればと思います。
ちなみに、わたしが構築したMastodonインスタンスがこちら↓
Kurosawadon - https://kurosawa-ruby.xyz
【なんでこんなインスタンス作ったのか?】
わたしが主催のひとりを務めるボードゲームサークルのメンバーと、こんな話をしたからです。
「MastodonってRubyで作られてるみたいだから、黒澤ルビィちゃん仕様のMastodonインスタンス...Kurosawadonってあったらおもしろいですね。サーバ建ててみますかw」ちなみにこの話、やば珈琲 沼津店でしてました。
たまたまサークルの定例会で沼津に行ってた時だったので。
まぁこの時は冗談半分だったのですが、
「まぁおもしろそうだし、やってみようかな」
と思い立ち、3日後の2017/05/02(火)の夜から構築に取りかかりました。
【構築にかかった時間とお金】
- 構築:10日
- カスタマイズ:4日
うまく行けばもう少し早くいける気がします。
GWと土日で7日ほどお休みがありましたが、4日は構築作業をほとんどやってません。
休日は8時間、平日は3時間くらい費やしてる気がします。
そう考えると、トラブルシュートに費やした時間も含めると概算で
- 構築:34時間
- カスタマイズ:14時間
- 合計:48時間
自分としてはかかりすぎてると思いますので、スキルが高ければも少し早い気がします。
今回構築時に使用したもののは、これまでほとんど触ったことすらないものばかりだったので、それでだいぶ苦戦した感あります。
- ドメイン取得費用:30円
- サーバ初期費用:1080円
- サーバ利用費月額2ヶ月分:1370円
- 合計:2480円
さくらVPSは最小の1コア、メモリ512MB、ストレージ(SSD)20GBにしました。
そんなハイスペックにしても仕方がないしね。
気になるのは、SNSですからメディア関係で容量がバカスカ増えないか...ということです。
もしそうなった場合、スケールアップか外部ストレージを用意しなければなりません。
長く運用しようとした場合、将来の懸案事項になりますので要注意。
とりあえず、毎月かかっても痛くない金額に抑える方を優先した結果です。
【構築手順】
基本的にはここを参考に進めていました。
さくらの VPS + CentOS7 で 俺専用 Mastodon インスタンスを立ててみた話
丸投げ感丸出しですが、すでにあるものを書き写しても仕方がないし。
ただし、自分の場合はこの通りにできなかったところがあるので、そこを書こうと思います。
当たり前ですが、ドメイン取得を最初にやりました。
今回は黒澤ルビィちゃん仕様にするのが目的でしたので、ドメインを取得して独自ドメインにしたかったのです。
安かったので、.xyzドメインにしました。
よくエロに使われるドメインらしいですが、どーでもいいです。
xyzはカクテルのxyz、もしくは座標軸ということで。
firewalld-cmdは、
を解放しています
/etc/ssh/sshd_config については、
- SSHのポート番号変更
- PermitRootLogin yes → noへの変更
だけやりました。
SELinuxは無効化せず、デフォルト設定にしました。
けっこう皆さん無効化してるようですが、問題がなければいじる必要もないかなと思いますので。
メール関連の設定は一旦スキップし、一通り構築が完了してMastodonの起動が確認できた後に実施しました。
まずは起動できることを確認するのが優先と考えたからです。
順番を変えたことによる問題は特になかったように感じました。
ちなみに、メール送信の外部サービスはSparkPostではなく、SendGridを使用しました。
その詳細は後ほど。
nginxのconfファイル(上記サイトの「/etc/nginx/conf.d/mastodon.example.com.conf」と記述されてるもの)ですが、1行だけ変えました。
server {...(中略)...root /home/mastodon/live/public;
...(以下略)
このrootで指定するフォルダがnginxでの公開フォルダに該当するわけですが、わたしは下記設定にしました。
root /home/mastodon//public;
これがなんでか、という話なのですが、ここのパスを当初
root /opt/mastodon/...;
と読み違えてしまい、「そんなフォルダないじゃん」って思ってしまったからです。
「/opt/mastodon/public」なら存在するんですよね。
すでに上記設定で進めてしまい、問題なく動いてしまってるので、今さら変えたくないなぁ...というのが本音です。
フツーは変えなくていいはずです。
しかし、「/home/mastodon/live/public」なんてフォルダもないんですよね...どういうことなんですかね?
nginxを今回初めて使ったわたしには分からないところです。
上記ページでは最終的に新規登録できないように設定していますが、わたしは一般公開を目論んでいましたので、これは実施しませんでした。
シングルユーザーモードも同様。
【つまづいたところ】
1. ひと通りの構築が完了し「docker-compose up -d」を実行しても、MastodonのWebページが意図した通りに表示されない (500.htmlのページが表示される)。
「docker-compose logs -f」を確認しながら、Mastodonのページ(わたしの場合はhttp://kurosawa-ruby.xyz)にアクセスしても、下記メッセージが出力されました。
「/opt/mastodon/public」なら存在するんですよね。
すでに上記設定で進めてしまい、問題なく動いてしまってるので、今さら変えたくないなぁ...というのが本音です。
フツーは変えなくていいはずです。
しかし、「/home/mastodon/live/public」なんてフォルダもないんですよね...どういうことなんですかね?
nginxを今回初めて使ったわたしには分からないところです。
上記ページでは最終的に新規登録できないように設定していますが、わたしは一般公開を目論んでいましたので、これは実施しませんでした。
シングルユーザーモードも同様。
【つまづいたところ】
1. ひと通りの構築が完了し「docker-compose up -d」を実行しても、MastodonのWebページが意図した通りに表示されない (500.htmlのページが表示される)。
postgreSQLも使い慣れないから難しいな...
— ノーウェル@30歳SE (@NowellGartelt) 2017年5月6日
「docker-compose logs -f」を確認しながら、Mastodonのページ(わたしの場合はhttp://kurosawa-ruby.xyz)にアクセスしても、下記メッセージが出力されました。
psql: could not connect to server: No such file or directoryIs the server running locally and acceptingconnections on Unix domain socket "/tmp/.s.PGSQL.5432"?
これは、わたしがDockerというものを正しく理解していなかったために起きたことだと思います。
当初、Dockerとはただの制御システムのようなもので、中に入れるアプリケーション(コンテナ)は個別にインストールする必要があるのだと思ってました。
そのため、docker-engineとdocker-composeをインストールし、DB周りの設定をする際に、別にPostgreSQLをインストールする必要があるのだと思ってしまったのでした。
ところが、Dockerについてちゃんと調べてみると、Dockerを入れればPostgreSQLもコンテナとして含まれるようではありませんか。
なので、その段階で別にインストールしたPostgreSQLは削除しました。
...が、こんな手順を実施してしまったのがいけなかったようです。
その後構築が完了し、いざMasrtodon起動!という時に、上記メッセージが出て一向に起動できない事態に陥りました。
結局、いくら調べても解決策が分からないし、途中で違った手順やっちゃったしということで、ここでOSを再インストールする決意をしました。
ここの調査と試行錯誤で2日ほど費やしました...。
再インストールして、上記サイトの手順通りに構築したらちゃんとできましたので、やはり別にPostgreSQLのインストール&アンインストールをしたのがマズかったようです。
詳細な原因は分かりません。。。
2. メール関連の設定がうまくいかない(メールが飛ばない)。
2017/05/10、ようやくMastodonの起動が確認できました。
で、いざアカウント登録のためのメール関連の設定をしよう!というところでつまづきました。
当初、上記サイトと同様に「SparkPost」を使おうと考え、ユーザ登録もしました。
...が、ドメイン関連の登録をしようとするとどーもエラーで弾かれる。
で、調べてみたところこんな情報が転がってた。
当初、Dockerとはただの制御システムのようなもので、中に入れるアプリケーション(コンテナ)は個別にインストールする必要があるのだと思ってました。
そのため、docker-engineとdocker-composeをインストールし、DB周りの設定をする際に、別にPostgreSQLをインストールする必要があるのだと思ってしまったのでした。
ところが、Dockerについてちゃんと調べてみると、Dockerを入れればPostgreSQLもコンテナとして含まれるようではありませんか。
なので、その段階で別にインストールしたPostgreSQLは削除しました。
...が、こんな手順を実施してしまったのがいけなかったようです。
その後構築が完了し、いざMasrtodon起動!という時に、上記メッセージが出て一向に起動できない事態に陥りました。
結局、いくら調べても解決策が分からないし、途中で違った手順やっちゃったしということで、ここでOSを再インストールする決意をしました。
PostgreSQLが接続できない問題がいくら調べても解決できず、あれこれいじりすぎたので、構築したサーバをぶっ潰しました
— ノーウェル@30歳SE (@NowellGartelt) 2017年5月9日
ここの調査と試行錯誤で2日ほど費やしました...。
再インストールして、上記サイトの手順通りに構築したらちゃんとできましたので、やはり別にPostgreSQLのインストール&アンインストールをしたのがマズかったようです。
詳細な原因は分かりません。。。
2. メール関連の設定がうまくいかない(メールが飛ばない)。
2017/05/10、ようやくMastodonの起動が確認できました。
で、いざアカウント登録のためのメール関連の設定をしよう!というところでつまづきました。
当初、上記サイトと同様に「SparkPost」を使おうと考え、ユーザ登録もしました。
...が、ドメイン関連の登録をしようとするとどーもエラーで弾かれる。
で、調べてみたところこんな情報が転がってた。
.env.production.sampleにも書いてあったけど、SparkPost使えば?ってさ。SparkPostは.xyzに対してドメイン差別を敢行しているようなのでやめた。
...うおおいこのやろう!
だからドメイン登録できなかったのか、ざっけんな!
さてじゃあどうしよっかな?と思ったものの、そんなにアテがあるわけでもないので、上記でも言及されてるSendGridを使うことにしました。
調べたところ、SendGrid公式でもこんなページがあったし。
MastodonのメールサーバにSendGridを使う際のポイント
で、SendGridの審査に通過待ちで1日経った後、書いてある通りに設定してみたが、メールが飛ばない。。。
だからドメイン登録できなかったのか、ざっけんな!
さてじゃあどうしよっかな?と思ったものの、そんなにアテがあるわけでもないので、上記でも言及されてるSendGridを使うことにしました。
調べたところ、SendGrid公式でもこんなページがあったし。
MastodonのメールサーバにSendGridを使う際のポイント
で、SendGridの審査に通過待ちで1日経った後、書いてある通りに設定してみたが、メールが飛ばない。。。
みたいなメッセージが出続け、一向に送れませんでした。
上記ブログ内の設定値通りに設定はしてるし、いったい何が問題なんだろう?とかなり頭を抱えました。
ところが、何をしたからかは分かりませんが、ふといきなりメールが届くようになったのです。
もしかしたらですが、「.env.production」の値を変更した後で、
上記ブログ内の設定値通りに設定はしてるし、いったい何が問題なんだろう?とかなり頭を抱えました。
SendGridとの連携が全然うまくいかない...
— ノーウェル@30歳SE (@NowellGartelt) 2017年5月12日
ところが、何をしたからかは分かりませんが、ふといきなりメールが届くようになったのです。
もしかしたらですが、「.env.production」の値を変更した後で、
# docker-compose stop# docker-compose build# docker-compose up -d
と実行したからかもしれません。
記憶にはないのですが。。。
後で似たような問題に引っかかって、その時の対処法がこれ+αだったからです。
どうやらDockerの場合、毎回設定値を変更した場合、stop→build→upしないと反映されないようなのです。
とはいえ、この問題の真相は謎のままです...。
ここまででようやく通常どおり使用できるようになりました。
長くなりましたので、カスタマイズ編は次回に。
記憶にはないのですが。。。
後で似たような問題に引っかかって、その時の対処法がこれ+αだったからです。
どうやらDockerの場合、毎回設定値を変更した場合、stop→build→upしないと反映されないようなのです。
とはいえ、この問題の真相は謎のままです...。
ここまででようやく通常どおり使用できるようになりました。
よっしゃここまで来た!ここまで長かった... pic.twitter.com/26cSobkFor
— ノーウェル@30歳SE (@NowellGartelt) 2017年5月12日
長くなりましたので、カスタマイズ編は次回に。