二进制部署
二进制部署是最简单直接的部署方式,无需 Docker,直接运行编译好的可执行文件。
适用场景
- 不想使用 Docker 的环境
- 对性能有更高要求的场景
- 资源受限的嵌入式设备
- 需要直接访问系统资源的场景
前置条件
- 已完成环境要求检查
- 已准备数据库(PostgreSQL 或 MySQL)
- Linux/macOS/Windows 系统
快速开始
1. 下载二进制文件
从 Gitee Releases 下载对应平台的二进制文件:
| 平台 | 文件名 | 说明 |
|---|---|---|
| Linux AMD64 | dns-go-linux-amd64 | 主流服务器 |
| Linux ARM64 | dns-go-linux-arm64 | ARM 服务器 |
| macOS AMD64 | dns-go-darwin-amd64 | Intel Mac |
| macOS ARM64 | dns-go-darwin-arm64 | Apple Silicon |
| Windows AMD64 | dns-go-windows-amd64.exe | Windows 服务器 |
| FreeBSD AMD64 | dns-go-freebsd-amd64 | FreeBSD 系统 |
下载命令(Linux):
# 下载最新版本
wget https://gitee.com/liumou_site/dns-go/releases/download/v1.0.0/dns-go-linux-amd64
# 或下载到指定目录
wget -O /usr/local/bin/dns-go \
https://gitee.com/liumou_site/dns-go/releases/download/v1.0.0/dns-go-linux-amd642. 准备配置文件
创建配置目录和文件:
# 创建目录
mkdir -p /opt/dns-go/config
mkdir -p /opt/dns-go/data
mkdir -p /opt/dns-go/logs
# 下载配置模板
cd /opt/dns-go
curl -o config/config.toml \
https://gitee.com/liumou_site/dns-go/raw/master/vitepress/public/config.example.toml编辑配置文件:
vim config/config.toml关键配置项:
[database]
driver = "postgres"
host = "127.0.0.1"
port = 5432
username = "dnsgo"
password = "your_secure_password" # ⚠️ 必须修改
database = "dns_go"
sslmode = "disable"
[jwt]
secret_key = "your_jwt_secret_key_min_32_chars" # ⚠️ 必须修改
expires_in = 24
[valkey]
ip = "127.0.0.1"
port = 6379
password = ""
db = 0
local_db = 03. 初始化数据库
PostgreSQL:
# 创建用户
sudo -u postgres psql -c "CREATE USER dnsgo WITH PASSWORD 'your_password';"
# 创建数据库
sudo -u postgres psql -c "CREATE DATABASE dns_go OWNER dnsgo;"MySQL:
mysql -u root -pCREATE USER 'dnsgo'@'localhost' IDENTIFIED BY 'your_password';
CREATE DATABASE dns_go CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON dns_go.* TO 'dnsgo'@'localhost';
FLUSH PRIVILEGES;4. 运行程序
Linux/macOS:
# 添加执行权限
chmod +x dns-go-linux-amd64
# 运行程序
./dns-go-linux-amd64
# 或使用完整路径
/opt/dns-go/dns-go-linux-amd64Windows:
# 在 PowerShell 中运行
.\dns-go-windows-amd64.exe
# 或在 CMD 中
dns-go-windows-amd64.exe5. 验证部署
# 检查程序是否在运行
ps aux | grep dns-go
# 查看监听端口
netstat -tlnp | grep dns-go
# 测试 Web 服务
curl http://localhost:8085/api/health
# 测试 DNS 服务
dig @localhost www.example.com访问 Web 界面:http://localhost:8085
默认账号:admin / admin123
生产环境部署
使用内置 -s 参数注册为 systemd 服务(Linux 推荐)
从 v1.0.0 开始,DNS-Go 内置了 systemd 服务注册/卸载能力,只需一条命令即可完成服务安装、启动、开机自启配置。
前置准备:
# 创建运行用户与目录(仅首次部署需要)
sudo useradd -r -s /bin/false -d /opt/dns-go dnsgo 2>/dev/null
sudo mkdir -p /opt/dns-go/{config,data,logs}
sudo cp /path/to/dns-go-linux-amd64 /opt/dns-go/dns-go
sudo chmod +x /opt/dns-go/dns-go
sudo chown -R dnsgo:dnsgo /opt/dns-go一键注册并启动服务:
sudo /opt/dns-go/dns-go -s执行后程序会自动完成以下动作:
- 停止并移除已存在的同名服务(如有)
- 生成
/etc/systemd/system/dns-go.service单元文件 - 启用
Restart=always与开机自启 - 立即启动服务并打印服务管理命令参考
成功输出示例:
检测到已注册的服务,正在停止并重新注册...
服务注册成功
服务启动成功
============================================================
服务管理命令
============================================================
服务名称: dns-go
可执行文件: /opt/dns-go/dns-go
[状态查看]
systemctl status dns-go
[启动/停止/重启]
systemctl start dns-go
systemctl stop dns-go
systemctl restart dns-go
[日志查看]
journalctl -u dns-go -f
journalctl -u dns-go -n 200 --no-pager
[开机自启]
systemctl enable dns-go
systemctl disable dns-go
[卸载服务]
sudo /opt/dns-go/dns-go -u
============================================================使用自定义配置注册:
sudo /opt/dns-go/dns-go -s -config /opt/dns-go/config/config.toml -port 8085-s 标志会自动从参数列表中剔除后透传到 service 单元的 ExecStart,因此服务进程会使用相同的配置参数启动。
卸载服务:
sudo /opt/dns-go/dns-go -u卸载会先停止服务,再删除 /etc/systemd/system/dns-go.service 单元文件(不会删除二进制与配置文件)。
手动编写 systemd 单元(高级 / 自定义场景)
如需自定义单元文件参数(资源限制、Security 策略、依赖顺序等),可手动编写:
sudo tee /etc/systemd/system/dns-go.service > /dev/null <<EOF
[Unit]
Description=DNS-Go DNS Management Platform
After=network.target postgresql.service
Wants=postgresql.service
[Service]
Type=simple
User=dnsgo
Group=dnsgo
WorkingDirectory=/opt/dns-go
ExecStart=/opt/dns-go/dns-go-linux-amd64
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=dns-go
# Security
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/dns-go/data /opt/dns-go/logs
[Install]
WantedBy=multi-user.target
EOF创建运行用户:
# 创建用户
sudo useradd -r -s /bin/false -d /opt/dns-go dnsgo
# 设置目录权限
sudo chown -R dnsgo:dnsgo /opt/dns-go启动服务:
# 重新加载 systemd
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start dns-go
# 设置开机自启
sudo systemctl enable dns-go
# 查看状态
sudo systemctl status dns-go
# 查看日志
sudo journalctl -u dns-go -fTIP
若同时存在手动单元与 -s 注册的单元,建议统一使用 -s 管理以避免冲突;手动单元需自行负责后续的更新与清理。
使用 Windows 服务(Windows)
使用 NSSM 将程序注册为 Windows 服务:
# 下载 NSSM
wget https://nssm.cc/release/nssm-2.24.zip
# 解压并复制到系统目录
copy nssm.exe C:\Windows\System32\
# 创建服务
nssm install DNS-Go
# 在弹出的窗口中配置:
# Path: C:\dns-go\dns-go-windows-amd64.exe
# Startup directory: C:\dns-go
# Arguments: (留空)
# 启动服务
nssm start DNS-Go
# 设置开机自启
nssm set DNS-Go Start SERVICE_AUTO_START使用 launchd(macOS)
创建 plist 文件:
sudo tee /Library/LaunchDaemons/com.dns-go.plist > /dev/null <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.dns-go</string>
<key>ProgramArguments</key>
<array>
<string>/opt/dns-go/dns-go-darwin-amd64</string>
</array>
<key>WorkingDirectory</key>
<string>/opt/dns-go</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/opt/dns-go/logs/stdout.log</string>
<key>StandardErrorPath</key>
<string>/opt/dns-go/logs/stderr.log</string>
</dict>
</plist>
EOF启动服务:
# 加载服务
sudo launchctl load /Library/LaunchDaemons/com.dns-go.plist
# 启动服务
sudo launchctl start com.dns-go
# 查看状态
sudo launchctl list | grep dns-go常用操作
查看日志
Linux(systemd):
# 实时查看日志
sudo journalctl -u dns-go -f
# 查看最近 100 行
sudo journalctl -u dns-go -n 100
# 查看今天的日志
sudo journalctl -u dns-go --since today直接运行模式:
# 程序输出到终端,直接查看
./dns-go-linux-amd64
# 或重定向到文件
./dns-go-linux-amd64 > /opt/dns-go/logs/app.log 2>&1 &停止服务
systemd:
sudo systemctl stop dns-go直接运行:
# 查找进程 PID
ps aux | grep dns-go
# 结束进程
kill <PID>
# 强制结束
kill -9 <PID>重启服务
systemd:
sudo systemctl restart dns-golaunchd:
sudo launchctl stop com.dns-go
sudo launchctl start com.dns-go更新版本
# 1. 停止服务
sudo systemctl stop dns-go
# 2. 备份当前版本
cp /opt/dns-go/dns-go /opt/dns-go/dns-go.backup
# 3. 下载新版本
wget -O /opt/dns-go/dns-go \
https://gitee.com/liumou_site/dns-go/releases/download/v1.0.0/dns-go-linux-amd64
# 4. 添加执行权限
chmod +x /opt/dns-go/dns-go
# 5. 启动服务
sudo systemctl start dns-go
# 6. 验证版本
/opt/dns-go/dns-go -version提示:若通过
-s注册的服务,可直接重新执行sudo /opt/dns-go/dns-go -s完成新二进制替换与服务重启。
命令行参数
DNS-Go 支持以下命令行参数:
| 参数 | 说明 | 示例 |
|---|---|---|
--version / -version | 显示版本信息 | ./dns-go -version |
--config / -config | 指定配置文件路径 | ./dns-go -config /path/to/config.toml |
--listen-addr / -listen-addr | 监听地址 | ./dns-go -listen-addr 0.0.0.0 |
--port / -port | Web 服务端口 | ./dns-go -port 8080 |
--help / -h | 显示帮助信息 | ./dns-go -h |
-reset-pwd | 重置 admin 密码(需配合 -pwd) | ./dns-go -reset-pwd -pwd newpass |
-unlock-user | 解锁指定用户名的用户 | ./dns-go -unlock-user admin |
-s | 注册/更新 systemd 服务(需 root,自动剔除自身后透传其他参数) | sudo ./dns-go -s |
-u | 卸载 systemd 服务(需 root) | sudo ./dns-go -u |
服务注册与卸载
-s 与 -u 是 v1.0.0 新增的服务管理快捷方式,仅在 Linux 上生效,依赖 systemd。
注册服务:
sudo /opt/dns-go/dns-go -s成功执行后,服务将被注册为 dns-go.service,立即启动并设为开机自启;程序会在终端打印完整的管理命令参考(systemctl / journalctl),便于复制粘贴使用。
带自定义配置注册:
sudo /opt/dns-go/dns-go -s -config /opt/dns-go/config/config.toml -port 8085-s 标志会在透传给 ExecStart 时自动从参数列表中剔除,确保服务进程启动时不会重复触发注册逻辑。
卸载服务:
sudo /opt/dns-go/dns-go -u卸载会停止服务并删除 /etc/systemd/system/dns-go.service 单元文件,二进制文件、配置文件、数据目录不会被删除。
WARNING
-s/-u必须在 root 权限下执行,否则程序会立即报错退出。- Windows / macOS 不支持
-s/-u,请使用系统自带的服务管理工具(参见下方对应章节)。
指定配置文件
./dns-go-linux-amd64 --config /etc/dns-go/config.toml修改监听端口
# 修改 Web 端口
./dns-go-linux-amd64 --port 8080
# 修改 DNS 端口(需要 root 权限)
sudo ./dns-go-linux-amd64 --dns-port 53故障排查
程序无法启动
# 检查配置文件
/opt/dns-go/dns-go-linux-amd64 --config /opt/dns-go/config/config.toml
# 检查配置文件权限
ls -la /opt/dns-go/config/
# 检查端口占用
sudo netstat -tlnp | grep -E '8085|53'权限不足
# 绑定 53 端口需要 root 权限
sudo ./dns-go-linux-amd64
# 或使用 setcap 授权
sudo setcap cap_net_bind_service=+ep /opt/dns-go/dns-go-linux-amd64
# 之后可以普通用户运行
./dns-go-linux-amd64数据库连接失败
# 测试数据库连接
psql -h localhost -U dnsgo -d dns_go -c "SELECT 1;"
# 检查数据库服务状态
sudo systemctl status postgresql
# 检查数据库监听地址
sudo netstat -tlnp | grep 5432日志文件权限
# 确保日志目录可写
sudo chown -R dnsgo:dnsgo /opt/dns-go/logs
# 或设置适当的权限
sudo chmod 755 /opt/dns-go/logs性能优化
系统调优
Linux 系统参数优化:
# 编辑 /etc/sysctl.conf
sudo tee -a /etc/sysctl.conf <<EOF
# 增加文件描述符限制
fs.file-max = 65535
# 优化网络参数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
EOF
# 应用配置
sudo sysctl -p资源限制
修改 systemd 服务文件:
sudo tee -a /etc/systemd/system/dns-go.service <<EOF
# 资源限制
LimitNOFILE=65535
LimitNPROC=4096
MemoryLimit=1G
EOF
sudo systemctl daemon-reload
sudo systemctl restart dns-go相关文档
- 环境要求 - 了解部署前的准备工作
- Docker 部署 - 使用 Docker 部署
- Docker Compose 部署 - 一键部署所有服务