AnCao/DOCKER.md
2025-11-05 09:37:29 +08:00

254 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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