axonhub / docs /zh /deployment /docker.md
llzai's picture
Upload 1793 files
9853396 verified
# Docker 部署
## 概述
本指南涵盖了使用 Docker 和 Docker Compose 部署 AxonHub 的方法。Docker 提供了一个隔离的、可重复的环境,简化了部署和扩展。
## 快速入门
### 1. 克隆仓库
```bash
git clone https://github.com/looplj/axonhub.git
cd axonhub
```
### 2. 配置环境
复制示例配置文件:
```bash
cp config.example.yml config.yml
```
编辑 `config.yml` 以进行设置:
```yaml
# config.yml
server:
port: 8090
name: "AxonHub"
db:
dialect: "sqlite3"
dsn: "file:axonhub.db?cache=shared&_fk=1"
log:
level: "info"
encoding: "json"
```
### 3. 启动服务
```bash
docker-compose up -d
```
### 4. 验证部署
检查服务状态:
```bash
docker-compose ps
```
访问应用:
- Web 界面:http://localhost:8090
- 默认管理员:admin@example.com / admin123
## Docker Compose 配置
### 基础 docker-compose.yml
```yaml
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:
```
### 生产环境配置
```yaml
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 (开发环境)
```yaml
axonhub:
environment:
- AXONHUB_DB_DIALECT=sqlite3
- AXONHUB_DB_DSN=file:axonhub.db?cache=shared&_fk=1
```
### PostgreSQL (生产环境)
```yaml
axonhub:
environment:
- AXONHUB_DB_DIALECT=postgres
- AXONHUB_DB_DSN=postgres://user:pass@host:5432/axonhub
```
### MySQL (生产环境)
```yaml
axonhub:
environment:
- AXONHUB_DB_DIALECT=mysql
- AXONHUB_DB_DSN=user:pass@tcp(host:3306)/axonhub?charset=utf8mb4&parseTime=True
```
## 环境变量
### 服务器配置
```bash
AXONHUB_SERVER_PORT=8090
AXONHUB_SERVER_NAME="AxonHub"
AXONHUB_SERVER_DEBUG=false
AXONHUB_SERVER_REQUEST_TIMEOUT="30s"
AXONHUB_SERVER_LLM_REQUEST_TIMEOUT="600s"
```
### 数据库配置
```bash
AXONHUB_DB_DIALECT="postgres"
AXONHUB_DB_DSN="postgres://user:pass@host:5432/axonhub"
AXONHUB_DB_DEBUG=false
```
### 日志配置
```bash
AXONHUB_LOG_LEVEL="info"
AXONHUB_LOG_ENCODING="json"
AXONHUB_LOG_OUTPUT="stdio"
```
## 安全考虑
### 网络安全
```yaml
axonhub:
networks:
- axonhub_network
ports:
- "127.0.0.1:8090:8090" # 仅绑定到本地回环
networks:
axonhub_network:
driver: bridge
```
### 密钥管理
使用 Docker secrets 或环境文件:
```bash
# .env 文件
DB_PASSWORD=your-secure-password
API_KEY_SECRET=your-api-key-secret
```
```yaml
axonhub:
env_file:
- .env
```
## 监控和日志
### 健康检查
```yaml
axonhub:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
### 日志收集
```yaml
axonhub:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
## 扩展
### 水平扩展
```yaml
axonhub:
deploy:
replicas: 3
resources:
limits:
memory: 1G
cpus: '0.5'
reservations:
memory: 512M
cpus: '0.25'
```
### 负载均衡器设置
```yaml
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
```
## 备份与恢复
### 数据库备份
```yaml
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
```
### 卷备份
```bash
# 备份数据卷
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
**数据库连接问题**
- 验证数据库凭据
- 检查容器间的网络连通性
- 确保数据库容器正在运行
### 调试模式
启用调试日志进行故障排除:
```yaml
axonhub:
environment:
- AXONHUB_SERVER_DEBUG=true
- AXONHUB_LOG_LEVEL=debug
```
## 后续步骤
- [配置指南](configuration.md)
- [OpenAI API](../api-reference/openai-api.md)
- [Anthropic API](../api-reference/anthropic-api.md)
- [Gemini API](../api-reference/gemini-api.md)
- [架构文档](../architecture/erd.md)