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 volumes: - pg_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 3s retries: 5 networks: - history-api-project cache: image: redis:8.6.1-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" # Thêm ls để kiểm tra chắc chắn lúc chạy ls /migrations /migrate -path /migrations -database "$$DB_URL" up || \ (/migrate -path /migrations -database "$$DB_URL" force 8 && \ /migrate -path /migrations -database "$$DB_URL" up) networks: - history-api-project app: build: . container_name: history_app restart: unless-stopped depends_on: migrate: condition: service_completed_successfully cache: condition: service_started ports: - "3344:3344" networks: - history-api-project volumes: pg_data: networks: history-api-project: