Docker 部署指南(高级)

March 9, 2026 · View on GitHub

基础部署步骤请参见 QUICKSTART.md,本文档覆盖高级配置与技术细节。

架构说明

嵌入式部署

前端静态文件已完全嵌入到 Go 二进制文件中,无需 Nginx 反向代理:

┌─────────────────────────────┐
│   Docker Container (8080)   │
│  ┌───────────────────────┐  │
│  │   Go HTTP Server      │  │
│  │  ┌─────────────────┐  │  │
│  │  │  API Routes     │  │  │
│  │  │  /api/status    │  │  │
│  │  │  /health        │  │  │
│  │  └─────────────────┘  │  │
│  │  ┌─────────────────┐  │  │
│  │  │  Static Files   │  │  │
│  │  │  (Embedded)     │  │  │
│  │  │  /assets/*      │  │  │
│  │  │  /               │  │  │
│  │  └─────────────────┘  │  │
│  └───────────────────────┘  │
└─────────────────────────────┘

构建流程

1. Frontend Builder (Node.js)
   ├─ npm ci
   ├─ npm run build
   └─ 输出: dist/

2. Backend Builder (Go)
   ├─ 复制 dist/ 到 internal/api/frontend/dist
   ├─ go:embed 嵌入静态文件
   └─ 编译生成单个二进制文件

3. Runtime (Alpine)
   └─ 仅包含编译好的二进制文件

端口映射

默认映射 80:8080(本地 80 端口映射到容器内 8080 端口)。容器内服务始终监听 8080。

如需修改外部端口:

ports:
  - "3000:8080"  # 本地 3000 映射到容器 8080

注意: docker-compose.pg.yaml(PostgreSQL 部署)默认映射为 8081:8080

配置说明

环境变量

docker-compose.yaml 中配置:

environment:
  # 时区
  - TZ=Asia/Shanghai

  # API 密钥(覆盖 config.yaml)
  - MONITOR_88CODE_CC_API_KEY=sk-xxx
  - MONITOR_DUCKCODING_CC_API_KEY=sk-xxx

环境变量命名规则详见 QUICKSTART.md配置手册

数据持久化

  • SQLite 数据库: 挂载卷 relay-pulse-data
  • 配置文件: ./config/config.yaml/config/config.yaml(目录挂载,支持热更新)
  • 模板目录: ./templates/app/templates

健康检查

容器自带健康检查:

# 查看健康状态
docker compose ps

# 手动健康检查
curl http://localhost/health

常用命令

# 进入容器
docker compose exec monitor sh

# 重新构建(清理缓存)
docker compose build --no-cache

# 清理并重建
docker compose down -v
docker compose up -d --build

# 更新配置(热更新,无需重启)
vim config/config.yaml
# 监测服务会自动检测配置变更并重载

故障排查

构建失败

# 查看构建日志
docker compose build

# 清理缓存重建
docker compose build --no-cache

服务无法访问

# 检查容器状态
docker compose ps

# 查看日志
docker compose logs -f monitor

# 检查端口占用(默认端口 80)
lsof -i :80

配置未生效

# 确认配置文件挂载
docker compose exec monitor cat /config/config.yaml

# 重启服务
docker compose restart

生产部署建议

1. 资源限制

deploy:
  resources:
    limits:
      cpus: '0.5'
      memory: 256M

2. 日志驱动

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

3. 使用 .env 文件

# .env
MONITOR_88CODE_CC_API_KEY=sk-xxx
MONITOR_DUCKCODING_CC_API_KEY=sk-xxx

多环境部署

SQLite(默认)

docker compose up -d

PostgreSQL

# 1. 准备环境变量文件
cp .env.pg.example .env.pg
vim .env.pg  # 编辑数据库密码等配置

# 2. 启动 PostgreSQL 部署(端口 8081)
docker compose -f docker-compose.pg.yaml up -d

# 3. 访问服务
# Web 界面: http://localhost:8081
# API: http://localhost:8081/api/status

详细的 PostgreSQL 部署说明请参见 PostgreSQL 部署指南

技术细节

Go embed

使用 Go 1.16+ 的 embed 包:

//go:embed frontend/dist
var frontendFS embed.FS

路由策略

  • /api/* → API 处理器
  • /assets/* → 静态资源(embed FS)
  • /* → SPA 回退(index.html)

优势

  • 单一二进制文件,部署简单
  • 无需 Nginx,减少组件复杂度
  • 更小的镜像体积
  • 更快的启动速度
  • 完整的 Go 生态工具支持