version: '3.8' services: # PostgreSQL Database Service postgres: image: postgres:16-alpine container_name: tautkan_db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres_secure_pass} POSTGRES_DB: ${POSTGRES_DB:-tautkan} volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-tautkan}"] interval: 5s timeout: 5s retries: 10 # TautKan App (Full-Stack Backend + Frontend SPA) app: build: context: . dockerfile: Dockerfile container_name: tautkan_app restart: unless-stopped depends_on: postgres: condition: service_healthy environment: NODE_ENV: production PORT: 4000 CLIENT_ORIGIN: "*" DATABASE_URL: "postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres_secure_pass}@postgres:5432/${POSTGRES_DB:-tautkan}?schema=public" RATE_LIMIT_MAX_BOARDS_PER_HOUR: 10 ports: - "4000:4000" volumes: postgres_data: driver: local