Skip to content

手工部署 MiaoSpeed

Docker 部署请移步 👉 Docker 文档
完整 环境变量 说明 👉 https://www.miaospeed.com/install/envConf.html
完整 命令行参数 说明 👉 https://www.miaospeed.com/install/command.html#miaospeed-pro-命令行参数说明


0)准备

  • 建议使用 root(或给命令前加 sudo
  • 放置目录:/opt/miaospeed(可自定义)
  • 二进制文件名以下文统一使用:miaospeed.pro
bash
mkdir -p /opt/miaospeed && cd /opt/miaospeed
# 将二进制放到此目录并赋权:
# mv <你的二进制> /opt/miaospeed/miaospeed.pro
chmod +x /opt/miaospeed/miaospeed.pro

1)使用 .env(推荐)

程序原生支持从环境中读取配置,建议集中写到 /opt/miaospeed/.env

bash
cat > /opt/miaospeed/.env <<'EOF'
# 基础必填
BIND=0.0.0.0:9966
TOKEN=your-token

# 常用可选
URL_PATH=/connect
CONNTHREAD=64
ALLOWIP=0.0.0.0/0,::/0
# BLOCKIP=10.0.0.0/8

# 开关类(存在即启用;不需要就删除或注释)
MTLS=1
# NOSPEED=1
# VERBOSE=1
# TW=1

# 资源限制/行为(可选)
# PAUSESECOND=1
# SPEEDLIMIT=1048576

# 证书(如启用自定义证书)
# CERT=/path/cert.pem
# KEY=/path/key.pem

# GeoIP
# MMDB=/opt/miaospeed/GeoLite2-City.mmdb

# 更多变量请看文档:
# https://www.miaospeed.com/install/envConf.html
EOF

快速试跑(一次性验证):
程序会读取环境变量,无需把 .env 展开成命令行:

bash
cd /opt/miaospeed
# 临时导入 env 后前台运行(Ctrl+C 退出)
set -a; . ./.env; set +a; ./miaospeed.pro server

命令行方式(不推荐长期运维)
仅供参考测试,已注释示例见下各小节,保持与 .env 一致的参数。


2)Linux(systemd)

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

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

[Service]
Type=simple
WorkingDirectory=/opt/miaospeed
EnvironmentFile=/opt/miaospeed/.env
# 推荐:程序读取环境变量,直接 server
ExecStart=/opt/miaospeed/miaospeed.pro server

# 可选:命令行参数(示例,长期不推荐;如需请取消注释并删除 EnvironmentFile)
# ExecStart=/opt/miaospeed/miaospeed.pro server \
#   -bind 0.0.0.0:9966 \
#   -token your-token \
#   -path /connect \
#   -connthread 64 \
#   -mtls \
#   -allowip 0.0.0.0/0,::/0
#   # -nospeed -verbose -tw -pausesecond 1 -speedlimit 1048576 -mmdb /path.mmdb -cert /x.pem -key /y.key -blockip 10.0.0.0/8

Restart=always
RestartSec=3
User=root

[Install]
WantedBy=multi-user.target

启用与查看:

bash
systemctl daemon-reload
systemctl enable --now miaospeed
systemctl status miaospeed
journalctl -u miaospeed -f

3)OpenWrt(/etc/init.d)

在 OpenWrt 上使用 procd推荐从 .env 注入环境变量

bash
cat > /etc/init.d/miaospeed <<'EOF'
#!/bin/sh /etc/rc.common

START=99
USE_PROCD=1
WORKDIR="/opt/miaospeed"
ENVFILE="$WORKDIR/.env"
BIN="$WORKDIR/miaospeed.pro"

start_service() {
  [ -x "$BIN" ] || exit 1

  # 推荐:导入 .env 到环境,然后直接 server
  if [ -f "$ENVFILE" ]; then
    set -a; . "$ENVFILE"; set +a
  fi

  procd_open_instance
  procd_set_param command "$BIN" server

  # 可选:若更偏好命令行参数,可用下面两行替换(取消注释):
  # ARGS="-bind 0.0.0.0:9966 -token your-token -path /connect -connthread 64 -mtls"
  # procd_set_param command "$BIN" server $ARGS

  procd_set_param respawn 3600 5 0
  procd_close_instance
}
EOF

chmod +x /etc/init.d/miaospeed
/etc/init.d/miaospeed enable
/etc/init.d/miaospeed start

4)SysVinit(老旧 Linux)

bash
cat > /etc/init.d/miaospeed <<'EOF'
#!/bin/sh
### BEGIN INIT INFO
# Provides:          miaospeed
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: MiaoSpeed Service
### END INIT INFO

WORKDIR="/opt/miaospeed"
BIN="$WORKDIR/miaospeed.pro"
ENVFILE="$WORKDIR/.env"

start() {
  [ -x "$BIN" ] || exit 1
  [ -f "$ENVFILE" ] && { set -a; . "$ENVFILE"; set +a; }
  nohup "$BIN" server >/var/log/miaospeed.log 2>&1 &
  echo "started"
}

stop() {
  pkill -f "$BIN" || true
  echo "stopped"
}

case "$1" in
  start) start ;;
  stop) stop ;;
  restart) stop; start ;;
  *) echo "Usage: /etc/init.d/miaospeed {start|stop|restart}"; exit 1 ;;
esac
EOF

chmod +x /etc/init.d/miaospeed
update-rc.d miaospeed defaults
service miaospeed start

命令行方式(参考)
start() 里的两行替换为:

bash
nohup "$BIN" server -bind 0.0.0.0:9966 -token your-token -path /connect -connthread 64 -mtls >/var/log/miaospeed.log 2>&1 &

5)OpenRC(Alpine / Gentoo)

bash
cat > /etc/init.d/miaospeed <<'EOF'
#!/sbin/openrc-run

name="MiaoSpeed"
description="MiaoSpeed Server"
command="/opt/miaospeed/miaospeed.pro"
pidfile="/var/run/miaospeed.pid"
command_background="yes"

depend() { need net; }

start_pre() {
  # 推荐:导入 .env 后再交给程序自己读取
  [ -f /opt/miaospeed/.env ] && { set -a; . /opt/miaospeed/.env; set +a; }
}

start() {
  ebegin "Starting MiaoSpeed"
  start-stop-daemon --start --background --make-pidfile --pidfile "$pidfile" --exec "$command" -- server
  eend $?
}
EOF

chmod +x /etc/init.d/miaospeed
rc-update add miaospeed default
rc-service miaospeed start

命令行方式(参考)
-- server 改为例如:
-- server -bind 0.0.0.0:9966 -token your-token -path /connect -connthread 64 -mtls


6)Upstart(Ubuntu 14.04 / 旧 Debian)

bash
cat > /etc/init/miaospeed.conf <<'EOF'
description "MiaoSpeed"

start on runlevel [2345]
stop on runlevel [016]
respawn

env WORKDIR=/opt/miaospeed
pre-start script
  test -x $WORKDIR/miaospeed.pro || { stop; exit 1; }
  test -f $WORKDIR/.env && . $WORKDIR/.env
end script

script
  # 推荐:程序读取环境变量,直接 server
  exec $WORKDIR/miaospeed.pro server

  # 命令行方式(参考):
  # exec $WORKDIR/miaospeed.pro server -bind 0.0.0.0:9966 -token your-token -path /connect -connthread 64 -mtls
end script
EOF

initctl reload-configuration
start miaospeed

7)macOS(launchd)

推荐:用包装脚本读取 .env,再由 launchd 拉起。

bash
# /opt/miaospeed/run.sh
cat > /opt/miaospeed/run.sh <<'EOF'
#!/bin/sh
cd /opt/miaospeed
[ -f ./.env ] && { set -a; . ./.env; set +a; }
exec /opt/miaospeed/miaospeed.pro server
# 命令行方式(参考):
# exec /opt/miaospeed/miaospeed.pro server -bind 0.0.0.0:9966 -token your-token -path /connect -connthread 64 -mtls
EOF
chmod +x /opt/miaospeed/run.sh
xml
<!-- /Library/LaunchDaemons/com.miaospeed.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.miaospeed</string>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/miaospeed/run.sh</string>
  </array>
  <key>WorkingDirectory</key><string>/opt/miaospeed</string>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
</dict>
</plist>

加载与启动:

bash
launchctl load /Library/LaunchDaemons/com.miaospeed.plist
launchctl start com.miaospeed

8)升级与排错