Docker Compose 部署
本文档详细介绍如何使用 Docker Compose 部署 DNS-Go 系统。
环境要求
- Docker 20.10+
- Docker Compose 2.0+
- 至少 2GB 可用内存
- 至少 10GB 可用磁盘空间
端口说明
| 端口 | 协议 | 用途 | 必需 |
|---|---|---|---|
| 8085 | TCP | Web 管理界面 | 是 |
| 53 | UDP | DNS 查询服务 | 是 |
| 53 | TCP | DNS 查询服务 | 是 |
| 5432 | TCP | PostgreSQL | 可选 |
| 6379 | TCP | Valkey | 可选 |
快速部署
1. 下载配置文件
bash
# 创建项目目录
mkdir dns-go && cd dns-go
# 下载 docker-compose.yml
wget https://gitee.com/liumou_site/dns-go/raw/master/docker-compose.yml
# 或手动创建 docker-compose.yml 文件2. 创建数据目录
bash
mkdir -p data/postgres data/logs3. 启动服务
bash
docker-compose up -d4. 验证部署
bash
# 查看容器状态
docker-compose ps
# 查看日志
docker-compose logs -f dns-godocker-compose.yml 详解
yaml
version: '3.8'
services:
# PostgreSQL 数据库
postgres:
image: postgres:16-alpine
container_name: dns-go-postgres
restart: unless-stopped
environment:
POSTGRES_USER: dnsgo
POSTGRES_PASSWORD: dnsgo_password
POSTGRES_DB: dnsgo
volumes:
- ./data/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- dns-go-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dnsgo"]
interval: 10s
timeout: 5s
retries: 5
# Valkey 缓存(Redis 替代品)
valkey:
image: valkey/valkey:8-alpine
container_name: dns-go-valkey
restart: unless-stopped
volumes:
- ./data/valkey:/data
ports:
- "6379:6379"
networks:
- dns-go-network
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# DNS-Go 主服务
dns-go:
image: ccr.ccs.tencentyun.com/liumou/dns-go:latest
container_name: dns-go
restart: unless-stopped
ports:
- "8085:8085"
- "53:53/udp"
- "53:53/tcp"
volumes:
- ./config:/app/config
- ./data:/app/data
- ./logs:/app/logs
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=dnsgo
- DB_PASSWORD=dnsgo_password
- DB_NAME=dnsgo
- CACHE_HOST=valkey
- CACHE_PORT=6379
depends_on:
postgres:
condition: service_healthy
valkey:
condition: service_healthy
networks:
- dns-go-network
networks:
dns-go-network:
driver: bridge配置文件说明
重要:DNS-Go 使用单一配置文件 config/config.toml,采用标准配置模板格式。
配置生成方式
方式1:自动配置生成(推荐)
首次运行时,系统会自动检测配置文件。如果 config/config.toml 不存在,程序会:
- 自动创建
config目录 - 生成标准配置模板并退出
- 提示用户修改配置后重新启动
bash
# 1. 创建配置目录
mkdir -p config
# 2. 首次运行生成配置模板
./dns-go-app
# 控制台输出:
# 配置文件不存在,已自动生成模板:./config/config.toml
# 请根据实际情况修改配置后重新启动方式2:手动下载配置模板
bash
# 创建配置目录
mkdir -p config
# 下载标准配置模板
curl -o config/config.toml https://gitee.com/liumou_site/dns-go/raw/master/vitepress/public/config.example.toml配置段说明
DNS-Go 支持以下配置段:
| 配置段 | 必需 | 说明 |
|---|---|---|
[database] | ✅ | 数据库连接配置 |
[mysql] | 条件 | MySQL 特定配置(使用 MySQL 时必需) |
[postgres] | 条件 | PostgreSQL 特定配置(使用 PostgreSQL 时必需) |
[valkey] | ❌ | Valkey/Redis 缓存配置 |
[jwt] | ✅ | JWT 认证配置 |
关键配置项
数据库配置 [database]
toml
[database]
driver = "postgres" # 数据库驱动:postgres 或 mysql
host = "127.0.0.1" # 数据库主机
port = 5432 # 数据库端口
username = "postgres" # 数据库用户名
password = "your_password" # ⚠️ 必须修改:数据库密码
database = "dns_go" # 数据库名称
sslmode = "disable" # SSL 模式(PostgreSQL)JWT 配置 [jwt]
toml
[jwt]
secret_key = "your_secret_key_min_32_chars" # ⚠️ 必须修改:JWT 密钥
expires_in = 24 # Token 过期时间(小时)安全提醒
⚠️ 必须修改的配置项:
database.password- 设置强密码jwt.secret_key- 至少32位随机字符串valkey.password- 如果缓存设置了密码
环境变量方式(推荐用于 Docker)
除了配置文件,您也可以通过环境变量设置:
bash
# 数据库配置
export DB_HOST=localhost
export DB_PORT=5432
export DB_USER=postgres
export DB_PASSWORD=your_secure_password
export DB_NAME=dns_go
# 缓存配置
export CACHE_HOST=localhost
export CACHE_PORT=6379
export CACHE_PASSWORD=
# JWT配置
export JWT_SECRET_KEY=your_jwt_secret_min_32_chars环境变量会覆盖配置文件中的对应值。
常用命令
启动服务
bash
docker-compose up -d停止服务
bash
docker-compose down查看日志
bash
# 查看所有服务日志
docker-compose logs
# 查看特定服务日志
docker-compose logs dns-go
# 实时跟踪日志
docker-compose logs -f dns-go重启服务
bash
# 重启所有服务
docker-compose restart
# 重启特定服务
docker-compose restart dns-go更新镜像
bash
# 拉取最新镜像
docker-compose pull
# 重新创建容器
docker-compose up -d查看状态
bash
docker-compose ps数据备份
备份数据库
bash
# 创建备份目录
mkdir -p backup
# 备份 PostgreSQL
docker exec dns-go-postgres pg_dump -U dnsgo dnsgo > backup/dnsgo_$(date +%Y%m%d_%H%M%S).sql恢复数据库
bash
# 恢复 PostgreSQL
docker exec -i dns-go-postgres psql -U dnsgo dnsgo < backup/dnsgo_20240101_120000.sql升级指南
1. 备份数据
bash
mkdir -p backup
docker exec dns-go-postgres pg_dump -U dnsgo dnsgo > backup/dnsgo_backup.sql2. 拉取新镜像
bash
docker-compose pull3. 重启服务
bash
docker-compose up -d4. 验证升级
bash
docker-compose logs dns-go故障排查
服务无法启动
bash
# 查看详细日志
docker-compose logs --tail=100 dns-go
# 检查端口占用
netstat -tlnp | grep -E '8085|53'
# 检查容器状态
docker-compose ps数据库连接失败
bash
# 检查 PostgreSQL 状态
docker-compose logs postgres
# 测试数据库连接
docker exec -it dns-go-postgres psql -U dnsgo -d dnsgo -c "SELECT 1"DNS 服务无响应
bash
# 测试 DNS 查询
dig @localhost www.example.com
# 检查 DNS 端口
docker-compose logs dns-go | grep -i dns生产环境建议
修改默认密码
- 数据库密码
- JWT Secret
- 管理员密码
启用 HTTPS
- 使用反向代理(Nginx/Traefik)
- 配置 SSL 证书
配置防火墙
- 限制数据库端口访问
- 仅开放必要端口
定期备份
- 设置自动备份脚本
- 异地备份
监控告警
- 配置资源监控
- 设置告警规则