Docker 部署
概述
本指南涵盖了使用 Docker 和 Docker Compose 部署 AxonHub 的方法。Docker 提供了一个隔离的、可重复的环境,简化了部署和扩展。
快速入门
1. 克隆仓库
git clone https://github.com/looplj/axonhub.git
cd axonhub
2. 配置环境
复制示例配置文件:
cp config.example.yml config.yml
编辑 config.yml 以进行设置:
# config.yml
server:
port: 8090
name: "AxonHub"
db:
dialect: "sqlite3"
dsn: "file:axonhub.db?cache=shared&_fk=1"
log:
level: "info"
encoding: "json"
3. 启动服务
docker-compose up -d
4. 验证部署
检查服务状态:
docker-compose ps
访问应用:
- Web 界面:http://localhost:8090
- 默认管理员:admin@example.com / admin123
Docker Compose 配置
基础 docker-compose.yml
version: '3.8'
services:
axonhub:
image: looplj/axonhub:latest
ports:
- "8090:8090"
volumes:
- ./config.yml:/app/config.yml
- axonhub_data:/app/data
environment:
- AXONHUB_SERVER_PORT=8090
- AXONHUB_DB_DIALECT=sqlite3
- AXONHUB_DB_DSN=file:axonhub.db?cache=shared&_fk=1
restart: unless-stopped
volumes:
axonhub_data:
生产环境配置
version: '3.8'
services:
axonhub:
image: looplj/axonhub:latest
ports:
- "8090:8090"
volumes:
- ./config.yml:/app/config.yml
- axonhub_data:/app/data
- ./logs:/app/logs
environment:
- AXONHUB_SERVER_PORT=8090
- AXONHUB_DB_DIALECT=postgres
- AXONHUB_DB_DSN=postgres://axonhub:password@postgres:5432/axonhub
- AXONHUB_LOG_LEVEL=warn
- AXONHUB_LOG_OUTPUT=file
- AXONHUB_LOG_FILE_PATH=/app/logs/axonhub.log
depends_on:
- postgres
restart: unless-stopped
postgres:
image: postgres:15
environment:
- POSTGRES_DB=axonhub
- POSTGRES_USER=axonhub
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
axonhub_data:
postgres_data:
数据库选项
SQLite (开发环境)
axonhub:
environment:
- AXONHUB_DB_DIALECT=sqlite3
- AXONHUB_DB_DSN=file:axonhub.db?cache=shared&_fk=1
PostgreSQL (生产环境)
axonhub:
environment:
- AXONHUB_DB_DIALECT=postgres
- AXONHUB_DB_DSN=postgres://user:pass@host:5432/axonhub
MySQL (生产环境)
axonhub:
environment:
- AXONHUB_DB_DIALECT=mysql
- AXONHUB_DB_DSN=user:pass@tcp(host:3306)/axonhub?charset=utf8mb4&parseTime=True
环境变量
服务器配置
AXONHUB_SERVER_PORT=8090
AXONHUB_SERVER_NAME="AxonHub"
AXONHUB_SERVER_DEBUG=false
AXONHUB_SERVER_REQUEST_TIMEOUT="30s"
AXONHUB_SERVER_LLM_REQUEST_TIMEOUT="600s"
数据库配置
AXONHUB_DB_DIALECT="postgres"
AXONHUB_DB_DSN="postgres://user:pass@host:5432/axonhub"
AXONHUB_DB_DEBUG=false
日志配置
AXONHUB_LOG_LEVEL="info"
AXONHUB_LOG_ENCODING="json"
AXONHUB_LOG_OUTPUT="stdio"
安全考虑
网络安全
axonhub:
networks:
- axonhub_network
ports:
- "127.0.0.1:8090:8090" # 仅绑定到本地回环
networks:
axonhub_network:
driver: bridge
密钥管理
使用 Docker secrets 或环境文件:
# .env 文件
DB_PASSWORD=your-secure-password
API_KEY_SECRET=your-api-key-secret
axonhub:
env_file:
- .env
监控和日志
健康检查
axonhub:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
日志收集
axonhub:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
扩展
水平扩展
axonhub:
deploy:
replicas: 3
resources:
limits:
memory: 1G
cpus: '0.5'
reservations:
memory: 512M
cpus: '0.25'
负载均衡器设置
services:
axonhub:
image: looplj/axonhub:latest
deploy:
replicas: 3
networks:
- axonhub_network
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- axonhub
networks:
- axonhub_network
备份与恢复
数据库备份
services:
backup:
image: postgres:15
volumes:
- ./backup:/backup
- postgres_data:/var/lib/postgresql/data
command: |
bash -c '
pg_dump -h postgres -U axonhub axonhub > /backup/axonhub-$(date +%Y%m%d).sql
'
depends_on:
- postgres
environment:
- PGPASSWORD=password
卷备份
# 备份数据卷
docker run --rm -v axonhub_data:/source -v $(pwd)/backup:/backup alpine \
tar czf /backup/axonhub-data-$(date +%Y%m%d).tar.gz -C /source .
# 恢复数据卷
docker run --rm -v axonhub_data:/target -v $(pwd)/backup:/backup alpine \
tar xzf /backup/axonhub-data-20231110.tar.gz -C /target
故障排除
常见问题
容器无法启动
- 检查 Docker 日志:
docker-compose logs axonhub - 验证配置文件权限
- 确保数据库连接正常
端口冲突
- 更改 docker-compose.yml 中暴露的端口
- 检查是否有其他服务正在使用端口 8090
数据库连接问题
- 验证数据库凭据
- 检查容器间的网络连通性
- 确保数据库容器正在运行
调试模式
启用调试日志进行故障排除:
axonhub:
environment:
- AXONHUB_SERVER_DEBUG=true
- AXONHUB_LOG_LEVEL=debug