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

配置文件

创建 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.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 许可发布