【前端部署在云服务器如何与本地联调--Frp内网穿透】

【前端部署在云服务器如何与本地联调--Frp内网穿透】

苍穹外卖前端部署在云服务器如何与本地联调--Frp内网穿透

1. 前言

写这片文章的目的是为了解决上篇苍穹外卖项目的前端部署到云服务器的遗留问题:前端的云服务器的IP是公网IP,而我本地调试的Java后端是内网,前端响应的地址找不到本地的服务器。那么如何让云服务器上的前端项目能够找到后端的对应的地址呢?这就可以使用内网穿透技术了,将本地的端口暴露给服务器,让服务器自己找到本地的IP和8080端口,那么使用开源的FRP工具可以很好的解决。

2. FRP是什么

在这里插入图片描述


Fast Reverse Proxy(FRP)
一款开源内网穿透工具,通过在公网服务器部署 frps、在内网主机运行 frpc,它通过“反向隧道”把位于 NAT/防火墙后的内网服务安全地映射到公网,实现无需公网 IP 也能被外网访问。

  • 支持协议:TCP、UDP、HTTP、HTTPS
  • 典型用途:远程桌面/SSH、本地 Web 开发调试、物联网设备远程管理、企业混合云互连等
  • 角色分工
    • frps(服务端):部署在具备公网 IP 的云主机,负责接收外部请求并统一转发。
    • frpc(客户端):运行在内网主机,主动连到 frps,注册本地要暴露的服务。

3. 解决步骤

3.1 在云服务器安装服务端frps,然后开启开机自启(参考第4部分

根据自己云服务器的系统安装好frps后,在Nginx配置文件里,将端口修改成代理的转发端口,然后启动服务端,

# `Nginx`中的苍穹外卖配置文件路径(上篇博客里创建的) /etc/nginx/conf.d/waimai.conf 
在这里插入图片描述
server { listen 80; server_name IP;# 这里填你的服务器公网IP或域名 location / { root /var/www/sky;# 你的项目存放路径 index index.html index.htm;# try_files $uri $uri/ /index.html; }# 错误页面配置 error_page 500502503504 /50x.html; location = /50x.html { root /usr/share/nginx/html;} location /api/ { proxy_pass http://127.0.0.1:18080/admin/;# frp 通过 18080 暴露本地服务(设置转发端口) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}

3.2 在本地电脑安装客户端fprc(参考第4部分

安装好本地后,启动客户端,查看日志,看到以下内容就是连接成功!

在这里插入图片描述


【注意】一定要先在阿里云服务器的安全组中将要代理转发的远程端口(入方向)打开,端口保持一致

4. Frp(C/S)0.64.0各个系统的安装方法

4.1 frps安装(Linux)服务端

  • 下载
curl -LO <https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_darwin_arm64.tar.gz>tar -zxvf frp_0.64.0_darwin_arm64.tar.gz # 以下服务端和客户端的frp 在Linux系统中都放在/usr/local/目录下mv frp_0.64.0_darwin_arm64 frp sudomv frp /usr/local/ cd /usr/local/frp 

管理命令

#启动并设置开机自启:sudo systemctl daemon-reload sudo systemctl start frps sudo systemctl enable frps sudo systemctl restart frps sudo systemctl status frps sudo systemctl stop frps # 查看连到 7000 端口(FRP 通信端口)的客户端 IP ss -antp |grep :7000 

守护进程来启动frps

# 在客户端机器上创建 Systemd 服务文件sudonano /etc/systemd/system/frps.service 
[Unit]Description=frp server After=network.target syslog.target Wants=network.target [Service]Type=simple # ⚠️ 注意:请确保路径与你实际安装路径一致ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml [Install]WantedBy=multi-user.target 

修改frps.toml文件

bindAddr ='0.0.0.0' bindPport =7000# 我是做联调的,用来代理后端的,所以设置这个#vhostHttpPort = 80#vhostHttpsPort = 443 auth.method ="token" auth.token ="1234567890a"# dashboard_port = 7500 webServer.addr ="0.0.0.0" webServer.port =7500 webServer.user ="admin" webServer.password ="admin123"

4.2 frpc安装(windows)客户端

[[苍穹外卖项目#3-2 本地后端+ 云端前端 联调]]

 serverAddr ="ip" serverPort =7000 auth.method ="token" auth.token ="1234567890a"[[proxies]] name ="test-sky"type="tcp" localIP ="127.0.0.1" localPort =8080 remotePort =18080

本地frpc命令:

frpc.exe -c frpc.toml 

4.3 frpc安装(mac)客户端

  • 下载
curl -LO <https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_darwin_arm64.tar.gz>tar -zxvf frp_0.64.0_darwin_arm64.tar.gz mv frp_0.64.0_darwin_arm64 frp mv frp ~/local/ # M1芯片,如果M2芯片是:_amd64.tar.gz
frp-mac-0.64.0
  • 守护进程自启动(launchd)

修改frpc.toml文件

serverAddr ="ip" serverPort =7000 auth.method ="token" auth.token ="1234567890a"[[proxies]] name ="test-sky"type="tcp" localIP ="127.0.0.1" localPort =8080 remotePort =18080
#创建launchdnano ~/Library/LaunchAgents/com.userFrp.frpc.plist 
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEplistPUBLIC"-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plistversion="1.0"><dict><key>Label</key><string>com.userFrp.frpc</string><key>ProgramArguments</key><array><string>/Users/tp/local/frp/frpc</string><string>-c</string><string>/Users/tp/local/frp/frpc.toml</string></array><key>WorkingDirectory</key><string>/Users/tp/local/frp</string><key>StandardOutPath</key><string>/Users/tp/local/frp/log/frpc.log</string><key>StandardErrorPath</key><string>/Users/tp/local/frp/log/frpc-error.log</string><key>RunAtLoad</key><true/><key>KeepAlive</key><true/><key>AbandonProcessGroup</key><true/><key>NetworkState</key><true/></dict></plist>

验证和管理

# 首次加载 启动 launchctl load ~/Library/LaunchAgents/com.userFrp.frpc.plist launchctl start com.userFrp.frpc # 验证 launchctl list |grep frpc #查看日志:tail -f ~/local/frp/frpc.log 
# 重启卸载 launchctl stop com.userFrp.frpc launchctl unload ~/Library/LaunchAgents/com.userFrp.frpc.plist 

4.4 frpc安装(Linux)客户端

下载地址

*curl -LO <https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz>tar -zxvf frp_0.64.0_linux_amd64.tar.gz mv frp_0.64.0_linux_amd64 frp sudomv frp /usr/local/* cd /usr/local/frp 
frp-linux-0.64.0

管理命令

#文件更新并启动:sudo systemctl daemon-reload sudo systemctl start frpc # 设置开机自启sudo systemctl enable frpc # 重启sudo systemctl restart frpc # 查看状态sudo systemctl status frpc # 停止sudo systemctl stop frpc # 实时滚动查看最后 50 行日志sudo journalctl -u frpc -f # 查看连到 7000 端口(FRP 通信端口)的客户端 IP ss -antp |grep :7000 

守护进程来启动frpc

# 在客户端机器上创建 Systemd 服务文件sudonano /etc/systemd/system/frpc.service 
[Unit]Description=frp server After=network.target syslog.target Wants=network.target [Service]Type=simple # ⚠️ 注意:请确保路径与你实际安装路径一致ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml [Install]WantedBy=multi-user.target 

测试

cd /usr/local/frp ./frpc -c ./frpc.toml 

修改frpc.toml文件

serverAddr ="ip" serverPort =7000 auth.method ="token" auth.token ="1234567890a"[[proxies]] name ="java-skt-linux"type="tcp" localIP ="127.0.0.1" localPort =8080 remotePort =18080

Read more

一八零、AG-UI:构建AI前端交互的统一协议

一八零、AG-UI:构建AI前端交互的统一协议

AG-UI:构建AI前端交互的统一协议 引言 随着人工智能技术的飞速发展,AI Agent已经从概念走向实际应用。然而,在将这些智能体集成到前端应用中时,开发者面临着一个关键挑战:如何实现AI Agent与用户界面之间的高效、标准化交互? AG-UI(Agent User Interaction Protocol)正是为解决这一痛点而诞生的开源协议。它不仅仅是一个技术规范,更是连接AI智能体与前端应用的桥梁,让开发者能够构建真正智能化的用户体验。它们能够让开发者构建出真正嵌入UI应用、感知上下文、实时协同的智能体,而不仅仅是一个在后台提供文本答案的API服务。 一、AG-UI是什么? 1.1 核心定义 AG-UI(Agent-User Interaction Protocol) 是由CopilotKit团队提出的开源、轻量级协议,专门用于规范AI Agent与前端用户界面之间的通信流程,是一套开源的Agent与UI界面之间的交互协议。它的核心使命是: 标准化前端应用与AI智能体的连接方式,通过开放协议实现通用的AI驱动系统通信。 1.2 协议定位 在AI生态系统中

RTX5060显卡对PyTorch与CUDA适配问题解决方案(解决环境依赖问题&AI微调部署前奏)

RTX5060显卡对PyTorch与CUDA适配问题解决方案(解决环境依赖问题&AI微调部署前奏)

前言 如果大家的电脑显卡是RTX50系列的话,如果按照正常的部署AI,可能尚未进行调试,就会发现环境的依赖报错一大堆,又或者如下图的UserWarning,之所以会是这样,是因为5060的显卡太新了,以至于PyTorch与CUDA出现兼容问题。 图这里sm_xx代表什么? 流多处理器架构版本: sm_50 - Maxwell架构(GTX 900系列) sm_60 - Pascal架构(GTX 1000系列) sm_70 - Volta架构(Tesla V100) sm_75 - Turing架构(RTX 2000系列) sm_80 -Ampere架构(RTX 3000系列/A100) sm_86 - Ampere架构(笔记本RTX 3000) sm_89

前端数据可视化工具比较:别再为选择工具而烦恼了!

前端数据可视化工具比较:别再为选择工具而烦恼了! 毒舌时刻 数据可视化?听起来就像是前端工程师为了显得自己很专业而特意搞的一套复杂流程。你以为随便用个Chart.js就能做出好看的图表?别做梦了!到时候你会发现,复杂的图表需求根本满足不了。 你以为D3.js是万能的?别天真了!D3.js的学习曲线能让你崩溃,写出来的代码比业务代码还复杂。还有那些所谓的可视化库,看起来高大上,用起来却各种问题。 为什么你需要这个 1. 数据理解:数据可视化可以帮助你更好地理解数据,发现数据中的规律和趋势。 2. 决策支持:可视化的数据可以为决策提供直观的支持,帮助你做出更明智的决策。 3. 用户体验:良好的数据可视化可以提高用户体验,使数据更易于理解和使用。 4. 信息传递:可视化的数据可以更有效地传递信息,减少沟通成本。 5. 品牌形象:专业的数据可视化可以提升品牌的专业形象。 反面教材 // 1. 使用不适合的工具 // 复杂的数据可视化使用Chart.js import Chart from 'chart.js/

OpenClaw(Clawdbot)运行原理剖析:你的个人AI操作系统的引擎是如何工作的?

OpenClaw(Clawdbot)运行原理剖析:你的个人AI操作系统的引擎是如何工作的?

OpenClaw(Clawdbot)运行原理剖析:你的个人AI操作系统的引擎是如何工作的? 如果你曾想象过拥有一个能直接操控你电脑、完成实际任务的AI助手,那么理解OpenClaw(原名Clawdbot)的运行原理,就像是在窥探未来个人计算的引擎舱。 最近我深度体验并部署了OpenClaw,这个开源项目将大语言模型的“思考”能力与本地系统的“执行”能力结合,实现了一种全新的交互范式。在这篇博客中,我将结合自己的实践,为你深入剖析OpenClaw是如何在后台协同工作的。 一、核心架构:客户端-服务器模型 OpenClaw最核心的设计采用了经典的客户端-服务器(Client-Server)模型。理解这一点,是理解整个系统的基础。 当你安装OpenClaw后,实际上得到了两个主要部分: * 网关服务(Gateway):作为常驻后台的“服务器”或“引擎” * 用户界面(TUI/Web/聊天软件):作为与用户交互的“客户端” 它们之间的关系,可以用下面的架构图清晰地表示: 发送指令/接收回复 调度与执行 执行层 (技能与连接) 技能库