DAMOYOLO-S模型内网穿透部署:实现公网访问本地GPU服务器

张开发
2026/4/7 13:39:29 15 分钟阅读

分享文章

DAMOYOLO-S模型内网穿透部署:实现公网访问本地GPU服务器
DAMOYOLO-S模型内网穿透部署实现公网访问本地GPU服务器如果你有一台性能强劲的本地GPU服务器上面跑着像DAMOYOLO-S这样的目标检测模型但苦于只能在局域网里用那感觉就像守着金矿却没法变现。无论是想给远程的同事做个演示还是希望将模型能力集成到公网的某个应用里都会遇到“墙”的阻碍。今天我们就来解决这个问题。不需要购买昂贵的云服务器也不用折腾复杂的网络配置通过一种叫做“内网穿透”的技术就能安全、稳定地将你本地的模型服务暴露到公网上让全世界或者你指定的人都能访问。整个过程就像给你的本地服务装了一个“专用快递通道”外面的人通过这个通道的地址就能直接找到你家里的服务器。听起来很复杂别担心这篇教程会手把手带你走一遍。我们假设你已经在本地成功部署了DAMOYOLO-S的API服务比如用FastAPI封装了一个/predict接口接下来要做的就是为这个服务开一扇通往公网的门。1. 内网穿透给你的本地服务开一扇门在开始动手之前我们先花几分钟搞清楚我们要用的工具到底是干什么的。这能帮你更好地理解每一步操作的意义而不是机械地复制命令。简单来说你的家庭或公司网络就像一个私人小区路由器就是小区的门卫。外面的互联网公网无法直接访问小区内的某户人家你的GPU服务器因为门卫不认识他们也没有你家的具体门牌号公网IP。内网穿透工具就是在公网上租一个“快递驿站”具有公网IP的服务器并在这个驿站和你家之间建立一条专属的、加密的快递通道。当公网上的用户想访问你的服务时他们先去“快递驿站”敲门。驿站的工作人员通过专属通道迅速把你的请求取回来再把服务器的响应通过通道送回去。对于用户来说他感觉就像直接访问了“驿站”的地址一样。市面上这类工具有很多比如frp、ngrok、花生壳等。它们核心原理相似但配置方式和特点各有不同。考虑到稳定性、可控性和免费额度本教程将选择frp作为主要工具进行讲解。它开源、免费并且配置灵活非常适合开发者。为了完成整个部署我们需要准备两样东西一台具有公网IP的服务器这就是前面说的“快递驿站”。你可以购买一台最基础的云服务器比如某云厂商的入门级ECS月成本很低。这是整个环节中唯一可能需要花钱的地方。你的本地GPU服务器也就是已经部署好DAMOYOLO-S API服务的那台机器。接下来的所有步骤都将围绕配置这两台机器展开。2. 搭建中转站配置公网服务器服务端首先我们来设置“快递驿站”也就是公网服务器。这台服务器将运行 frp 的服务端组件frps。2.1 下载并安装 frp通过SSH连接到你的公网服务器。我们通常选择 Linux 系统这里以最常见的 x86_64 架构为例。# 创建一个专门的工作目录 mkdir -p ~/frp cd ~/frp # 从GitHub发布页下载最新版本的frp。请访问 https://github.com/fatedier/frp/releases # 查看最新版本号替换下面命令中的 v0.52.3 wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz # 解压下载的文件 tar -zxvf frp_0.52.3_linux_amd64.tar.gz # 进入解压后的目录这里目录名会随版本变化 cd frp_0.52.3_linux_amd64解压后你会看到一堆文件其中frps和frps.ini就是我们服务端需要的。2.2 配置服务端现在我们来编辑服务端配置文件frps.ini。你可以用vim或nano编辑器。nano frps.ini将文件内容修改为如下配置。你需要重点关注几个自定义的地方[common] # frp服务端监听的端口客户端用来连接这个端口 bind_port 7000 # 仪表盘端口用于在网页上查看frp状态可选但推荐 dashboard_port 7500 # 仪表盘的登录用户名和密码 dashboard_user admin dashboard_pwd your_strong_password_here # 认证令牌相当于客户端连接服务端的密码增强安全性 # 请务必修改为一个复杂的字符串 token your_super_secret_token_here # 设置通过frp暴露的HTTP/HTTPS服务端口 vhost_http_port 8080 vhost_https_port 8443 # 日志设置 log_file ./frps.log log_level info log_max_days 3配置项说明bind_port这是 frp 的“控制通道”端口必须开放。dashboard_port管理后台端口方便你查看有哪些服务正在穿透。token这是最重要的安全项确保只有知道令牌的客户端才能连接你的服务器。vhost_http_port当你想用域名访问本地HTTP服务比如DAMOYOLO-S的API时用户将通过访问服务器IP的这个端口来触发穿透。2.3 启动服务端并设置开机自启保存配置文件后可以先在前台测试启动./frps -c ./frps.ini如果看到类似“frps started successfully”的日志说明服务端启动成功。按CtrlC停止。为了让服务在后台持续运行并且服务器重启后能自动启动我们使用systemd来管理。创建 systemd 服务文件sudo nano /etc/systemd/system/frps.service写入以下内容注意修改ExecStart的路径为你实际的 frps 路径[Unit] DescriptionFrp Server Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/home/your_username/frp/frp_0.52.3_linux_amd64/frps -c /home/your_username/frp/frp_0.52.3_linux_amd64/frps.ini [Install] WantedBymulti-user.target启用并启动服务# 重新加载systemd配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable frps # 立即启动服务 sudo systemctl start frps # 查看服务状态 sudo systemctl status frps看到active (running)的状态公网服务器端的配置就大功告成了。别忘了去云服务器的防火墙安全组设置里放行你配置的7000、7500、8080等端口。3. 连接通道配置本地GPU服务器客户端现在回到你的本地GPU服务器我们来配置 frp 的客户端frpc让它去连接刚才搭建好的“驿站”。3.1 下载并配置客户端同样地先下载 frp 客户端。步骤和服务端类似mkdir -p ~/frp cd ~/frp wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz tar -zxvf frp_0.52.3_linux_amd64.tar.gz cd frp_0.52.3_linux_amd64这次我们关注的是frpc和frpc.ini文件。编辑客户端配置nano frpc.ini写入以下配置请根据你的实际情况修改[common] # 公网服务器的IP地址和连接端口 server_addr your_public_server_ip server_port 7000 # 必须和服务端配置的token一致 token your_super_secret_token_here # 本地DAMOYOLO-S API服务配置 [damoyolo-api] type http local_ip 127.0.0.1 # 假设你的DAMOYOLO-S API在本地的8000端口运行 local_port 8000 # 自定义子域名访问时将用于拼接URL # 访问时格式为http://your_public_server_ip:8080 # 但更常用的是配置自定义域名见下一节 custom_domains damoyolo.your-public-server.com # 可选如果你还需要暴露一个SSH服务到公网可以这样配置 [ssh] type tcp local_ip 127.0.0.1 local_port 22 # 在公网服务器上监听的远程端口 remote_port 6000关键配置解析server_addr填你公网服务器的IP地址。[damoyolo-api]这是一个“服务”配置段名字可以自定。type http表示我们要暴露的是一个HTTP服务。local_port 8000这是你本地DAMOYOLO-S API服务例如用uvicorn main:app --host 0.0.0.0 --port 8000启动的监听的端口。custom_domains这里我们先填一个待会儿会用到的域名。如果你还没有域名可以先填公网服务器IP访问时用http://服务器IP:8080。3.2 启动客户端保存配置后启动客户端进行测试./frpc -c ./frpc.ini如果连接成功你会看到“start proxy success”之类的日志。同样我们也用 systemd 来管理客户端确保它持续运行。创建服务文件的过程和服务端类似只需将frps替换为frpc并指向客户端的配置文件路径。至此最核心的内网穿透已经配置完成。现在理论上你已经可以通过http://你的公网服务器IP:8080来访问你本地的DAMOYOLO-S API了。你可以用另一台不在局域网的电脑尝试访问http://公网IP:8080/docs如果你的API是FastAPI自动生成的文档页看看是否能打开。4. 进阶配置绑定域名与启用HTTPS通过IP和端口访问虽然能用但不够友好也不安全。我们通常希望使用一个像api.yourdomain.com这样的域名并且启用HTTPS加密。4.1 配置域名解析首先你需要拥有一个域名。在域名服务商如阿里云、腾讯云那里添加一条A记录解析记录类型A主机记录例如damoyolo这取决于你想用damoyolo.yourdomain.com还是其他子域名记录值填写你的公网服务器IP地址TTL默认即可解析生效需要几分钟到几小时不等。4.2 修改frp配置以使用域名服务端无需修改frps.ini因为它已经监听了8080端口用于HTTP服务。客户端修改frpc.ini中的[damoyolo-api]段[damoyolo-api] type http local_ip 127.0.0.1 local_port 8000 # 将这里的域名改为你刚设置解析的真实域名 custom_domains damoyolo.yourdomain.com重启 frpc 客户端使配置生效。4.3 使用Nginx配置HTTPS推荐直接在 frp 上配置HTTPS比较麻烦。更通用的做法是在公网服务器上使用 Nginx 作为反向代理和SSL终端。在公网服务器上安装 Nginxsudo apt update sudo apt install nginx -y为你的域名申请SSL证书。最方便的是使用Let‘s Encrypt的certbot工具sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d damoyolo.yourdomain.com按照交互提示操作certbot 会自动为你下载证书并修改 Nginx 配置。手动配置 Nginx如果 certbot 没有自动配置好。创建一个新的配置文件sudo nano /etc/nginx/sites-available/damoyolo写入以下配置其核心思想是Nginx 监听 443 (HTTPS) 端口接收访问damoyolo.yourdomain.com的请求然后将这些请求转发给本机即公网服务器的8080端口而这个8080端口正是 frp 服务端监听的、用于转发HTTP请求的端口。server { listen 443 ssl http2; server_name damoyolo.yourdomain.com; # SSL证书路径由certbot自动生成 ssl_certificate /etc/letsencrypt/live/damoyolo.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/damoyolo.yourdomain.com/privkey.pem; # 代理设置 location / { # 将请求转发到frps监听的http端口 proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # 可选将HTTP请求重定向到HTTPS server { listen 80; server_name damoyolo.yourdomain.com; return 301 https://$server_name$request_uri; }启用配置并测试sudo ln -s /etc/nginx/sites-available/damoyolo /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置语法 sudo systemctl reload nginx # 重载Nginx现在你就可以通过https://damoyolo.yourdomain.com安全地访问你本地的 DAMOYOLO-S API 服务了。5. 安全加固与故障排查将本地服务暴露到公网安全是重中之重。除了上面已经做的设置复杂token、使用HTTPS还有几点建议防火墙最小化在公网服务器上只开放必要的端口如22, 443, 7500。关闭 frps 的8080端口对外访问因为我们已经用Nginx的443端口代理了。使用非标准端口可以将 frps 的bind_port如7000改为一个不常见的端口。定期更新关注 frp 的 GitHub 发布页及时更新到新版本。监控日志定期检查frps.log和frpc.log看看有无异常连接尝试。常见问题排查客户端连接失败检查公网服务器IP、端口7000是否正确安全组/防火墙是否放行token是否两端一致。能连接但无法访问API检查客户端配置中的local_port是否是你本地API服务真实运行的端口。可以在本地服务器上用curl http://127.0.0.1:8000/docs测试API本身是否正常。域名访问失败检查域名解析是否生效用ping damoyolo.yourdomain.com看IP是否正确检查Nginx配置和证书是否有效。服务意外中断检查 systemd 服务状态sudo systemctl status frps/frpc查看日志journalctl -u frps -f。6. 写在最后走完这一整套流程你的本地DAMOYOLO-S模型就不再是“深闺中的宝藏”了。通过内网穿透这条安全的专用隧道它已经具备了对外提供服务的能力。无论是用于远程演示、移动端调用还是作为微服务集成到更大的系统中都变得轻而易举。整个过程最关键的其实就三步找一台有公网IP的服务器做中转、在两端配置好 frp、最后用 Nginx 穿上 HTTPS 的“安全外衣”。虽然步骤看起来不少但每一步都有其明确的目的。自己动手配置一遍以后遇到任何需要将本地服务公开的场景你都能举一反三。当然这种方案适合个人开发者或小团队。如果访问量非常大或者对稳定性有极高要求你可能需要考虑负载均衡、高可用等更复杂的架构。但对于绝大多数让本地AI模型“走出去”的需求这套组合拳已经足够强大和实用了。现在你的GPU服务器和它承载的模型已经准备好迎接来自公网的挑战了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章