diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go index cdca165..224f666 100644 --- a/backend/cmd/server/main.go +++ b/backend/cmd/server/main.go @@ -56,6 +56,10 @@ func main() { var sessRepo store.SessionRepository if cfg.Storage.Driver == "postgres" { + if cfg.Storage.DSN == "" { + logger.Log.Fatalw("storage.dsn is required when storage.driver is postgres", + "hint", "set CAMTALK_STORAGE_DSN environment variable") + } pool, err := store.NewPostgresPool(ctx, cfg.Storage.DSN) if err != nil { logger.Log.Fatalw("failed to connect to postgres", "error", err) diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 1949f0d..b61ad4f 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -152,6 +152,7 @@ func Load() (*Config, error) { v.SetDefault("ai.tts.output_format", "mp3") v.SetDefault("ai.tts.sample_rate", 24000) v.SetDefault("storage.driver", "memory") + v.SetDefault("storage.dsn", "") v.SetDefault("log.level", "info") v.SetDefault("log.format", "console") v.SetDefault("auth.access_ttl", 15) diff --git a/docker-compose.yml b/docker-compose.yml index 55ccdcb..fe4d766 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,8 @@ services: - CAMTALK_STORAGE_DSN=postgres://camtalk:camtalk123@postgres:5432/camtalk?sslmode=disable - CAMTALK_AUTH_JWT_SECRET=78uWBBAF8XEQEotKDlrnlnd4y8i4WN3E4zXmNmC8BYQ= depends_on: - - postgres + postgres: + condition: service_healthy networks: - camtalk-net restart: unless-stopped @@ -41,6 +42,11 @@ services: - ./backend/migrations:/docker-entrypoint-initdb.d networks: - camtalk-net + healthcheck: + test: ["CMD-SHELL", "pg_isready -U camtalk -d camtalk"] + interval: 5s + timeout: 3s + retries: 10 restart: unless-stopped volumes: