API/docker-compose.prod.yml
chenpei 08dd1c7f75 初始提交:添加充值记录和发票管理功能
功能特性:
- 用户端充值记录页面,从使用日志中分离
- 充值记录中的去开发票功能
- 管理员发票管理页面
- 发票申请、处理、邮件通知功能
- 侧边栏菜单更新
- UI优化和控制台清理
- Docker部署配置
- 生产环境安全配置
2025-09-04 18:07:16 +08:00

101 lines
2.9 KiB
YAML

version: '3.4'
services:
new-api:
build:
context: .
dockerfile: Dockerfile
container_name: new-api-prod
restart: always
command: --log-dir /app/logs
ports:
- "3000:3000"
volumes:
- ./data:/data
- ./logs:/app/logs
environment:
# 生产环境数据库配置 - 使用环境变量
- SQL_DSN=${MYSQL_USER:-newapi_user}:${MYSQL_PASSWORD}@tcp(mysql:3306)/${MYSQL_DATABASE:-new_api}
- REDIS_CONN_STRING=redis://:${REDIS_PASSWORD}@redis:6379
- TZ=Asia/Shanghai
- ERROR_LOG_ENABLED=true
- STREAMING_TIMEOUT=120
# 生产环境必须设置的安全配置
- SESSION_SECRET=${SESSION_SECRET} # 必须设置!多机部署时的会话密钥
# 可选配置
# - NODE_TYPE=slave # 多节点部署时取消注释
# - SYNC_FREQUENCY=60 # 需要定期数据库同步时取消注释
# - FRONTEND_BASE_URL=${FRONTEND_BASE_URL} # 多节点部署时的前端URL
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_started
healthcheck:
test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $$2}'"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
redis:
image: redis:7-alpine
container_name: redis-prod
restart: always
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 30s
timeout: 10s
retries: 3
# 生产环境不暴露Redis端口
# ports:
# - "6379:6379"
mysql:
image: mysql:8.2
container_name: mysql-prod
restart: always
environment:
# 生产环境MySQL配置
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE:-new_api}
MYSQL_USER: ${MYSQL_USER:-newapi_user}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
# MySQL性能优化配置
MYSQL_INNODB_BUFFER_POOL_SIZE: 256M
MYSQL_INNODB_LOG_FILE_SIZE: 64M
MYSQL_MAX_CONNECTIONS: 200
volumes:
- mysql_data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d # 初始化脚本目录
command: >
--default-authentication-plugin=mysql_native_password
--innodb-buffer-pool-size=256M
--innodb-log-file-size=64M
--max-connections=200
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
# 生产环境不暴露MySQL端口
# ports:
# - "3306:3306"
volumes:
mysql_data:
driver: local
redis_data:
driver: local
networks:
default:
name: newapi-prod-network