Skip to content

Instantly share code, notes, and snippets.

@yopodo
Last active December 22, 2022 12:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yopodo/ce17249d4ef564d30c8502dead0c635a to your computer and use it in GitHub Desktop.
Save yopodo/ce17249d4ef564d30c8502dead0c635a to your computer and use it in GitHub Desktop.

初めまして。
よぽすき~というmisskeyインスタンスを運営しているよぽどです。

この記事はえとねるん Advent Calendar 2022の22日の記事です。
ほかにも沢山の記事があるので見ていってください。

よぽすきを始める時に考えた事

いわゆるインスタンスを始めました系の記事です。
構築手順等はググれば沢山出てきますしすぐに陳腐化してしまうので、この記事ではよぽすきを始める時に何を考えて、どのような選択したのかを書いていこうと思います。

分散SNSやmisskeyとの出会い

もともと大規模な商業SNSには苦手意識がありました。
その理由はそれだけで長文を書いてしまえるのですが記事の本題から反れてしまうので短くまとめると、大規模商業SNSではユーザーと広告主と運営という三者の利害が一致しないという理由が大きいと思います。
広告主や運営から見ると、深く考えずに反射的に感情的になり、情報にアクセスしたり拡散してくれる人が良いユーザーでしょう。
ユーザーからすれば本来触れる必要もない低品質な情報を強制的に見させられることになり、慎重で丁寧に運営しないとすぐに感情的な意見が飛び交うテレビのような地獄の場になってしまいます。
他にも数億単位のユーザーに統一的なルールを適用したり、内部でどんなアルゴリズムが動いているのかユーザーには分からないという問題もあります。
元々は規制アカを持ったりしていたツイ廃(死語)でしたが、実際的にもそのような例は多く見ることになり、SNSそのものを嫌厭するようになりました。

ある時すしすきーさんでmisskeyと出会いました。
マストドンの亜種かなと考えながらgithubのプロジェクトページを見ると、日本語が妙に多く、コードベースからマストドンのフォークではないと知り興味を持ちました。
そしてしばらく使ってみるとサービスとして十分に安定していて高機能で実用的な完成度でした。

前述の大規模商業SNSの構造的な問題を考えている時に、自然にその延長として分散SNSのメリットや存在は知っていました。
自分のようなつよつよ技術者でもなく大金持ちでもない人が実用的な分散SNSのインスタンスを安定的に運営できれば、分散SNSの理念の実証の助けとなるだろうと考え自分でもインスタンスを立てることにしました。

情報収集と方向性と見積

建てると決めたら情報収集です。
特にmisskey hubにお世話になりました。
具体的なソフトウェアの構成等を調べながら持続的に運営できるにはどうしたらいいのかを考えながら構成を決めていきました。
複雑なサービス構成にした場合そのうちメンテナンスができなくなると思いシンプルで把握できる規模感を目指し、
毎月数万円の負担を続けるのは現実的ではないので低コストを目指しました。
この段階でリソースに余裕があれば解放することも考えました。

misskeyにはサーバメトリクスというサーバーの負荷やリソースを見る事ができる機能があります。
いくつかのインスタンスで構成を聞いたり(お世話になりました)、サーバーメトリクスを見たりして必要なリソースを検討していきました。
もちろん深いデータは得られませんが、この段階で大規模インスタンスでなければインテルの比較的新しい世代のCPUで4コア程度、メモリは8GB程度あれば最低限動くのかな…といった程度に見積る事ができました。
シンプルさの見積は難しいですが、サーバーがいきなり壊れて1からOSを入れなおして設定するとしても、それが1日以内に完了できる程度を目安としました。

サーバーをどこに置くか

目安が決まったら実際にサーバーをどこに置くかを考えました。
VPSとクラウドと自宅サーバー、それぞれのメリットデメリットを考えました。

クラウドは細かく機能が分割されていて、それぞれの信頼性は高く、簡単に冗長化やスケールアップ、スケールアウトをすることができます。
しかしその分コストが高く、従量課金制で必要コストの予測が難しいので、個人が長期的に運用するには適さないと考えて採用しませんでした。

VPSはクラウドと比較して安めで定額制です。 しかし主要なサービスを見てみると、見積もった要求スペック(4C8GB)だと大体月額50ドル前後で思ったより安くありませんでした、年間600ドルはざっくり8万円です。
ストレージが少な目なので別途オブジェクトストレージが必要になり、その料金体系が少し分かりにくい物が多く従量課金制なのもマイナスポイント。

またネットワークから計算リソースからストレージまでコミコミの料金プランということは個別には管理されていないという事でもあり、個別機能の調子が悪くなる可能性がある、調子が悪くなった時の対応が明確ではない、という点も気になりました。
実際すしすきーさんでも、サーバーのリソース消費量的には問題がないのになぜかたまに調子が悪くなって数時間アクセスできなくなる、といった現象が発生しており安定性に不安がありました。

