services: db: image: postgis/postgis:18-3.6 container_name: history_db restart: unless-stopped env_file: - ./assets/resources/.env environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} - PGDATA=/var/lib/postgresql/data ports: - "5432:5432" volumes: - pg_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 networks: - history-api-project cache: image: redis:8.6.2-alpine container_name: history_redis restart: unless-stopped networks: - history-api-project migrate: build: context: . dockerfile_inline: | FROM migrate/migrate COPY db/migrations /migrations container_name: history_migrate depends_on: db: condition: service_healthy env_file: - ./assets/resources/.env entrypoint: - sh - -c - | DB_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?sslmode=disable" for i in 1 2 3; do echo "Migration attempt $$i..." if /migrate -path /migrations -database "$$DB_URL" up; then echo "Migration success" exit 0 fi sleep 2 done echo "Migration failed after 3 attempts" exit 1 networks: - history-api-project app: build: . container_name: history_app restart: unless-stopped depends_on: migrate: condition: service_completed_successfully db: condition: service_healthy cache: condition: service_started env_file: - ./assets/resources/.env ports: - "3344:3344" networks: - history-api-project worker: build: . container_name: history_worker restart: unless-stopped depends_on: db: condition: service_healthy cache: condition: service_started env_file: - ./assets/resources/.env command: ["./email-worker"] networks: - history-api-project volumes: pg_data: networks: history-api-project: