MiniCPM-o-4.5-nvidia-FlagOS服务端部署实战:内网穿透实现远程安全访问

最近在折腾一个挺有意思的项目,把MiniCPM-o-4.5-nvidia这个模型部署在了本地服务器上,跑起来效果不错。但问题来了,模型和服务都在内网,我总不能每次想用或者给同事演示的时候,都让他们连到公司内网或者我自己的局域网里来吧?这太不方便了。

后来我研究了一下,发现用“内网穿透”这个法子能完美解决这个问题。简单说,就是通过一个“中间人”服务器,把我内网的服务安全地“映射”到公网上,这样我在外面用手机或者电脑,就能像访问普通网站一样访问我内网的模型服务了。整个过程听起来有点技术含量,但其实一步步做下来,发现也没那么复杂。

这篇文章,我就把自己从零开始,用frp这个工具实现内网穿透,把MiniCPM-o-4.5-nvidia的FlagOS服务端暴露到公网的全过程记录下来。我会尽量用大白话把每一步都讲清楚,包括怎么准备服务器、怎么配置、怎么绑定域名,还有最重要的——怎么设置一些基础的安全措施,防止服务被乱用。如果你也有类似的需求,比如想远程调试AI模型,或者临时做个演示,那这篇实战指南应该能帮到你。

1. 准备工作:理清思路与备好“弹药”

在开始动手之前,我们得先搞清楚整个流程是怎么跑的,以及需要准备哪些东西。别急着敲命令,磨刀不误砍柴工。

1.1 内网穿透到底是个啥?

你可以把它想象成邮局和信箱的关系。你的内网服务器(比如你家里的电脑)就像一个只收本地信件的信箱,外面的人没法直接往里寄信。而公网上的一台有固定地址的服务器(我们叫它“中转服务器”或“服务端”),就像邮局。内网穿透工具(比如frp)会在你的内网机器上装一个“邮差”(客户端),这个邮差会主动跑到邮局去登记:“嗨,我是某某信箱的邮差,以后所有寄给‘某某公网地址’的信,都先送到你这儿,然后由我带回给信箱。”

这样一来,外部用户访问那个公网地址时,请求会先到邮局(中转服务器),邮局立刻通知对应的邮差(内网客户端)来取件,邮差把请求带回内网交给真正的服务处理,拿到结果后再通过邮局送回给外部用户。对你内网的服务来说,它完全不知道请求来自远方,还以为就是本地访问呢。

1.2 你需要准备什么?

按照上面这个比喻,我们需要准备两样核心的东西:

  1. 一台具有公网IP的服务器:这就是我们的“邮局”。它需要一直在公网上运行,接收外部的访问请求。你可以用云服务商(比如阿里云、腾讯云)提供的云服务器,最基础的配置(1核1G)就够用了,主要是网络要稳定。记下它的公网IP地址。
  2. 一个域名(可选但推荐):直接用IP地址访问不太友好,也不方便记忆。申请一个域名(很多平台有很便宜的甚至免费的),然后把这个域名解析到你上面那台公网服务器的IP上。这样我们就能用像 http://minicpm.yourdomain.com 这样的地址来访问了。

至于内网那台机器,就是你已经部署好MiniCPM-o-4.5-nvidia和FlagOS服务端的电脑,确保它在你的局域网内能正常访问。我们接下来的操作,主要就是配置“邮局”(服务端)和“邮差”(客户端)。

2. 搭建“邮局”:在公网服务器上配置frp服务端

我们选择frp作为内网穿透工具,因为它开源、灵活、配置清晰。首先登录到你那台有公网IP的服务器上操作。

2.1 下载并安装frp

通过SSH连接到你的公网服务器。frp的发布页面在GitHub上,我们需要下载对应服务器系统架构的版本。通常云服务器是linux_amd64

# 创建一个目录存放frp
mkdir -p /opt/frp && cd /opt/frp

# 下载最新版本的frp(请去GitHub release页面查看最新版本号,替换下面的v0.54.0)
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.54.0_linux_amd64.tar.gz

# 进入解压后的目录,服务端我们主要用 frps 开头的文件
cd frp_0.54.0_linux_amd64

解压后你会看到一堆文件,其中 frpsfrps.ini 是服务端程序和服务端配置文件。

2.2 配置服务端 (frps.ini)

用文本编辑器(如vimnano)打开 frps.ini 文件。我们先做一个最基础但可用的配置。

[common]
# frp服务端监听的端口,客户端用来连接
bind_port = 7000

# 仪表盘端口,用于在网页上查看frp状态(可选但建议开启)
dashboard_port = 7500
# 仪表盘的用户名和密码,请务必修改成复杂的!
dashboard_user = admin
dashboard_pwd = your_strong_password_here

# 用于外部访问我们内网服务的端口,范围可以根据需要调整
vhost_http_port = 8080
# 如果你还需要HTTPS,可以再开一个,比如 8443
# vhost_https_port = 8443

# 认证令牌,相当于客户端连接服务端的密码,增强安全性(强烈建议设置)
token = your_super_secret_token_here

# 日志记录,方便排查问题
log_file = ./frps.log
log_level = info
log_max_days = 3

关键配置解释

  • bind_port (7000):这是“邮差”(客户端)主动来连接“邮局”(服务端)的通道。必须开放。
  • dashboard_port (7500):管理后台,在浏览器访问 http://你的服务器IP:7500,输入账号密码就能看到有哪些客户端在线,流量情况等。
  • vhost_http_port (8080):这是最终外部用户访问内网服务时用的端口。当外部用户访问 http://你的服务器IP:8080 时,frps会根据域名等信息,把请求转发给对应的内网服务。
  • token:非常重要!没有它,任何知道服务器地址的人都能连接上来,非常危险。务必设一个复杂字符串。

2.3 启动frp服务端并设置开机自启

配置好后,可以先在前台运行测试一下:

./frps -c ./frps.ini

如果看到类似 “frps started successfully” 的日志,说明服务端启动成功了。按 Ctrl+C 停止。

为了让它一直在后台运行,我们最好配置成系统服务。这里以Systemd为例:

# 创建systemd服务文件
sudo vim /etc/systemd/system/frps.service

将以下内容写入文件(注意修改ExecStart的路径为你实际的frps路径):

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frp_0.54.0_linux_amd64/frps -c /opt/frp/frp_0.54.0_linux_amd64/frps.ini

[Install]
WantedBy=multi-user.target

保存退出后,启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps # 查看运行状态,应该是active (running)

好了,“邮局”已经建好并开始营业了。记住你的服务器IP、bind_porttoken,以及打算给外部用的vhost_http_port(这里是8080)。

3. 配置“邮差”:在内网机器上配置frp客户端

现在回到你部署了MiniCPM和FlagOS的内网机器上。假设你的FlagOS服务在本地的 http://localhost:7860 上运行(这是FlagOS常见的默认端口)。

3.1 下载并配置frp客户端

同样需要下载frp,步骤和服务器端类似,但这次我们关注 frpcfrpc.ini

# 在内网机器上操作
mkdir -p ~/frp && cd ~/frp
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
tar -zxvf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64

用编辑器创建或修改 frpc.ini 文件:

[common]
# 填写“邮局”的地址和连接端口
server_addr = 你的公网服务器IP
server_port = 7000
# 填写在服务端设置的token
token = your_super_secret_token_here

# 客户端管理端口,用于热重载配置(可选)
admin_addr = 127.0.0.1
admin_port = 7400

[web_minicpm] # 这个名称可以自定义,代表一个穿透服务
type = http
local_ip = 127.0.0.1
local_port = 7860 # 这是你内网FlagOS服务运行的端口
# 这是关键!指定一个子域名。当访问 http://minicpm.yourdomain.com:8080 时,请求会被转发到这个[web]服务
custom_domains = minicpm.yourdomain.com

# 如果你还有其他内网服务需要穿透,可以继续添加配置段,比如SSH
# [ssh]
# type = tcp
# local_ip = 127.0.0.1
# local_port = 22
# remote_port = 6000 # 访问 服务器IP:6000 就会被转发到内网机器的22端口

配置核心[web_minicpm] 这个段落定义了一个HTTP类型的穿透。它告诉frp客户端:“请把发送到 minicpm.yourdomain.com 这个域名的请求,全部转发到本机的 7860 端口。”

3.2 启动frp客户端

在内网机器上运行:

./frpc -c ./frpc.ini

如果连接成功,你会看到日志显示 “login to server success” 以及 “[web_minicpm] start proxy success”。同时,在公网服务器的frps仪表盘(http://服务器IP:7500)上,应该能看到这个客户端在线。

同样,你也可以将客户端配置为系统服务或后台进程,确保它一直运行。在Linux上,可以参照服务端的方法创建 frpc.service;在Windows上,可以用nssm工具或计划任务。

4. 打通最后一公里:域名与安全设置

现在“邮局”和“邮差”都就位了,但外部用户还不能通过一个好记的域名访问。同时,安全是重中之重,不能把服务完全暴露在公网而不设防。

4.1 绑定域名

  1. 域名解析:登录你的域名注册商或DNS服务商的控制台,添加一条A记录。
    • 主机记录:填 minicpm (如果你希望用 minicpm.yourdomain.com 访问的话)。
    • 记录值:填你的公网服务器IP地址
    • TTL:默认即可。
  2. 等待生效:DNS解析需要时间,通常几分钟到几小时不等。你可以用 ping minicpm.yourdomain.com 来检查是否已经指向了你的服务器IP。

重要:我们之前配置frps时,vhost_http_port 设置的是8080。这意味着用户需要通过 http://minicpm.yourdomain.com:8080 来访问。如果你想用默认的80端口(即 http://minicpm.yourdomain.com),需要:

  • 将frps.ini中的 vhost_http_port 改为 80
  • 确保你的云服务器安全组/防火墙开放了80端口。
  • 注意,在Linux上监听1024以下的端口(如80)通常需要root权限,你可能需要调整frps的运行用户或使用authbind等工具。

4.2 基础安全加固

直接暴露Web服务是有风险的,我们至少要做以下几件事:

  1. 设置强密码和Token:确保frps的dashboard_pwdtoken是足够复杂、无规律的字符串,不要使用默认值或简单密码。
  2. 限制访问来源(可选但推荐):在frps.ini的[common]部分,可以添加以下配置,只允许来自特定IP的客户端连接(比如你公司的固定IP段),但这对于动态IP的家庭网络不友好。
    allow_ports = 7000, 7500, 8080 # 明确允许哪些端口被访问
    # 或者使用更细粒度的IP白名单(需要frp版本支持)
    # authentication_method = token
    # authenticate_new_work_conns = true
    
  3. 为FlagOS服务本身添加访问控制:这是更有效的一层防护。FlagOS通常支持通过命令行参数或环境变量设置--share密码或--auth
    • 在启动FlagOS服务时,加上参数,例如:python launch.py --share --username admin --password your_flagos_password。这样,所有访问者都需要输入用户名和密码才能使用界面。
    • 这是非常关键的一步,能防止你的模型API被陌生人滥用,产生不可控的计算和流量成本。
  4. 使用云服务器安全组/防火墙:在云服务商的控制台,严格限制入站端口。通常只开放:
    • 7000 (frp客户端连接)
    • 7500 (仪表盘,可考虑仅对管理IP开放)
    • 8080 (或80/443,对外服务)
    • 22 (SSH管理,建议改用密钥登录并限制IP) 关闭所有其他不必要的端口。

5. 测试与验证

完成以上所有步骤后,就可以进行最终测试了。

  1. 确保所有服务运行
    • 公网服务器:frps 服务运行。
    • 内网机器:FlagOS 服务运行在7860端口;frpc 客户端运行。
  2. 从外部网络访问:找一台不在你内网的设备(比如用手机4G/5G网络),打开浏览器,访问 http://minicpm.yourdomain.com:8080 (如果你用了80端口,则不用加:8080)。
  3. 预期结果:你应该能看到FlagOS的Web界面。如果设置了密码,会弹出登录框。登录后,就能像在内网一样使用MiniCPM-o-4.5-nvidia模型进行对话或推理了。
  4. 检查仪表盘:访问 http://你的公网服务器IP:7500,用设置的用户名密码登录,可以看到frpc客户端在线状态,以及[web_minicpm]这个代理的流量情况。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