Mastodon自鯖構築

やる気がない人の自鯖構築。自分用備忘録。
「技術記事、あったほうが助かるけど自分が書くのはなんか怖くてやだな……」と思っていたけど、2回インストールすることになり、初回のメモを残してなかったことを後悔したので今回は残す。
なので変なところあっても許してください、優しくしてください。

前提

Xserverで4GBのUbuntuポチっとして、基本的には公式セットアップ手順通りに進めた。
kmyblueフォークを使用。一部kmyblue特有?の手順もあるのでkmyblueのセットアップ手順も確認する。
英語ザコ人間なのでGoogleくんのページ翻訳機能に頼りまくった。(たまに単語の位置がおかしくて手順ミスりそうなので英語に戻すこともある)
とりあえず自分が困ったとこだけノリと勢いで書いてる。

事の始まり、サブドメイン使いまわし

読まなくていい。

少し前にHostodonでMastodon鯖作り、絵文字リアクションできないことをなぜか忘れてて「ん~~~解約!」て、あほなことした後 410 gone とかまともに対応せず放置。
その後Misskey鯖をXserverのイメージで作ってたけど、「ほかの人の絵文字みたい~~~!」とか「所々絵文字がハートになる~~~!!!」とか不満が出てきた。
そんな中、鯖立て数日後にkmyblueフォークの存在を知ってしばらく我慢したけど、結局居ても立っても居られなくなり勢いでもう一鯖ポチリ。
ドメインは以前Hostodonで作ったサブドメインを使用するか、と特に問題ないかとか調べもせずガンガン進める。
「うぇ~~~い??」となりつつもなんとか建て終わり、絵文字ごそっと入れ、アカウントどかっと作り、「さあ引っ越すぞ!でも他の鯖から見たらどんな感じかな??」と確認したところ、Hostodon時代の残留思念たちが出てきましたとさ。
おしまい。

そんなこんなでせっかく建てた鯖を爆破。(爆破も残留思念たちのせいか一部上手くいかなかったがごり押しで終わらせた)
そして今回はちゃんと410 gone を設定。
作った鯖を新しいサブドメインに引っ越しできるのかは調べてもよくわからん。
うん、諦めて一から作り直そう……と心に決めるも、
「あれ、1回目ここどうやってクリアしたっけ?? は???」
……そして今に至る。
まあ三度目はないんだろうけど……と思うが、フラグでしかないのでメモを残すのだった……。

yarn

公式セットアップ手順はyarn v1を使用している。

corepack enable
yarn set version classic

多分このまま、mastodonのソースをgitからクローンした後、
yarn install --pure-lockfileってすると以下のようなエラーが出る。(違ったかも?ログ取ってないのでわからん……)

Usage: yarn [options]

yarn: error: no such option: --pure-lockfile

Mastodon4かな?からyarnもv4を使用することになったっぽい


なので、以下に読み替える必要あり。

corepack enable
yarn set version stable

さあ今度こそyarn install --pure-lockfileってすると、今度はv4にはそのオプションないって言われる。(違ったかもry)

unknown syntax error: unsupported option name ("--pure-lockfile").

