バックエンド構成要素
構成要素
| サービス | 役割 | ポート | 実体 |
|---|---|---|---|
app | Go/Echo製HTTP API。TUSアップロードと/api/works系エンドポイントを担当 | 8000 | backend/cmd/app(air.tomlでホットリロード) |
worker | GoのRiverキューワーカー。transcode_audioジョブを処理(現状スタブ実装) | - | backend/cmd/worker |
postgres | Postgres 18。スキーマはbackend/db/schema/*.sqlをdocker-entrypoint-initdb.d経由で適用(マイグレーションツールなし) | - | postgres:18-alpine(データは.data/postgres/) |
garage | S3互換の一時オブジェクトストレージ(Cocot TMP_Storage)。TUSアップロード中の音声とサムネイルを保存 | 3900 (S3 API), 3903 (Admin API) | dxflrs/garage:v2.3.0(データは.data/garage-{data,meta}/) |
本番音声ストレージ(Cocot Storage / Cloudflare R2)は設計ドキュメント上は存在するが、コード上はまだ未接続。
ローカル開発ではapp・workerはホスト上でgo runするのが主経路で、Docker上のapp・workerはフルDocker動作確認用のフォールバック。詳細はmise-migration-plan参照。
依存関係
app・workerともにpostgres(healthcheck: service_healthy)とgarage(service_started)に依存する。全サービスはapp-netネットワークに参加。
Goモジュール構成
backend/go.modはcmd/app・cmd/worker・internal/*・db・jobsで共有する単一のGoモジュール(cocot/backend)。独立モジュールではなくcocot/backend/...として互いをimportしている。jobs/パッケージは意図的に依存の薄い小さなパッケージ(ジョブ引数のstructのみ)にしてあり、cmd/appとcmd/workerが互いの依存関係を引き込まずにimportできるようにしている。構造の詳細はrestructuring-plan参照。
認証との関係
Echo(/api/*)と生のnet/http(TUSの/files/*)が混在しているため、認証ミドルウェアは2種類ある。詳細はauth参照。