fischer-agentkit/docker-compose.deploy.yaml

90 lines
2.2 KiB
YAML

# 生产部署专用 Compose 文件
# 由 Gitea Actions 在 /opt/agentkit/repo 下调用
# 与开发用 docker-compose.yaml 的区别:
# 1. 不暴露 Redis/PostgreSQL 端口到公网(仅内部通信)
# 2. 密码通过 .env 注入
# 3. 配置日志大小限制,避免磁盘打满
# 4. 配置资源限制,避免单服务吃满内存
services:
agentkit:
build: .
command: serve --host 0.0.0.0 --port 8001
ports:
- "8001:8001"
env_file: .env
environment:
- REDIS_URL=redis://redis:6379/0
- DATABASE_URL=postgresql+asyncpg://agentkit:${POSTGRES_PASSWORD}@postgres:5432/agentkit
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8001/api/v1/health')"]
interval: 30s
timeout: 10s
start_period: 30s
retries: 3
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "50m"
max-file: "5"
deploy:
resources:
limits:
memory: 2G
redis:
image: redis:7-alpine
# 不暴露端口到公网,仅容器内部通信
expose:
- "6379"
command: >
redis-server
--requirepass ${REDIS_PASSWORD}
--maxmemory 256mb
--maxmemory-policy allkeys-lru
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "20m"
max-file: "3"
postgres:
image: pgvector/pgvector:pg15
expose:
- "5432"
environment:
POSTGRES_USER: agentkit
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: agentkit
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U agentkit"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "20m"
max-file: "3"
volumes:
redisdata:
pgdata: