254 lines
4.7 KiB
Markdown
254 lines
4.7 KiB
Markdown
# 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
|
||
```
|