Files
tyapi-server/docker-compose.prod.yml
2025-09-02 16:37:28 +08:00

196 lines
5.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

version: "3.8"
services:
# PostgreSQL 数据库 (生产环境)
postgres:
image: postgres:16.9
container_name: tyapi-postgres-prod
environment:
TZ: Asia/Shanghai
PGTZ: Asia/Shanghai
POSTGRES_DB: tyapi
POSTGRES_USER: tyapi_user
POSTGRES_PASSWORD: Pg9mX4kL8nW2rT5y
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
# 性能优化配置
POSTGRES_SHARED_PRELOAD_LIBRARIES: pg_stat_statements
volumes:
- postgres_data:/var/lib/postgresql/data
- ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- tyapi-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U tyapi_user -d tyapi -h localhost"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
restart: unless-stopped
deploy:
resources:
limits:
memory: 2G
cpus: "1.0"
reservations:
memory: 512M
cpus: "0.5"
# 生产环境暴露数据库端口到主机
ports:
- "25010:5432"
# Redis 缓存 (生产环境)
redis:
image: redis:8.0.2
container_name: tyapi-redis-prod
environment:
TZ: Asia/Shanghai
REDIS_PASSWORD: ""
volumes:
- redis_data:/data
- ./deployments/docker/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- tyapi-network
healthcheck:
test: redis-cli ping
interval: 30s
timeout: 10s
retries: 5
restart: unless-stopped
deploy:
resources:
limits:
memory: 1G
cpus: "0.5"
reservations:
memory: 256M
cpus: "0.2"
# 生产环境不暴露端口到主机
# ports:
# - "6379:6379"
# TYAPI 应用程序
tyapi-app:
build:
context: .
dockerfile: Dockerfile
args:
VERSION: 1.0.0
COMMIT: dev
BUILD_TIME: ""
container_name: tyapi-app-prod
environment:
# 时区配置
TZ: Asia/Shanghai
# 环境设置
ENV: production
ports:
- "25000:8080"
volumes:
- ./logs:/app/logs
# user: "1001:1001" # 注释掉使用root权限运行
networks:
- tyapi-network
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
restart: unless-stopped
deploy:
resources:
limits:
memory: 1G
cpus: "1.0"
reservations:
memory: 256M
cpus: "0.3"
# TYAPI Worker 服务
tyapi-worker:
build:
context: .
dockerfile: Dockerfile.worker
args:
VERSION: 1.0.0
COMMIT: dev
BUILD_TIME: ""
container_name: tyapi-worker-prod
environment:
# 时区配置
TZ: Asia/Shanghai
# 环境设置
ENV: production
volumes:
- ./logs:/root/logs
# user: "1001:1001" # 注释掉使用root权限运行
networks:
- tyapi-network
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "ps", "aux", "|", "grep", "worker"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
restart: unless-stopped
deploy:
resources:
limits:
memory: 512M
cpus: "0.5"
reservations:
memory: 128M
cpus: "0.1"
# Asynq 任务监控 (生产环境)
asynq-monitor:
image: hibiken/asynqmon:latest
container_name: tyapi-asynq-monitor-prod
environment:
TZ: Asia/Shanghai
ports:
- "25080:8080"
command: --redis-addr=tyapi-redis-prod:6379
networks:
- tyapi-network
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
restart: unless-stopped
deploy:
resources:
limits:
memory: 256M
cpus: "0.3"
reservations:
memory: 64M
cpus: "0.1"
volumes:
postgres_data:
driver: local
redis_data:
driver: local
networks:
tyapi-network:
driver: bridge