version: '3.8' services: mysql: image: mysql:8.0 container_name: voxblog-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME:-voxblog} MYSQL_USER: ${DB_USER:-voxblog} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - mysql_data:/var/lib/mysql networks: - voxblog-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD}"] interval: 10s timeout: 5s retries: 5 start_period: 30s api: build: context: . dockerfile: docker/api.Dockerfile args: PNPM_FLAGS: --no-frozen-lockfile container_name: voxblog-api restart: unless-stopped ports: - "127.0.0.1:3301:3301" # Only localhost, not internet environment: NODE_ENV: production PORT: 3301 DB_HOST: ${DB_HOST:-mysql} DB_PORT: ${DB_PORT:-3306} DB_USER: ${DB_USER:-voxblog} DB_PASSWORD: ${DB_PASSWORD} DB_NAME: ${DB_NAME:-voxblog} ADMIN_PASSWORD: ${ADMIN_PASSWORD} OPENAI_API_KEY: ${OPENAI_API_KEY} GHOST_ADMIN_API_KEY: ${GHOST_ADMIN_API_KEY} GHOST_ADMIN_API_URL: ${GHOST_ADMIN_API_URL} S3_BUCKET: ${S3_BUCKET} S3_REGION: ${S3_REGION} S3_ACCESS_KEY: ${S3_ACCESS_KEY} S3_SECRET_KEY: ${S3_SECRET_KEY} S3_ENDPOINT: ${S3_ENDPOINT} INFISICAL_TOKEN: ${INFISICAL_TOKEN} INFISICAL_SITE_URL: ${INFISICAL_SITE_URL} PEXELS_API_KEY: ${PEXELS_API_KEY} depends_on: mysql: condition: service_healthy networks: - voxblog-network volumes: - ./data:/app/data admin: build: context: . dockerfile: docker/admin.Dockerfile args: VITE_API_URL: ${VITE_API_URL:-} PNPM_FLAGS: --no-frozen-lockfile container_name: voxblog-admin restart: unless-stopped ports: - "127.0.0.1:3300:80" # Only localhost, not internet networks: - voxblog-network depends_on: - api networks: voxblog-network: driver: bridge volumes: mysql_data: