Hakoniwa
インスタントおうちFediverse
みすてむずFediverseMisskeyMastodonPleromaDNSGoこれは みすてむず いず みすきーしすてむず Advent Calendar 2024 13日目の記事です。
目次
忙しい人に向けて
- インターネットに出ないでActivityPub連合を試したかったけど手間だったよ
- だから認証局/DNS/プロキシ/構築スクリプト全部入りプログラムを作ったよ
- https://gitlab.com/gnx2/hakoniwa にあるよ
- 使い方説明は間に合わなかったからもし今使うなんて奇特な人がいたらエスパーしてね 1
- 必要なのは安全な🏠と1台のUbuntu24仮想マシンだよ
- Misskey, MastodonとPleromaのセットアップがすぐできるよ 23
構成
とりあえず Podman Network の 内側<=>内側, 内側<=>外側, 外側<=>外側 を中継するイメージを感じてください。
仮想マシンにPodmanとhakoniwaを入れて仮想マシンの中を箱庭とします。
画面イメージ
ダッシュボード
デプロイメント
なぜ
OpenSSLで証明書を作り設置するには人生は短すぎる --- シアン化リチウム@ephemeral
ActivityPubでつながるためにドメインで名前解決できることと署名の正当性、そしてリクエスト署名をチェックするところがあります。 これにより開発環境で http://localhost:3000/ などで建てると連合できません。4
そのために証明書をOpenSSLで作ってリバースプロキシを作ってDNSを置いて…のためにGoogleとChatGPTを往復するには人生は短い。
そこから証明書生成・DNS・プロキシついでにデプロイ機能を合体した Hakoniwa ができました。
閉じた連合のために Tailscale や Cloudflare Tunnel などのインターネットを通る閉域網で実現してるのもあります。
ローカルのために一時的にでも外に出る、これが嘆かわしい。
家の中なら行儀の悪いパケットも、RFC違反でも流し放題なのでもっと自由になりましょう。
心に庭を作りましょう。
発想は Nginx Proxy Manager と YunoHost に近いです。
Hakoniwaはローカルで閉じるので取得済みドメインや Let’s encrypt は不要です。
いろいろ
今後ネタにするかもしれないもの
Podman Quadlet
Podman QuadletはコンテナをSystemdの作法で管理できます。
直接Systemctlユニットファイルに podman run ~ をコマンドで書いてもいいのですがより宣言的にかけるのがメリットです。
コンテナ同士の依存関係は通常のSystemctlユニットと同じく定義できます。
複数のコンテナの起動管理を目的とするとき kubernates の Pod manifestを使えるpodman play kube 5 もあります。
しかし、現在この play kube でコンテナ同士の依存定義(depends)で起動順は制御できますが終了順に反映されません。
これもQuadletを選ぶ理由になります。
HTMX
これはとてもいい。
作るものがコンパクトなときにJSフレームワーク + API設計を巨大に感じるとき、そもそもAPI必要か?と思ったとき、それが使いどころです。
逆に言うとリッチな画面は作らないと決めてください。破綻します。
テーブルがあってフォームがあって追加・削除・編集して…な社内ツール・開発用ツールにありがちな用途ならうまくはまると思います。
ただ、ツールによるWeb開発支援などはJavaScriptの本分というか執念といいますか、JSフレームワークの用意するものに乗っかれば充実しているのに対して少し前時代的なコーディングにはなると思います。
周辺ツールの充実で変わってくると思います。
HTMX + templ
GoのHTML生成テンプレートエンジン
ビルド時にHTML構文ミスに気付けるやつです。
コンポーネントをGo関数のように定義できるので部分的なパーツでリクエストを返すHTMXと相性がよいです。
しかし、Airのホットリロードを使っていてもプログラムが大きくなってくると画面更新までの待ちが長いのが悩みになります。
終わり
アドカレ駆動開発を目指して無事未完成です!
もともと「ActivityPubで何かやろうか、そのために」が始まりでしたが、その気持ちはなくなり手段だけが生き残ってこれを作っていました。
人類が消えた後の地球で命令を遂行し続けるアンドロイドの気分です。
読んでいただきありがとうございました。