一方で別にネットワーク接続を考える必要がなく、毎日スナップショットをとれるといった機能も提供されていて管理面の負担は少なくなりそうでした。

自宅サーバーは初期コストが高く設置に場所を取りますが、維持費が電気代とネットワーク代程度でそれほど高くないです。
・自宅には既にフレッツ回線が引いてありネットワークコストを無視
・アイドル消費電力は30-40W、1KWh30円で毎月1000円程度
・要求スペックを考えるとハードウェアコストは10万円程度
という見積で3年程運用した場合コストは14万円と(1000*36+100000=14万円!?)VPSを下回りハードウェア性能はより高くなります。
またなんとなく調子が悪くなった時に電源断によりハードリセットも可能です。
自宅サーバーであれば副次的に自分の生活圏の近くにサーバーが置かれるのでレスポンスが早くなることが期待できます。 一方でストレージの信頼性はそれほど高くなく、こまめな掃除が必要で、壊れた場合に特別な対応が必要というデメリットがあります。

結局はコスト的な理由とハードリセットが可能という点で自宅サーバーをメインに遠隔地にバックアップするためにクラウドやVPSを使うというハイブリッド構成を選びました。

ところでオラクルのクラウドサービスOCIには非常に性能の高い無料枠があります。
armベース4コアに24GBのメモリ、200GBのブロックストレージとmisskeyインスタンスを運用するには十分すぎるスペックで実際に運用している人もいます。
しかしこれは選択しませんでした、なぜかというとクラウドサービスの無料枠はたいていの場合十分なサポートはなく、いきなりBANされたり提供が終了する可能性があるためです。
もしある日突然BANされた場合、代替サーバーを調達するために時間的余裕のない状態で必要リソースやコストを見積もりベンダを選定したり自宅にサーバーを用意するという作業をするか、もしくはサービスを終了するという選択に迫られます。
これは明らかに判断ミスを招く状況ですし、また特定のベンダの特定のサービスを前提にするという事は、前述のように分散型SNSを実証するという目的にも合致しません。
なので今回は選択しませんでしたが、非常に高性能な無料枠なので実験的に立ててみるといった目的には良いと思います。

ドメイン

うまりうまい命名はできないので安直によぽどから取ることにしました。
yopodoでは長いのでyopo。
TLDは悩みだすと止まらなかったので、汎用的に使えそうで1500円程度と比較的安いworkドメインにしました。
APプロトコルのサーバーを頂点に置くのはあまりよくないのでサブドメインを切りました、これにも複数の命名があるようですが文字数が少ないmkにしました。
よぽどさんのみすきーなのでよぽすき~です。
この時はあまり考えこみたくなかったのでworkドメインを扱っていたお名前コムで取りましたが、もっと良いレジストラがあったかもしれません。

ネットワーク

自宅サーバーからどのように接続するか。
問題は名前解決です、普段ネットワークに接続しているIPアドレスでインスタンスを公開すると、自分自身のIPが解決されてしまいヘアピンNAT対応ルーターが必要になります。
サーバー用なルーターを購入する場合追加で数万円の支出が必要になるので現実的ではありません。 クラウドフレアというCDNの使用がmisskey hubで推奨されていたので利用することにしました。
これによりCFがリバースプロキシのように機能してオリジンIPアドレスを隠しつつヘアピNATを解決できました。

しかしインスタンスが他のインスタンスと通信する際自分のIPアドレスが相手に伝わってしまいます。
これはセキュリティ的にはあまりよくないので結局IPアドレスをもう一つ用意することにしました。
プロキシという方法もありますがオーバーヘッドが発生しますし、プロキシサーバーに依存することになるので調子が悪くなった時の対応が明確ではないので選択しませんでした。
自宅にはフレッツ光を引いていて、このサービスはISPと回線が独立していて回線契約はそのままで自由にISPを選択でき、マルチセッション機能もありPPPoE接続を複数同時に張れる非常に柔軟なサービスです。
ISPはインターリンクさんのPPPoE動的IP接続サービスを選びました。
動的IPの方が安く、攻撃された際にアドレスを変更して緩和する事ができると考え動的IPを選択しました。
後述しますが後に一つの不具合の原因となりました。
月額1100円必要コストが増えましたが、サービス構成の複雑さを増すことなくセキュリティ対策もできて、パフォーマンス等にも不足なくちゃんと動いているので満足です。

ハードウェア構成

中古PCやラズパイや新規購入を比較しました。
ラズパイは持っていたのですがスペック不足感は否めず、中古PCはスペックを考えるとそこまで安くはなく信頼性の面で不安があったので新規購入にしました。
・dGPUは電気代がかかるのでiGPU搭載のCPUにする。
・メモリやストレージは変なものは避ける。
・UPSは必要。
・CPUクーラーはノクチュア。
・電源は一番壊れやすいので、普通のブランドの安めの奴で定期的に交換する。

といった感じで諸々10万円以内で収まりました。
OSはubuntuサーバー、セキュアブートがいいよね。

メールサーバー

自分で管理するのは面倒なサービスです。
既にメルアド用に契約していたさくらレンタルサーバーを使いました。
DNSを向けてspfを書くだけです。

実際の構築作業とハマったところ

えいやっとやりました、こういうものはえいやっとやりましょう。
規約はフリーで規約のひな型を公開してくれている方がいたのでそれを利用させていただきました、とてもありがたかったです。 掲示版・SNS系向きの利用規約の雛形(ひな型) 絵文字のガイドラインは自分で書きました。
公開初期にはロゴは後回しにしたり完成していない部分が多かったのでまだ多いけど暫定よぽすきという名前になりました。
ロゴの募集等いろいろな方に協力していただきよぽすきを運営できています、本当にありがとうございます。

ところでpsqlはデフォルトではデータベースの設定が軽めで、自分で設定しないと全然メモリを使ってくれませんでした。

後から分かった事とか起こった事

・SSHは便利
当初はセキュリティ的に強いのでSSHを無効化してサーバーに直接キーボードとディスプレイを接続していましたが、やはりSSHは便利です(確信)。

・オブジェクトストレージ
misskeyの仕様としてオブジェクトストレージを使うと画像のURLスキームがサブドメインを指すようになります。
当然この形式の方がデータの取り扱い上便利なのでこれから新規でインスタンスを立てる人はサードパーティーのオブジェクトストレージサービスを利用しない場合でも、ローカルにオブジェクトストレージを構築してそこにファイルを置きましょう。

・コア単価
CPUは最新世代のcoreなら最低限で良いと思いインテルのcore i3 12100を買いました。
4C8Tで16000円程度しかし後から確認すると上位のcore i5は6コアで値段が1.5倍程度、クロックは若干上げやすい(=省電力)なコアが使われているので、同一コア単価なら上位SKUを購入した方が良かったです。

・CFの設定がよくわからなかった
misskey hub/CDNの設定には

/api/*以外のリクエストをすべてキャッシュする

と記述されていたのでCFの設定ページからキャッシュレベルをeverythingに設定しました。
しかしこれだと一部の環境で正常に表示されなくなるのでstandardが正しいようです。
自分が悪いです。

・一度HGWのファームウェアアップデートがあり再起動によりIPアドレスが変更されて接続できなくなった。
前述した動的IPの不具合です、そのままです。
アップデートのタイミングを自分で管理しないといけないようです。
自分が悪いです。

これからやらないといけない事

まだ暫定よぽすきと名乗っていて、実際まだ未完了のタスクも多いです。
復旧のリハーサルやUPSの動作確認等がまだできていないのでそのうちやらないといけません。

分散型SNSというのはユーザーのデータをホストし公開します。
もし違法な情報がアップロードされ、そしてそれを警察が積極的に取り締まりだしたら、サーバー運営はリスクと認識されてインスタンスを運営する人が限られてしまうかもしれません。
もしかしたら政治的に規制され統一的なルールを強制されることになるかもしれません。
あまり大きな負担があると誰もインスタンスを運営できなくなってしまいます。
自由な分散SNSのためにどうすればいいのか考えていきたいです。

最後に

最近でもpawooが売却されたように大規模なインスタンスはランニングコストが非常に重いです。
モデレーションは自分でやるから人件費はかからないとしても、現実的に数人の運営で維持できる規模というのはそれ程大きくはありません。
分散型SNSを社会的に受容していくために必要な現実的なインスタンス形態とは何かはまだ十分に研究されていませんが、少なくとも数万人ものユーザーを抱える大規模インスタンスは作ってはいけないのだと思います。

フェディバースの世界では運営も利用者もみんな対等なフェディバースのユーザーです。
もしあなたがフェディバースの世界に価値を見出してくれるなら、将来的には自分のインスタンスを持ち、自分の見たい情報や自分に関連するデータは自分で管理する事を検討してみてください。
私も一般的なハードウェアとネット環境で実用的なインスタンスを運営できるとい事を実証して、分散型SNSが受容される社会への一助となりたいと思っています。

民主主義国家における全ての主権者の行動は、究極的に国家の最高の意思決定です。
自由とは人間にとって大切なもので、分散型SNSは自由です、それぞれが自由のために何ができるのか、もしよかったら少しだけ考えみてください、そして何かの機会があればその思想を助けてほしいです。

分散型SNSの世界を普及させるには、もしかしたら24時間稼働するサーバーとして、gitでメモを管理するとか、個人用のオンラインストレージとか、他の用途もアピールしてみるのもいいかもしれません。

よぽすきは現在一定の利用者がいて安定的に治安もよく運営できています、これは利用者皆さんのおかげです、本当にありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment