摘要:本文为 macOS(MacBook 全机型)专属原创实战教程,手把手教你完全自定义路径部署 Sunny-Ngrok(ngrok.cc)客户端,不移动文件至系统目录、不修改系统权限、不依赖 Linux 兼容命令,编写原生 Mac 启动脚本实现一键启停、进程守护、状态判断。文章包含从零到一完整操作、可直接复制的代码、逐行脚本解析、常见报错排查,适配本地开发、外网调试、Webhook 测试、项目演示等场景,100% 可复现。关键词:MacBook 内网穿透;Sunny-Ngrok;ngrok.cc;macOS 搭建 ngrok;自定义路径启动脚本

前言

在日常开发工作中,外网访问本地服务是高频刚需:微信 / 支付宝支付回调调试、第三方 Webhook 联调、给客户演示本地项目、远程访问家庭开发环境…… 官方 ngrok 在国内网络延迟高、不稳定,而Sunny-Ngrok(ngrok.cc) 是国内口碑极佳的免费内网穿透工具,更适配国内网络环境。

但我翻阅了大量 CSDN、博客园的教程,发现普遍存在三个问题:

  1. 强制将客户端移动到/usr/local/bin系统目录,文件管理混乱、不易备份;
  2. 直接使用 Linux 启动脚本,在 Mac 上因缺少start-stop-daemon命令直接报错;
  3. 脚本无异常处理、无状态判断,容易重复启动、无法正常停止。

基于此,我结合 MacBook 原生环境特性,编写了纯自定义路径、无系统侵入、稳定可靠的部署方案,全程普通用户权限即可运行,文件统一管理,新手也能零失败搭建。

本文核心配置规范(可自由修改)

  • 客户端存放路径:/Users/你的用户名/Software/ngrokcc/
  • 启动脚本存放路径:/Users/你的用户名/Software/ngrokcc/initfile/sunny
  • 支持功能:启动 / 停止 / 重启、进程 PID 管理、重复启动拦截、彩色日志输出

一、环境准备

1.1 适用环境

  • 设备:MacBook 全系列(Intel/M 系列芯片通用)
  • 系统:macOS 全版本(Ventura/Monterey/Sonoma 等均兼容)
  • 工具:Sunny-Ngrok 客户端(ngrok.cc 官网下载)
  • 必备条件:已在 ngrok.cc 注册账号、创建隧道、获取服务器地址隧道密钥

1.2 前置操作

  1. 打开ngrok.cc 官方网站,注册登录后创建隧道;
  2. 下载macOS 版本的 Sunny 客户端;
  3. 在本地创建固定目录(推荐):/Users/你的用户名/Software/ngrokcc
  4. 将下载的sunny客户端文件,放入上述目录中。

1.3 关键参数说明(用户必填)

搭建前请准备好你的专属参数,后续全程使用:

shell

# 服务器地址(ngrok.cc后台获取)
--server=你的服务器地址:端口
# 隧道密钥(你的专属隧道ID)
--key=你的隧道密钥

二、第一步:为 Sunny 客户端赋予执行权限

Mac 系统默认对下载的二进制文件禁用执行权限,这是启动失败的最常见原因,我们先授权。

打开 Mac 自带的「终端」工具,执行以下命令:

bash

运行

# 语法:chmod +x 你的sunny文件完整路径
chmod +x /Users/你的用户名/Software/ngrokcc/sunny

验证权限是否生效

执行命令查看文件权限:

bash

运行

ls -l /Users/你的用户名/Software/ngrokcc/sunny

若输出结果中包含x(可执行权限),代表授权成功:

plaintext

-rwxr-xr-x  1 xxx  staff  1234567  x x xx:xx /Users/你的用户名/Software/ngrokcc/sunny

三、第二步:创建启动脚本存放目录

为了统一管理文件,我们专门创建目录存放启动脚本,执行命令:

bash

运行

# 递归创建目录,不存在则自动新建
mkdir -p /Users/你的用户名/Software/ngrokcc/initfile

三、第三步:编写 Mac 原生启动脚本(核心原创)

⚠️ 重点:Linux 的启动脚本无法直接在 Mac 上运行,本文重写了适配 macOS 的启动脚本,支持后台运行、进程管理、状态判断、彩色输出。

3.1 创建并编辑脚本文件

终端执行命令,用 vim 编辑器创建脚本:

bash

运行

vim /Users/你的用户名/Software/ngrokcc/initfile/sunny

3.2 脚本完整代码(直接复制,替换参数即可)

按键盘i进入编辑模式,粘贴以下原创脚本代码仅需要替换顶部的 4 个配置项

bash

运行

#!/bin/sh
# ==================== Sunny-Ngrok Mac启动脚本 ====================
# 作用:一键启动/停止/重启内网穿透客户端
# 适配系统:macOS 全版本
# ===============================================================

# ====================== 【用户配置区:请修改这里】 ======================
# 客户端名称(无需修改)
NAME="Sunny-Ngrok"
# 你的sunny客户端完整路径
SUNNY_PATH="/Users/你的用户名/Software/ngrokcc/sunny"
# 服务器地址(ngrok.cc后台获取)
SERVER_ADDR="你的服务器地址:端口"
# 隧道密钥(你的专属隧道ID)
TUNNEL_KEY="你的隧道密钥"
# ======================================================================

# 进程PID文件存放路径(自动生成,无需修改)
PID_FILE="/Users/你的用户名/Software/ngrokcc/sunny.pid"

# 校验客户端是否存在且有权限
if [ ! -x "${SUNNY_PATH}" ]; then
    echo -e "\033[31mERROR:客户端不存在或无执行权限,请检查路径!\033[0m"
    exit 1
fi

# 命令逻辑:start/stop/restart
case "$1" in
    start)
        # 判断客户端是否已运行
        if [ -f "${PID_FILE}" ]; then
            PID=$(cat "${PID_FILE}")
            if ps -p ${PID} > /dev/null 2>&1; then
                echo -e "\033[33mWARN:${NAME} 已启动,进程ID:${PID}\033[0m"
                exit 0
            else
                # 清理无效PID文件
                rm -f "${PID_FILE}"
            fi
        fi

        echo -e "\033[32mINFO:正在启动 ${NAME} ...\033[0m"
        # 后台静默启动,不输出日志
        nohup ${SUNNY_PATH} --server=${SERVER_ADDR} --key=${TUNNEL_KEY} > /dev/null 2>&1 &
        # 保存进程ID
        echo $! > "${PID_FILE}"
        echo -e "\033[32mSUCCESS:启动成功!进程ID:$(cat ${PID_FILE})\033[0m"
    ;;

    stop)
        # 判断客户端是否未运行
        if [ ! -f "${PID_FILE}" ]; then
            echo -e "\033[33mWARN:${NAME} 未运行\033[0m"
            exit 0
        fi

        PID=$(cat "${PID_FILE}")
        echo -e "\033[36mINFO:正在停止 ${NAME},进程ID:${PID} ...\033[0m"
        # 安全停止进程
        kill ${PID} > /dev/null 2>&1
        sleep 1
        kill -9 ${PID} > /dev/null 2>&1
        # 删除PID文件
        rm -f "${PID_FILE}"
        echo -e "\033[32mSUCCESS:停止成功\033[0m"
    ;;

    restart)
        echo -e "\033[36mINFO:正在重启 ${NAME} ...\033[0m"
        $0 stop
        sleep 2
        $0 start
    ;;

    *)
        echo -e "\033[31mUSAGE:请使用正确命令:$0 {start|stop|restart}\033[0m"
        exit 1
    ;;
esac

exit 0

3.3 保存并退出编辑器

粘贴完成后:

  1. Esc键退出编辑模式;
  2. 输入:wq并回车,保存文件并退出 vim

四、第四步:为启动脚本赋予执行权限

脚本文件同样需要执行权限,终端执行命令:

bash

运行

chmod 755 /Users/你的用户名/Software/ngrokcc/initfile/sunny

五、第五步:一键启动 / 停止 / 重启 Sunny

所有配置完成!现在可以通过极简命令管理内网穿透服务。

5.1 启动内网穿透

bash

运行

/Users/你的用户名/Software/ngrokcc/initfile/sunny start

✅ 成功输出:

plaintext

INFO:正在启动 Sunny-Ngrok ...
SUCCESS:启动成功!进程ID:xxxx

5.2 停止内网穿透

bash

运行

/Users/你的用户名/Software/ngrokcc/initfile/sunny stop

5.3 重启内网穿透

bash

运行

/Users/你的用户名/Software/ngrokcc/initfile/sunny restart

5.4 查看客户端运行状态

bash

运行

ps aux | grep sunny | grep -v grep

如果输出进程信息,代表客户端正在运行。


六、进阶配置:MacBook 开机自动启动(可选)

如果你需要开机自动启动 Sunny,无需第三方工具,使用 Mac 原生launchd即可实现。

6.1 创建自启配置文件

bash

运行

vim ~/Library/LaunchAgents/com.user.sunny.ngrok.plist

6.2 粘贴配置代码

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.user.sunny.ngrok</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/你的用户名/Software/ngrokcc/initfile/sunny</string>
        <string>start</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

6.3 加载自启配置

bash

运行

launchctl load ~/Library/LaunchAgents/com.user.sunny.ngrok.plist

6.4 取消开机自启

bash

运行

launchctl unload ~/Library/LaunchAgents/com.user.sunny.ngrok.plist

七、高频问题排查(原创实战总结)

问题 1:启动报错「无法验证开发者」

原因:Mac 安全机制阻止未认证开发者程序运行解决

  1. 打开「系统设置」-「隐私与安全性」;
  2. 下滑找到「已阻止系统使用...」,点击「允许」;
  3. 重新执行启动命令。

问题 2:启动提示「权限不足」

解决:重新执行授权命令

bash

运行

chmod +x /Users/你的用户名/Software/ngrokcc/sunny
chmod 755 /Users/你的用户名/Software/ngrokcc/initfile/sunny

问题 3:启动成功但外网无法访问

解决

  1. 检查本地服务是否正常运行(127.0.0.1 访问);
  2. 核对隧道端口与本地服务端口一致;
  3. 检查SERVER_ADDRTUNNEL_KEY是否填写正确;
  4. 执行重启命令:./sunny restart

问题 4:无法停止进程,提示进程不存在

解决:强制清理残留进程

bash

运行

ps aux | grep sunny | grep -v grep | awk '{print $2}' | xargs kill -9
rm -f /Users/你的用户名/Software/ngrokcc/sunny.pid

问题 5:隧道密钥 / 服务器地址错误

解决:登录 ngrok.cc 后台,复制完整正确的参数,替换脚本中的配置项。


八、脚本优势与使用建议

8.1 本脚本原创优势

  1. Mac 原生适配:抛弃 Linux 专用命令,100% 兼容 macOS;
  2. 无系统侵入:所有文件存放在个人目录,备份 / 迁移 / 删除极方便;
  3. 健壮性强:自动判断进程状态、防止重复启动、自动清理无效文件;
  4. 可视化输出:彩色日志,成功 / 警告 / 错误一目了然;
  5. 零学习成本:仅需替换 4 个配置,复制命令即可使用。

8.2 最佳实践建议

  1. 备份:直接打包/Users/你的用户名/Software/ngrokcc目录,换电脑可直接迁移;
  2. 多隧道管理:复制多份脚本,修改不同隧道密钥,管理多个穿透服务;
  3. 日志查看:如需调试,将脚本中/dev/null改为日志文件路径即可;
  4. 定期更新:ngrok.cc 客户端更新时,直接覆盖原文件即可,无需修改脚本。

九、总结

本文是全网最适配 MacBook 的 Sunny-Ngrok 搭建教程,从环境准备、权限配置、脚本编写、服务管理到问题排查,形成了完整的闭环方案。

相比网上通用教程,本方案最大的亮点:✅ 完全自定义路径,不污染系统目录✅ Mac 原生脚本,无兼容性报错✅ 一键启停,稳定可靠✅ 零门槛,新手可直接复制使用

内网穿透是前端 / 后端 / 测试开发者的必备工具,搭配本文的部署方案,你可以轻松实现外网访问本地服务,大幅提升开发调试效率。


原创声明

本文为 CSDN 原创技术文章,未经授权禁止转载、摘抄、洗稿。本文所有代码、步骤均为实战测试后整理,保证真实可用。如果本文对你有帮助,欢迎点赞、收藏、关注~

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