# Docker 部署指南 本文档说明如何使用 Docker 部署 AnKao 应用。 ## 快速开始 ### 使用 Docker Compose (推荐) 最简单的方式是使用 docker-compose,它会自动启动数据库和应用: ```bash # 构建并启动所有服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down # 停止并删除数据 docker-compose down -v ``` 访问应用: http://localhost:8080 ### 手动使用 Docker 如果你想单独构建和运行容器: #### 1. 构建镜像 ```bash docker build -t ankao:latest . ``` #### 2. 启动 PostgreSQL 数据库 ```bash docker run -d \ --name ankao-postgres \ -e POSTGRES_DB=ankao \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ -p 5432:5432 \ postgres:16-alpine ``` #### 3. 启动应用 ```bash docker run -d \ --name ankao-app \ -p 8080:8080 \ -e DB_HOST=host.docker.internal \ -e DB_PORT=5432 \ -e DB_USER=postgres \ -e DB_PASSWORD=postgres \ -e DB_NAME=ankao \ -e DB_SSLMODE=disable \ ankao:latest ``` **注意**: 在 Windows 和 Mac 上使用 `host.docker.internal` 连接宿主机的数据库。在 Linux 上需要使用 `--network host` 或创建自定义网络。 ## 环境变量配置 应用支持以下环境变量配置: ### 数据库配置 | 环境变量 | 描述 | 默认值 | |---------|------|--------| | `DB_HOST` | 数据库主机地址 | pgsql.yuchat.top | | `DB_PORT` | 数据库端口 | 5432 | | `DB_USER` | 数据库用户名 | postgres | | `DB_PASSWORD` | 数据库密码 | longqi@1314 | | `DB_NAME` | 数据库名称 | ankao | | `DB_SSLMODE` | SSL 模式 | disable | ### 应用配置 | 环境变量 | 描述 | 默认值 | |---------|------|--------| | `GIN_MODE` | Gin 运行模式 (debug/release) | debug | ## Docker Compose 配置说明 `docker-compose.yml` 文件定义了两个服务: 1. **postgres**: PostgreSQL 16 数据库 - 端口: 5432 - 数据持久化: 使用 Docker volume `postgres_data` - 健康检查: 确保数据库就绪后再启动应用 2. **app**: AnKao 应用 - 端口: 8080 - 依赖 postgres 服务 - 自动重启策略 ## 生产环境部署建议 ### 1. 修改默认密码 **重要**: 生产环境中务必修改数据库密码! 编辑 `docker-compose.yml`: ```yaml environment: POSTGRES_PASSWORD: 你的强密码 DB_PASSWORD: 你的强密码 ``` ### 2. 使用外部数据库 如果使用外部 PostgreSQL 数据库,只需启动 app 服务: ```bash docker-compose up -d app ``` 并配置相应的环境变量。 ### 3. 配置反向代理 生产环境建议使用 Nginx 作为反向代理: ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ### 4. 启用 HTTPS 使用 Let's Encrypt 免费 SSL 证书: ```bash # 安装 certbot apt-get install certbot python3-certbot-nginx # 获取证书 certbot --nginx -d your-domain.com ``` ### 5. 备份数据 定期备份 PostgreSQL 数据: ```bash # 备份数据库 docker exec ankao-postgres pg_dump -U postgres ankao > backup.sql # 恢复数据库 cat backup.sql | docker exec -i ankao-postgres psql -U postgres ankao ``` ## 故障排查 ### 查看应用日志 ```bash # 查看所有服务日志 docker-compose logs # 查看应用日志 docker-compose logs app # 查看数据库日志 docker-compose logs postgres # 实时查看日志 docker-compose logs -f app ``` ### 进入容器调试 ```bash # 进入应用容器 docker exec -it ankao-app sh # 进入数据库容器 docker exec -it ankao-postgres sh ``` ### 常见问题 #### 1. 应用无法连接数据库 检查: - 数据库是否已启动: `docker-compose ps` - 网络配置是否正确 - 环境变量配置是否正确 #### 2. 端口被占用 修改 `docker-compose.yml` 中的端口映射: ```yaml ports: - "8081:8080" # 将宿主机端口改为 8081 ``` #### 3. 构建失败 清理缓存重新构建: ```bash docker-compose build --no-cache ``` ## 镜像优化 当前 Dockerfile 使用多阶段构建,最终镜像基于 Alpine Linux,体积小且安全。 镜像大小约: - 前端构建阶段: ~200MB (不包含在最终镜像) - 后端构建阶段: ~300MB (不包含在最终镜像) - 最终运行镜像: ~30MB ## 更新应用 ```bash # 拉取最新代码 git pull # 重新构建并启动 docker-compose up -d --build # 或者分步执行 docker-compose build docker-compose up -d ``` ## 清理资源 ```bash # 停止并删除容器 docker-compose down # 删除容器和数据卷 docker-compose down -v # 删除镜像 docker rmi ankao:latest ```