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配置文件
创建 config/config.toml:
toml
[app]
name = "DNS-Go"
version = "2.0.0"
env = "production"
[server]
port = 8085
listen_addr = "0.0.0.0"
[dns]
port = 53
listen_addr = "0.0.0.0"
[database]
type = "postgres"
host = "postgres"
port = 5432
user = "dnsgo"
password = "dnsgo_password"
dbname = "dnsgo"
ssl_mode = "disable"
max_open_conns = 100
max_idle_conns = 10
[cache]
type = "valkey"
host = "valkey"
port = 6379
password = ""
db = 0
pool_size = 10
[log]
level = "info"
path = "./logs"
max_size = 100
max_backups = 10
max_age = 30
[security]
jwt_secret = "your-secret-key-change-this"
jwt_expire_hours = 24
password_min_length = 6
login_max_attempts = 5
login_lock_duration = 30常用命令
启动服务
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 证书
配置防火墙
- 限制数据库端口访问
- 仅开放必要端口
定期备份
- 设置自动备份脚本
- 异地备份
监控告警
- 配置资源监控
- 设置告警规则