Skip to content

服务端部署

本页面详细介绍如何在传统服务器上部署 GoSpeedTest。

前置条件

  • Linux/macOS/Windows 服务器
  • Go 1.18+(如需从源码构建)
  • 足够的磁盘空间和内存

获取程序

方式一:下载预编译版本

Gitee Releases 下载对应平台的二进制文件。

bash
# 下载
wget https://gitee.com/liumou_site/GoSpeedTest/releases/download/v1.1.0/GoSpeedTest-linux-amd64

# 赋予执行权限
chmod +x GoSpeedTest-linux-amd64

方式二:从源码构建

bash
# 克隆项目
git clone https://gitee.com/liumou_site/GoSpeedTest.git
cd GoSpeedTest

# 构建
go build -o GoSpeedTest server.go

基本部署

直接运行

bash
# 简单运行
./GoSpeedTest -port 8080

# Release 模式(推荐生产环境)
./GoSpeedTest -port 8080 -mode release

# 自定义 TCP 端口
./GoSpeedTest -port 8080 -tcp-port 12345

验证部署

bash
# 检查服务是否运行
curl http://localhost:8080/health

# 访问 Web 界面
# 浏览器打开 http://your-server-ip:8080

作为系统服务

systemd 配置(Linux)

创建服务文件 /etc/systemd/system/gospeedtest.service

ini
[Unit]
Description=GoSpeedTest Server
After=network.target

[Service]
Type=simple
User=nobody
Group=nogroup
WorkingDirectory=/opt/gospeedtest
ExecStart=/opt/gospeedtest/GoSpeedTest -port 8080 -mode release
Restart=always
RestartSec=10

# 安全设置
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/gospeedtest

[Install]
WantedBy=multi-user.target

安装和启动服务

bash
# 创建工作目录
mkdir -p /opt/gospeedtest
cp GoSpeedTest /opt/gospeedtest/
chown -R nobody:nogroup /opt/gospeedtest

# 重载 systemd
systemctl daemon-reload

# 启动服务
systemctl start gospeedtest

# 设置开机自启
systemctl enable gospeedtest

# 查看状态
systemctl status gospeedtest

# 查看日志
journalctl -u gospeedtest -f

管理服务

bash
# 停止服务
systemctl stop gospeedtest

# 重启服务
systemctl restart gospeedtest

# 重新加载配置
systemctl reload gospeedtest

Windows 服务

使用 NSSM

  1. 下载 NSSM
  2. 以管理员身份运行命令提示符:
cmd
nssm install GoSpeedTest

在弹出的界面中配置:

  • Path: C:\path\to\GoSpeedTest.exe
  • Arguments: -port 8080 -mode release
  • Working directory: C:\path\to\

启动服务

cmd
nssm start GoSpeedTest

macOS LaunchDaemon

创建 /Library/LaunchDaemons/com.gospeedtest.plist

xml
<?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.gospeedtest</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/gospeedtest/GoSpeedTest</string>
        <string>-port</string>
        <string>8080</string>
        <string>-mode</string>
        <string>release</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/opt/gospeedtest</string>
</dict>
</plist>

加载服务:

bash
sudo launchctl load /Library/LaunchDaemons/com.gospeedtest.plist

防火墙配置

Ubuntu/Debian (UFW)

bash
# 开放 HTTP 端口
ufw allow 8080/tcp

# 开放 TCP 测速端口
ufw allow 12306/tcp

# 启用防火墙
ufw enable

# 查看状态
ufw status

CentOS/RHEL (firewalld)

bash
# 开放端口
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=12306/tcp

# 重载配置
firewall-cmd --reload

# 查看状态
firewall-cmd --list-all

iptables

bash
# 添加规则
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 12306 -j ACCEPT

# 保存规则
service iptables save

日志管理

配置日志输出

GoSpeedTest 支持日志输出到文件:

bash
# 输出到文件
./GoSpeedTest -port 8080 2>&1 | tee -a /var/log/gospeedtest.log

日志轮转(logrotate)

创建 /etc/logrotate.d/gospeedtest

/var/log/gospeedtest.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0644 nobody nogroup
    postrotate
        systemctl reload gospeedtest
    endscript
}

性能调优

系统参数优化

编辑 /etc/sysctl.conf

conf
# 增大文件描述符限制
fs.file-max = 1000000

# 增大 TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# TCP 优化
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1

应用配置:

bash
sysctl -p

资源限制

编辑 /etc/security/limits.conf

conf
nobody soft nofile 65536
nobody hard nofile 65536

监控和维护

健康检查

bash
# 定期健康检查
curl -f http://localhost:8080/health || echo "Service down!"

进程监控

bash
# 检查进程
ps aux | grep GoSpeedTest

# 检查端口
netstat -tlnp | grep 8080

更新部署

bash
# 停止服务
systemctl stop gospeedtest

# 备份旧版本
cp /opt/gospeedtest/GoSpeedTest /opt/gospeedtest/GoSpeedTest.bak

# 替换新版本
cp GoSpeedTest-new /opt/gospeedtest/GoSpeedTest
chown nobody:nogroup /opt/gospeedtest/GoSpeedTest
chmod +x /opt/gospeedtest/GoSpeedTest

# 启动服务
systemctl start gospeedtest

# 验证
systemctl status gospeedtest

故障排除

服务无法启动

  • 检查端口是否被占用:netstat -tlnp
  • 查看日志:journalctl -u gospeedtest
  • 验证文件权限

端口被占用

bash
# 查找占用进程
lsof -i :8080

# 或使用 netstat
netstat -tlnp | grep 8080

连接超时

  • 检查防火墙配置
  • 验证云服务商安全组
  • 确认网络连通性

基于 LGPL-3.0 许可证发布