Single-User Instance
1インスタンス1ユーザーの設計パターンに関する仕様です。 Yurucommu は個人が自分のために立てる self-host な ActivityPub SNS であり、 その personal / single-operator なインスタンスの設計指針を定義します。
概要
Single-User Instanceは、1つのインスタンスを1人のユーザーが所有・運用するモデルです。 データの自己管理、プライバシーの確保、運用コストの最小化を目的としています。
メリット
- データ主権 - 自分のデータは自分で管理
- プライバシー - 管理者=ユーザーなのでデータ漏洩リスクが低い
- シンプルな運用 - マルチユーザー機能が不要
- 低コスト - 1ユーザー分のリソースで十分
- カスタマイズ性 - 自分好みに設定可能
アーキテクチャ
アクター構成
Single-User Instanceには通常1つのメインアクターが存在します:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"id": "https://alice.example/users/alice",
"preferredUsername": "alice",
"name": "Alice",
"inbox": "https://alice.example/users/alice/inbox",
"outbox": "https://alice.example/users/alice/outbox",
"followers": "https://alice.example/users/alice/followers",
"following": "https://alice.example/users/alice/following"
}
WebFinger
@tako@example.com
のようなアドレスでオーナーアクターを特定できます。 Yurucommu の
Single-User Instance では、既存のローカル actor 名はその actor
に解決し、 存在しない任意の
acct:<name>@host は同じオーナーアクターへの alias
として解決します。
GET /.well-known/webfinger?resource=acct:any@example.com
{
"subject": "acct:any@example.com",
"aliases": ["https://example.com/ap/users/tako"],
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://example.com/ap/users/tako"
},
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://example.com/users/tako"
}
]
}
認証
Yurucommu の標準運用では、複雑なユーザー登録フローは持たず、
AUTH_PASSWORD_HASH
に設定した単一パスワードでオーナーとしてログインします。
対応する認証方式
| 方式 | 説明 | 適用場面 |
|---|---|---|
| パスワード認証 | AUTH_PASSWORD_HASH による単一パスワード認証 |
標準運用 |
| OAuth | 設定済みプロバイダを使うログイン | 外部 ID 連携が必要な場合 |
セッション管理
ログイン状態はセッションCookieで管理します。 Single-User Instanceでは、長期間のセッション有効期限を設定しても問題ありません。
初期セットアップ
現行実装では、ブラウザ上の初回セットアップ画面からユーザー名・表示名・パスワードを登録する
flow は提供しません。 パスワードは deploy 時に
AUTH_PASSWORD_HASH として設定します。
初回ログインフロー
- インスタンスをデプロイ
AUTH_PASSWORD_HASHを secret として設定- 初回アクセス時は通常のログイン画面を表示
- 正しいパスワードでログイン
-
オーナー actor が未作成の場合、固定 username
tako/ 表示名takoで作成 - キーペア(公開鍵/秘密鍵)を自動生成
インスタンス情報
NodeInfoを通じてインスタンス情報を公開します。 Single-User Instanceであることを示すメタデータを含めることができます。
{
"version": "2.1",
"software": {
"name": "yurucommu",
"version": "1.0.0"
},
"protocols": ["activitypub"],
"usage": {
"users": {
"total": 1,
"activeMonth": 1,
"activeHalfyear": 1
},
"localPosts": 42
},
"openRegistrations": false,
"metadata": {
"singleUser": true
}
}
セキュリティ考慮事項
HTTP Signatures
ActivityPubの連合通信にはHTTP Signaturesを使用します。 秘密鍵は安全に保管する必要があります。
HTTPS必須
本番環境では必ずHTTPSを使用してください。 ActivityPubの仕様上、HTTPSが推奨されています。
レート制限
単一ユーザーでも、外部からのリクエストにはレート制限を設けてください。 DoS攻撃の防止に役立ちます。
運用ガイドライン
バックアップ
定期的なバックアップを推奨します:
- データベース(D1)のエクスポート
- メディアファイル(R2)のバックアップ
- 秘密鍵の安全な保管
更新
セキュリティアップデートは速やかに適用してください。 Single-User Instanceは管理者=ユーザーなので、更新タイミングを柔軟に決められます。