Files
memory-infrastructure-palace/code/websites/pokedex.online/docker-compose.production.yml

84 lines
1.7 KiB
YAML

version: '3.8'
services:
# Frontend - Nginx serving built Vue.js app
frontend:
build:
context: .
dockerfile: Dockerfile.frontend
container_name: pokedex-frontend
ports:
- '8080:80'
- '8443:443'
depends_on:
backend:
condition: service_healthy
restart: unless-stopped
networks:
- pokedex-network
healthcheck:
test:
[
'CMD',
'wget',
'--quiet',
'--tries=1',
'--spider',
'http://localhost:80/'
]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Backend - Node.js API server
backend:
build:
context: ./server
dockerfile: Dockerfile
container_name: pokedex-backend
ports:
- '3000:3000'
environment:
- NODE_ENV=production
- PORT=3000
# OAuth credentials loaded from .env file
- CHALLONGE_CLIENT_ID=${CHALLONGE_CLIENT_ID}
- CHALLONGE_CLIENT_SECRET=${CHALLONGE_CLIENT_SECRET}
- REDIRECT_URI=${REDIRECT_URI}
- SESSION_SECRET=${SESSION_SECRET}
env_file:
- ./server/.env
volumes:
# Persist OAuth session data
- ./server/data:/app/data
# Persist logs
- ./server/logs:/app/logs
restart: unless-stopped
networks:
- pokedex-network
healthcheck:
test:
[
'CMD',
'wget',
'--quiet',
'--tries=1',
'--spider',
'http://localhost:3000/health'
]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
pokedex-network:
driver: bridge
volumes:
backend-data:
driver: local
backend-logs:
driver: local