$ yarn install [--json] [--immutable] [--immutable-cache] [--check-cache] [--inline-builds] [--mode #0]

これについては何すると良いかはよくわからなかった。
とりあえず結論を先に述べるとオプション外してyarn install実行しただけで動きはする。

--pure-lockfileオプションがyarn.lockを生成しないのでパッケージのバージョン管理がどうこうみたいな話らしい。
なんかnpmでも同じような概念あった気がするけど雰囲気でしかやってないので詳細は分からん。

「じゃあそのオプションと同等の働きするものは?」
「わからん」

--frozen-lockfileてのも上のオプションには表示されてないし……試す前にyarn install叩いちゃったし……。
とりあえずやる気がないのでこのままいくことにした。

mastodonユーザでsudoしたい

パスワード聞かれるけどパスワードないしよくわからん……となったので、パスワード聞かないようにした。
セキュリティ上どうなのかはわからん。わからん……。

$EDITORなんてらで確認するやつ

書いてある通りのコマンドを叩くと、権限がないから見れないって言われる。

$ $EDITOR /etc/systemd/system/mastodon-*.service
-bash: /etc/systemd/system/mastodon-sidekiq.service: 許可がありません

雑に調べてもよくわからなかったので「このコマンド何してるん?」てChatGPTに聞いてみたらめちゃくちゃちゃんと答えてくれた。便利。
$EDITORという変数に設定されているテキストエディタかな?で、/etc/systemd/system/mastodon-*.serviceに該当するファイルを見ようとしているらしい。
で、私の環境では多分$EDITORが設定されていなかったぽくてファイル検索して権限エラーになった……?
とりあえずそれならばとvim /etc/systemd/system/mastodon-*.serviceてやったらすべてのファイルちゃんと見れた。

サービス起動後、画面が表示されない

心か……。

同じ事象起きてる方発見。

www-dataくんをmastodonグループに入れてあげることで権限を与えると良いみたい。

でたわね。

Cloudflare R2の参考記事

これに関しては完全に自分用のメモである。感謝。謝謝。


ElasticsearchとSudachi

公式セットアップ手順を参考にjdkとElasticsearchリポジトリの追加。
apt update後、インストールできるElasticsearchのバージョンを確認。

apt list elasticsearch -a

インストールできるバージョンの中から、Sudachiの対応バージョンと一致するものを確認。
するのだが、私はあほなので割とそこにたどり着くまで時間かかった。

まずSudachiのドキュメントからReleasesを見る。
多分きっとメイビーAssetsにElasticSearchのバージョン別のzipファイルがあるので、そこからどのバージョンのElasticsearchをインストールするか決める。

決めたらバージョン指定してインストール。ついでに更新対策で固定。

apt install elasticsearch=7.17.10
apt-mark hold elasticsearch

インストールしたら有効化して.env.productionに設定記載。(mastodonユーザでうねうねしてたliveの中のファイル)
1回目の構築の時、ES_PRESETはそのままにして起動したら
「single_node_clusterにしなさいよぉ!!」
て管理画面で怒られたので今回はとりあえず「single_node_cluster」にした。
はい、ちゃんと調べてないです。クラスター???ノード???何それ???

Elastic用の認証アカウント設定?は多分おひとり様サーバーだといらないので放置。
(2回目の時勘違いして途中まで進めたし、こいつやったせいかどっか上手くいかないし、諦めて無効化した後.env.productionにユーザとかの設定残しちゃっててインデックス上手く作れないし、で泣いてた)

で、サービス再起動する前に先ほど調べたSudachiをインストール。
さっきのSudachiのドキュメントの手順見ながら。
インストールするブツはさっきバージョン合わせるときに見たzipファイル。(リンクアドレスコピーすればURL取れそう。)

辞書アーカイブはリンクに従って飛んで、「Click here for pre-built dictionaries.」のhereから飛んで、欲しいのをwgetコマンドとかでダウンロードしてunzipで展開。
ただkmyblueフォークの場合(なのかな?)、辞書ファイルは/etc/elasticsearch/sudachiに格納しないといけないようなので注意。
多分以下を参考にした感じ、解凍してできた.dicファイルをsystem_core.dicてファイル名にして/etc/elasticsearch/sudachiに置けばよさそう?

あとはkmyblueフォークの手順書の通りに、config書いてあげてMastodonサービスを再起動。
最後にMastodon公式のセットアップ手順のほう見て、インデックス作成で終わり、のはず……。
(1回目は辞書の置き場よくわからず、2回目はアカウント周りで四苦八苦し、だったので明確な手順がわからない……。)

以上

とりあえず困ったところは以上。
linux触ったことあるかないかだけでも結構やりやすさの差が出てきそうな気もする。
まあ基本は書いてあることやるだけなんだけど、ファイル編集どうやるのかとか知らなかったらえぐい時間かかりそう。
私は仕事でlinuxやらdockerやらちょっとだけ触ったことあったので多少その時の経験が生きた気もする。
まあなんとか他の鯖から見てもぶちこわれていない鯖を建てられたのでよしとする。よし。
今回完全自力で入れたので運用が怖い。めんどくさがりの人間なんだ私は……。

気になってるのはLet’s Encryptの自動更新。
cronでやってるのよく見かけたけど、certbot.timerてのがなんか毎日チェックしているようにも見える?
とりあえずちょこちょこ更新見守るかって感じ。
多分更新されてなくても何日か前にメールも来る、よね?

kmyblueどうなの?

最高!最高最高最高!!!私の求めていた世界!!!!!
検索とかリスト機能に関しては多分fedibirdが個人的に合っている気がするので、その点は併用かなって思ってるけど全然問題ない。良い。
AndroidユーザーなのでSubway TooterやZone Pane使っているけど、どちらも別アカウントでリアクション飛ばす、とかができるので、Fedibirdで閲覧してリアクションだけ自鯖で飛ばす、みたいな使い方してる。

個人的最高ポイントは、

  • 絵文字リアクション(スタンプ)複数付けることができる
  • 絵文字リアクション(スタンプ)と別に「いいね」ができる
  • Mastodonなのでクライアントアプリが各機能しっかり対応してくれている(Misskeyはアップデートで結構変わるのか対応されていない部分も結構ある気がする)
  • 自分の投稿や他鯖のフォロイー?につけられた他鯖のリアクションが表示できる(フォロイーじゃないと表示できない?気がする、まだよくわからん)

です。これができるだけでも全然違う。
つってもまだ使って2週間くらいの感想なので、今後どう思うかはわからない。
ただ、今は「睡眠時間削ってでも建ててよかった!」と思っている。

あとはfaviconとかをもうちょっといじってみたい。(今はPCブラウザでしか変わっていない。謎。)