apskel-pos-backend/docker-compose.yaml
aditya.siregar 4f5950543e init
2025-07-18 20:10:29 +07:00

126 lines
2.7 KiB
YAML

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