| # 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) | |