私のお一人様Mastodonサーバ運用開始から1周年

Overview

Aries( https://mstdn.asterism.xyz/@aries )です。

私はfediverseの片隅でお一人様Mastodonサーバ https://mstdn.asterism.xyz (以降mstdn鯖)とお一人様Pleromaサーバ https://pl.asterism.xyz (以降pl鯖)を運用しています。

8/18で私のお一人様Mastodonサーバが運用一周年となるため、キリもいいし自分語り記事でも書きます。

こんなに適当で無知なヤツでも続けられるのか!とか思ってもらえれば。

fediverseへの参加

2018年8月、この頃はTwitterのstreaming APIが元々の宣言通り閉鎖されるとの事でMastodonがTwitterのトレンドに上がっていましたね。

私は当時Twitterクライアントユーザではなく、公式WEBばかり使っていたのでstreaming APIが無くなることで何かしら不便を被る人ではありませんでしたが、一昨年2017年4月に若干流行って一瞬で(私の)視界から消えたMastodonの名前は覚えていました。

最初に日本で話題に上がった頃、ちょうどInterop2017でMastodon開発者のEugen Rochko氏のskype講演があり「他の講演はあんまり面白くなさそうだけどこれは気になるなー」と当時新入社員で強制参加だったわりに私は乗り気でいました。

ですが色々な事情により残念ながら見る事もできず、なんというかタイミングを逃した感というか、一気に冷めてしまい(勿論知ろうと思えば検索窓にマストドンと入力するだけなんですが)たまにPawooがTwitterトレンドに上がるのを見ては「今更参加するのもなぁ」と思っておりました。

ちなみにここまでで私はMastodonがOstatus(私がMastodonの名前を知った当時はまだActivityPub実装前だったかと思います)というプロトコルを使うOSSなサーバソフトウェアで、色んなサーバとのやり取りができる、ということすら知りません。

そんな私がなぜ2018年8月になってわざわざfediverseに参加したかというと、実は2017年秋頃にAWSのアカウントを自分用に取得しまして。

1年間の無料枠で、WordPressやらNextCloudやらと色々建てては潰してとしていました。

元々ConoHaでWordPress(kusanagi)を使ったブログを学生時代から続けていた事やオフィスオンプレのインフラ系エンジニアとして働くうちに「お仕事以外のサーバやらサイトをもっと構築/運用したい」「Windowsそろそろ飽きた」「学生時代からの成長ほぼ無いな?」とか色々思う所があり。

そういった事情と、再びトレンドに現れた「マストドン」を見てjpやpawooへ参加したものの今ひとつ楽しめずにいたという事情が重なり自前のサーバを建てました。

「そろそろAWSの1年間無料枠無くなっちゃうしステップアップしてもっと色々なサービスを使ってなにか作りたい」という希望にMastodonはピッタリでした。

構築後の弊サーバ構成変遷

昔の構成図とか残ってない(思い出しながら描くのが辛い)ので文章で。

あまりに細かくて以下に書いてないものも実はあったり。(一瞬Caddy使ったりとかElasticSearch試したりとか)

最初期

dockerを使うのはほぼ初めてでしたが、最初から公式のdocker-composeを使っていました。

使っていたAWSのサービスはEC2, S3, RDS, Elasticache, SESとお一人様にしてはかなり盛り盛りな感じ。「使ってみたかった」というのが大きかったのです。

2017年の日付になっているMastodon構築記事なんかを見て「メディアはオブジェクトストレージに分けておいたほうがいい」なんていうのを複数見かけたり、私自身データベースの扱いには全く(wordpress使ってたくせにね)無知だったため楽をするためにRDSを使ったり、そんな思いも混じってます。

Mastodonそのものは単一のEC2インスタンス上で動いていました。

ちなみにわざわざRDS, Elasticacheを使っていたのにdocker-compose.ymlは公式のまま改変せず使っていました。(この辺りで私の知識レベルがよく分かる……。度々相談に乗っていただいているお知り合いの鯖缶さんいつもありがとうございます)

そんな状態でいた弊鯖ですが、一度目の試練が訪れます。

AWS無料期間の終焉

上の方で書きましたが、AWSの無料枠縮小が迫っていました。

薄給ですのでなんとかしなきゃなぁとか思い色々安くしようと、しかし一度マネージドサービスの楽度合いを知ってしまった私は悩んだ末に、

  • DB何も分からんマンのためRDSは継続
  • redisは消えてもわりと大丈夫そうなのでdocker上のを使うように

この頃は既にTwitterをほぼ使っておらず、Mastodonをメインにしておりました。

EC2スペックアップ

Mastodonは決して軽いソフトではありません。

よくある1vCPU/RAM1GBではswap無しだときついです。(多分)(でもそのマシンでビルドしなければ動きそう)

またEC2の場合、ディスクとして使われるEBSにはIOの制限があります。

例えばswapを設定しておき、「EC2のサイズを1段階落としてやるぜ!」みたいなのは咎められちゃうわけですね。

この制限に引っかかると、CPU使用率なんかは余裕あるのに全くサーバの応答がなくSSHすらできない、みたいな状況になります。

当時t2.microを使っており、数日置きにサーバを落としてしまっていた私はt2より安いt3の登場とフォローしている鯖缶さんからの助言でt3.smallにすることにしました。

dockerのお勉強し始めたのはこの頃ですね。

公式のymlを改変して手元でbuildするのをしないようにしたり、不要なサービス止めたり。

確か11月頃。

RDSからの脱却、cdnの導入

時間が飛んで4月頃。

旧来のブログを潰しこのサイトを作ったり、mailuやnextcloud,jellyfinなんかを立てたり潰したり繰り返していた頃です。

サーバ台、やっぱり高いなと思うようになってきました。

個人でやっていてかつお一人様、そこまですることもないんじゃないかと思い切ってRDSを辞めてDBもコンテナ上に立てました。

t3.small,もとよりそこそこスペックに余裕があったのもあり軽快に動いていました。やっぱりmicroでも普通に動くんじゃないかなとか思い始めたのもこの頃。

で、その他の節約案として直接s3見るのをやめてメディア用にcdnも導入しました。

CFもCfも両方使いましたが無料なので結局Cfに。

mailgun利用

それまでAWS SESからgmailに投げるようにしてましたが、上の段で書いてるmailuに移したり、んで結局消したり。

そんな事をした結果独自ドメインのメールサービスは最終的にGsuiteに移したんですが、その頃名前だけは聞いたことがあったmailgunが気になったためMastodonとPleromaで使わせてるSMTPサーバはmailgunにしてあります。

S3からwasabiへ

ブログに書いたよなーとか思いながら過去投稿漁ってたけど見つからなかった。

Mastodonのメディア用オブジェクトストレージをS3+Cloudflareからwasabi+cloudflareに変えました。

Digital Oceanのとかじゃないのは、私がPCのバックアップ用途に使いたかったからです。

他サービスだと容量と通信料金が厳しいですが、wasabiは1TBまで$6/月、かつ転送量による課金がありません。

その代わりアジア圏のリージョン無いから遅いし障害多いってのはあるけどね。

Pleroma運用開始

元々pl鯖はlightsailで動かしていました。

Mastodonと違いドキュメントが今ひとつというのもあり、そこそこ構築に苦労したのを覚えています。

ちなみに人生はじめてのOSSへのコントリビュートはPleromaのドキュメント修正でした。

docker swarm導入

この辺の記事

https://blog.asterism.xyz/posts/2019-07-31/

https://blog.asterism.xyz/posts/2019-08-01/

https://blog.asterism.xyz/posts/2019-08-09/

スポットインスタンスの導入はかなり大きかったです。

Kubeだとどうだろ。やっぱり高機能な分オーバーヘッドも大きいだろうし、お一人様でやるには向かないんだろうか。

分散、について思うことを適当に

話題大きく変わります。記事分割するつもりでしたが方向変換。

分散って何よ

各所で分散過激派により語られている お一人様最強!でも現実的には今はまだきついよね… というやつ、私もおおむね同意見。

そもそも私がインスタンス建てた理由の1つもその辺りのやる気のないアナーキスト感が気に入ったからというのもあり。

ただまぁMastodon建てたり、Mastodonよりは(英語読めるなら)楽なPleromaでもインフラ周りの知識が薄い方には大分きついものがあるのかなぁと。

なおMisskeyはそもそもお一人様には向いてないんじゃない?という印象なので手を出してないです。あれはローカルのやり取りがあるから楽しいんじゃないかなぁ。

その他のAP実装も触っていません。ただKibouは結構気になってます。

話を戻し。

例えば 分散SNSの考え方に感銘を受けたがしかし特にWebサービスへの知識が無い方 がサーバを建てようとして、用語の知識が無い中公式ドキュメントを読み、例えばdockerってなによ?とかredisってなんじゃ?とかリバースプロキシって何?直接443では動かせないの?みたいな疑問が山とでてくるわけで( 全て私の話です )

twitterやら、各種Mastodon全文検索サービスから探すと、「Mastodonインスタンス建てるか!」「やっぱり駄目だったよ…」となっている方をちょいちょい見かけます。

例えば鯖缶工場だとか、あるいは建てたい方が所属しているサーバの鯖缶さんがお手伝いされて最終的になんとかなった方も結構見かけるのですがねぇ。

そんな風景を見ていると、やっぱり厳しいものがあるよなぁ……。なんて。

適当に信頼できる鯖缶のサーバ複数に所属するのが現実的な最適解なのかなーと。

勿論建てられる人でかつそれを望む人であればそれも1つだと思います。

分散SNSの「分散」、まぁ色々意味はあると思いますが(ex: インフラとか。分散SNSとか言う割にAWS利用者率高いよね?)わたしは一番重要なのは 「ユーザ管理」の分散 だと思っています。

そういう意味では、正直一人のユーザが複数のサーバに登録して、かつ使い分けはあまり考えずにフォローエクスポート/インポートを適度に行うとかそういう使い方だけでも最低限の「分散」はできてるよなーと。(勿論もっと色々できることや気にするべきことはあるんだけれども)

分散過激派の方につられて私も一時期分散過激派っぽい発言が増えてましたが、最近はそんな風に思ってます。

まぁだからといって私はお一人様をやめるつもりは今の所一切無いのですが。

分散SNSは最終的に全ユーザがお一人様のように振る舞えるのがゴールなのかなーとか。

例えばMastodonホスティングサービスとか、さくらのスタートアップスクリプトだとか、 ドメインとここのサービスのアカウントさえあれば建てられる! っていうのはかなり理想に近いんですよね。

運用がもっと楽になればいいなーとも思うのですが、(アプデとか以外にもモデレーション作業とかね)そこまで便利にしちゃうと「分散」であることの利点に瑕がつくことにもなるので。

モデレーション

言葉が出たので次はモデレーションについて。

ユーザの管理をしなくていいお一人様しか運用したことがないですが、それでも「分散」故の悪意への弱さといいますか。

フォロ爆だとか、スパムだとか、まぁその辺。

また例えばユーザ登録できる状態にしている鯖だと大量にアカウント作られてそこを起点に色々悪質なことをされるだとか……。

Mastodonのissue見てるとなんかv3.0.0でスパム対策機能が来そうですしそれに期待かなぁ…。

リレーとかハッシュタグ

話題を変えて検索とかリレーとかハッシュタグの話を。

雪餅さんのリレー、のえるさんのハッシュタグリレーの2つに登録させていただいています。素晴らしいサービスをありがとうございます!

たまにFTLを眺めてHTLで話題になってるけど何のことかわからない話題を追ったりとかタグ検索したりとか、ここを通して新しい鯖缶を見かけたりとか。リレーに助けられています。

わたしのMastodon利用は基本HTLなのですが、お一人様でリレーなしだとHTL以外の情報収集が他のサーバにアカウントを作るしか無いため上記のような使い方ができるようになるリレーサービスはありがたいのですが、ある種こういうのって中央集権的だよなーとか思ったり。

タグについては、分散したままで選ぶことができるほぼ唯一の解決策なんかなーとか。

そもそもざぼてくだとか顔面工事がおもちゃにされてるのをちょいちょい見かけててるので何をやろうとしてもまぁ分散である以上色々なものがくっついてくるよなぁとは思う。

まー私が使うタグなんて基本ゲーム関連なので、そういう意味では標的にはなりづらいんかな。

ただ昨日とか私の鯖が片方落ちてたのもあって #鯖缶さん向けのお知らせタグって無いですか ってタグ付けて投稿しましたが、もしやったらまたおもちゃにされうるよなぁとかこの記事書いてて後悔してます。

リストだとか、1ユーザとしての使い方について

MastodonやPleromaだとリスト機能も独特ですね。

現状Mastodonではリスト機能を使うためにはフォローしておく必要があります。

これがなかなか面倒で、例えば

  • 好きなイラストレーターさんの新作投稿があったらBTしたい
  • が、その人が書いたイラストが好きなのであってその人をHTLから眺めたいわけではない…
  • あるいはあのOSSの作者さんの投稿を見たいけど、別に普段からHTLで眺めたいわけではない…

みたいな

こんなとき現状では、

  • とりあえず全員フォロー
  • 普段見る用のHTLって名前のリストを作り、全員入れる
  • そこから分類して、絵師さんリストとかデベロッパーリストとか作る

って感じになります。

私は今後こんな使い方を基本にしていく予定。

comments powered by Disqus