Skip to content

Docker Compose 部署

本文档详细介绍如何使用 Docker Compose 部署 DNS-Go 系统。

环境要求

  • Docker 20.10+
  • Docker Compose 2.0+
  • 至少 2GB 可用内存
  • 至少 10GB 可用磁盘空间

端口说明

端口协议用途必需
8085TCPWeb 管理界面
53UDPDNS 查询服务
53TCPDNS 查询服务
5432TCPPostgreSQL可选
6379TCPValkey可选

快速部署

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/logs

3. 启动服务

bash
docker-compose up -d

4. 验证部署

bash
# 查看容器状态
docker-compose ps

# 查看日志
docker-compose logs -f dns-go

docker-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 不存在,程序会:

  1. 自动创建 config 目录
  2. 生成标准配置模板并退出
  3. 提示用户修改配置后重新启动
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.sql

2. 拉取新镜像

bash
docker-compose pull

3. 重启服务

bash
docker-compose up -d

4. 验证升级

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

生产环境建议

  1. 修改默认密码

    • 数据库密码
    • JWT Secret
    • 管理员密码
  2. 启用 HTTPS

    • 使用反向代理(Nginx/Traefik)
    • 配置 SSL 证书
  3. 配置防火墙

    • 限制数据库端口访问
    • 仅开放必要端口
  4. 定期备份

    • 设置自动备份脚本
    • 异地备份
  5. 监控告警

    • 配置资源监控
    • 设置告警规则

基于 MIT 许可发布