version: "3.9" services: database: image: mysql:8.0 container_name: psp_consumer_api_db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DATABASE_NAME} MYSQL_USER: ${DATABASE_USER} MYSQL_PASSWORD: ${DATABASE_PASSWORD} ports: - "${DATABASE_PORT}:3306" volumes: - db_data:/var/lib/mysql - ./prisma/migrations:/docker-entrypoint-initdb.d healthcheck: test: "mysqladmin ping -h 127.0.0.1 -u ${DATABASE_USER} -p'${DB_ROOT_PASSWORD}'" interval: 15s # Shortened interval, as MySQL is starting fast now timeout: 5s # Shorter timeout retries: 5 # Keep retries start_period: 30s # Reduced start_period since MySQL is fast networks: - psp_consumer_network api: build: context: . dockerfile: Dockerfile args: # Pass individual components that prisma generate needs during build NODE_ENV: ${NODE_ENV:-production} PORT: ${PORT} DATABASE_NAME: ${DATABASE_NAME} # From .env DATABASE_USER: ${DATABASE_USER} # From .env DATABASE_PASSWORD: ${DATABASE_PASSWORD} # From .env DATABASE_PORT: ${DATABASE_PORT} # From .env DATABASE_HOST: ${DATABASE_HOST} # From .env # Construct the DATABASE_URL and SHADOW_DATABASE_URL for the build context # Use 'database' as the host, as per docker-compose networking DATABASE_URL: mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME} SHADOW_DATABASE_URL: mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}_shadow JWT_SECRET: ${JWT_SECRET} # From .env JWT_EXPIRES_IN: ${JWT_EXPIRES_IN} # From .env (ensure consistency with Dockerfile ARG) OTP_STATIC_CODE: ${OTP_STATIC_CODE} # From .env container_name: psp_consumer_api restart: unless-stopped depends_on: database: condition: service_healthy environment: NODE_ENV: ${NODE_ENV:-production} PORT: ${PORT} DATABASE_NAME: ${DATABASE_NAME} # From .env DATABASE_USER: ${DATABASE_USER} # From .env DATABASE_PASSWORD: ${DATABASE_PASSWORD} # From .env DATABASE_PORT: ${DATABASE_PORT} # From .env DATABASE_HOST: ${DATABASE_HOST} # From .env DATABASE_URL: mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME} SHADOW_DATABASE_URL: mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}_shadow JWT_SECRET: ${JWT_SECRET} JWT_EXPIRES_IN: ${JWT_EXPIRES_IN} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:5000,http://127.0.0.1:5000} OTP_STATIC_CODE: ${OTP_STATIC_CODE} # From .env ports: - "${PORT:-5002}:5002" volumes: - ./src:/app/src - /app/dist - /app/node_modules networks: - psp_consumer_network # healthcheck: # test: # [ # "CMD", # "wget", # "--quiet", # "--tries=1", # "--spider", # "http://localhost:5002/api/v1/health", # ] # interval: 30s # timeout: 10s # retries: 3 # start_period: 10s volumes: db_data: driver: local networks: psp_consumer_network: driver: bridge