Files
claude-relay-service/docker-compose.yml
shaw 232c276c8c docs: 加强 Docker 部署时 .env 文件创建的说明和提示
- 在 docker-compose.yml 顶部添加醒目的注释说明必须先创建 .env 文件
- 更新 README.md,在 Docker 部署章节开头突出强调创建 .env 的重要性
- 解释为什么必须先创建文件(避免 Docker 创建成目录)
- 改进 docker-compose-init.sh 脚本,增加错误检测和修复功能
- 提供清晰的步骤指引和故障排除方法
2025-07-24 15:51:10 +08:00

123 lines
3.2 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'
# ⚠️ 重要提示:首次运行前必须执行以下命令
# touch .env
#
# 说明:如果不先创建 .env 文件Docker 会将其创建为目录而非文件,
# 导致容器无法正常启动。该文件用于存储加密密钥,必须持久化。
services:
# 🚀 Claude Relay Service
claude-relay:
build: .
container_name: claude-relay-service
restart: unless-stopped
ports:
- "${PORT:-3000}:3000"
environment:
- NODE_ENV=production
- PORT=3000
- REDIS_HOST=redis
- REDIS_PORT=6379
- ADMIN_USERNAME=${ADMIN_USERNAME:-} # 可选:预设管理员用户名
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-} # 可选:预设管理员密码
volumes:
- ./logs:/app/logs
- ./data:/app/data
- ./.env:/app/.env # 必须映射,用于持久化加密密钥
depends_on:
- redis
networks:
- claude-relay-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
# 📊 Redis Database
redis:
image: redis:7-alpine
container_name: claude-relay-redis
restart: unless-stopped
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
- ./redis_data:/data
command: redis-server --save 60 1 --appendonly yes --appendfsync everysec
networks:
- claude-relay-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
# 📈 Redis Monitoring (Optional)
redis-commander:
image: rediscommander/redis-commander:latest
container_name: claude-relay-redis-web
restart: unless-stopped
ports:
- "${REDIS_WEB_PORT:-8081}:8081"
environment:
- REDIS_HOSTS=local:redis:6379
depends_on:
- redis
networks:
- claude-relay-network
profiles:
- monitoring
# 📊 Application Monitoring (Optional)
prometheus:
image: prom/prometheus:latest
container_name: claude-relay-prometheus
restart: unless-stopped
ports:
- "${PROMETHEUS_PORT:-9090}:9090"
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
networks:
- claude-relay-network
profiles:
- monitoring
# 📈 Grafana Dashboard (Optional)
grafana:
image: grafana/grafana:latest
container_name: claude-relay-grafana
restart: unless-stopped
ports:
- "${GRAFANA_PORT:-3001}:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin123}
volumes:
- grafana_data:/var/lib/grafana
- ./config/grafana:/etc/grafana/provisioning
depends_on:
- prometheus
networks:
- claude-relay-network
profiles:
- monitoring
volumes:
prometheus_data:
driver: local
grafana_data:
driver: local
networks:
claude-relay-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16