version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15-alpine container_name: apskel-pos-postgres restart: unless-stopped environment: POSTGRES_DB: apskel_pos POSTGRES_USER: apskel POSTGRES_PASSWORD: 7a8UJbM2GgBWaseh0lnP3O5i1i5nINXk POSTGRES_INITDB_ARGS: "--encoding=UTF-8" volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "5432:5432" networks: - apskel-network healthcheck: test: ["CMD-SHELL", "pg_isready -U apskel -d apskel_pos"] interval: 30s timeout: 10s retries: 3 # Redis (Optional - for caching and sessions) redis: image: redis:7-alpine container_name: apskel-pos-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data networks: - apskel-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 # Backend API backend: build: context: . dockerfile: Dockerfile target: production container_name: apskel-pos-backend restart: unless-stopped environment: ENV_MODE: production GIN_MODE: release ports: - "3300:3300" depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - apskel-network volumes: - ./infra:/app/infra:ro healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3300/health || exit 1"] interval: 30s timeout: 10s retries: 3 # Development backend (for local development) backend-dev: build: context: . dockerfile: Dockerfile target: development container_name: apskel-pos-backend-dev restart: unless-stopped environment: ENV_MODE: development GIN_MODE: debug ports: - "3001:3300" depends_on: postgres: condition: service_healthy networks: - apskel-network volumes: - .:/app - go_modules:/go/pkg/mod profiles: - dev # Migration service (run once) migrate: build: context: . dockerfile: Dockerfile target: migration container_name: apskel-pos-migrate environment: ENV_MODE: production depends_on: postgres: condition: service_healthy networks: - apskel-network volumes: - ./infra:/app/infra:ro - ./migrations:/app/migrations:ro profiles: - migrate volumes: postgres_data: driver: local redis_data: driver: local go_modules: driver: local networks: apskel-network: driver: bridge