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

4.7 KiB
Raw Permalink Blame History

Docker 部署指南

本文档说明如何使用 Docker 部署 AnKao 应用。

快速开始

使用 Docker Compose (推荐)

最简单的方式是使用 docker-compose它会自动启动数据库和应用

# 构建并启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

# 停止并删除数据
docker-compose down -v

访问应用: http://localhost:8080

手动使用 Docker

如果你想单独构建和运行容器:

1. 构建镜像

docker build -t ankao:latest .

2. 启动 PostgreSQL 数据库

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. 启动应用

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:

environment:
  POSTGRES_PASSWORD: 你的强密码
  DB_PASSWORD: 你的强密码

2. 使用外部数据库

如果使用外部 PostgreSQL 数据库,只需启动 app 服务:

docker-compose up -d app

并配置相应的环境变量。

3. 配置反向代理

生产环境建议使用 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 证书:

# 安装 certbot
apt-get install certbot python3-certbot-nginx

# 获取证书
certbot --nginx -d your-domain.com

5. 备份数据

定期备份 PostgreSQL 数据:

# 备份数据库
docker exec ankao-postgres pg_dump -U postgres ankao > backup.sql

# 恢复数据库
cat backup.sql | docker exec -i ankao-postgres psql -U postgres ankao

故障排查

查看应用日志

# 查看所有服务日志
docker-compose logs

# 查看应用日志
docker-compose logs app

# 查看数据库日志
docker-compose logs postgres

# 实时查看日志
docker-compose logs -f app

进入容器调试

# 进入应用容器
docker exec -it ankao-app sh

# 进入数据库容器
docker exec -it ankao-postgres sh

常见问题

1. 应用无法连接数据库

检查:

  • 数据库是否已启动: docker-compose ps
  • 网络配置是否正确
  • 环境变量配置是否正确

2. 端口被占用

修改 docker-compose.yml 中的端口映射:

ports:
  - "8081:8080"  # 将宿主机端口改为 8081

3. 构建失败

清理缓存重新构建:

docker-compose build --no-cache

镜像优化

当前 Dockerfile 使用多阶段构建,最终镜像基于 Alpine Linux体积小且安全。

镜像大小约:

  • 前端构建阶段: ~200MB (不包含在最终镜像)
  • 后端构建阶段: ~300MB (不包含在最终镜像)
  • 最终运行镜像: ~30MB

更新应用

# 拉取最新代码
git pull

# 重新构建并启动
docker-compose up -d --build

# 或者分步执行
docker-compose build
docker-compose up -d

清理资源

# 停止并删除容器
docker-compose down

# 删除容器和数据卷
docker-compose down -v

# 删除镜像
docker rmi ankao:latest