Files
tp-ems/core/docker-compose.prod.yml

128 lines
2.7 KiB
YAML
Raw Normal View History

version: '3.8'
services:
nginx:
build:
context: .
dockerfile: nginx/Dockerfile
container_name: tianpu_nginx
ports:
- "80:80"
depends_on:
backend:
condition: service_healthy
restart: always
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
postgres:
image: timescale/timescaledb:latest-pg16
container_name: tianpu_db
environment:
POSTGRES_DB: ${POSTGRES_DB:-tianpu_ems}
POSTGRES_USER: ${POSTGRES_USER:-tianpu}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-tianpu} -d ${POSTGRES_DB:-tianpu_ems}"]
interval: 10s
timeout: 5s
retries: 5
restart: always
deploy:
resources:
limits:
memory: 2G
cpus: '2.0'
reservations:
memory: 512M
cpus: '0.5'
logging:
driver: json-file
options:
max-size: "50m"
max-file: "5"
redis:
image: redis:7-alpine
container_name: tianpu_redis
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: always
deploy:
resources:
limits:
memory: 512M
cpus: '1.0'
reservations:
memory: 128M
cpus: '0.25'
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: tianpu_backend
env_file: .env
environment:
- DEBUG=false
expose:
- "8000"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
command: >
gunicorn app.main:app
--workers 4
--worker-class uvicorn.workers.UvicornWorker
--bind 0.0.0.0:8000
--timeout 120
--access-logfile -
--error-logfile -
restart: always
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
resources:
limits:
memory: 1G
cpus: '2.0'
reservations:
memory: 256M
cpus: '0.5'
logging:
driver: json-file
options:
max-size: "50m"
max-file: "5"
volumes:
pgdata:
redisdata: