Skip to content

バックエンド構成要素

構成要素

サービス役割ポート実体
appGo/Echo製HTTP API。TUSアップロードと/api/works系エンドポイントを担当8000backend/cmd/app(air.tomlでホットリロード)
workerGoのRiverキューワーカー。transcode_audioジョブを処理(現状スタブ実装)-backend/cmd/worker
postgresPostgres 18。スキーマはbackend/db/schema/*.sqlをdocker-entrypoint-initdb.d経由で適用(マイグレーションツールなし)-postgres:18-alpine(データは.data/postgres/
garageS3互換の一時オブジェクトストレージ(Cocot TMP_Storage)。TUSアップロード中の音声とサムネイルを保存3900 (S3 API), 3903 (Admin API)dxflrs/garage:v2.3.0(データは.data/garage-{data,meta}/

本番音声ストレージ(Cocot Storage / Cloudflare R2)は設計ドキュメント上は存在するが、コード上はまだ未接続。

ローカル開発ではappworkerはホスト上でgo runするのが主経路で、Docker上のappworkerはフルDocker動作確認用のフォールバック。詳細はmise-migration-plan参照。

依存関係

appworkerともにpostgres(healthcheck: service_healthy)とgarageservice_started)に依存する。全サービスはapp-netネットワークに参加。

Goモジュール構成

backend/go.modcmd/appcmd/workerinternal/*dbjobsで共有する単一のGoモジュール(cocot/backend)。独立モジュールではなくcocot/backend/...として互いをimportしている。jobs/パッケージは意図的に依存の薄い小さなパッケージ(ジョブ引数のstructのみ)にしてあり、cmd/appcmd/workerが互いの依存関係を引き込まずにimportできるようにしている。構造の詳細はrestructuring-plan参照。

認証との関係

Echo(/api/*)と生のnet/http(TUSの/files/*)が混在しているため、認証ミドルウェアは2種類ある。詳細はauth参照。