使用FRP实现RuoYi-Cloud-Plus内网穿透实战指南
📅 2026/7/23 6:12:13
👁️ 阅读次数
📝 编程学习
1. 项目背景与核心需求
在开发测试环境中,我们经常需要将本地虚拟机服务暴露到公网进行联调或演示。传统方案需要配置复杂的端口映射或购买昂贵的云服务,而内网穿透技术提供了一种轻量级解决方案。RuoYi-Cloud-Plus作为基于Spring Cloud的快速开发框架,其微服务架构尤其需要灵活的网络访问能力。
关键痛点:开发者在本地虚拟机搭建的RuoYi测试环境,无法被异地同事或客户直接访问,导致协作效率低下。公网IP和云服务器成本又成为中小团队的负担。
2. 环境准备与工具选型
2.1 基础环境配置
推荐使用VMware Workstation 17+搭配Ubuntu 24.04 LTS桌面版,注意以下配置细节:
- CPU分配:建议为虚拟机分配至少4核,避免微服务启动时资源争抢
- 内存设置:RuoYi-Cloud-Plus建议8GB起步,Spring Cloud服务较耗内存
- 网络模式:选择桥接(Bridged)模式获取独立局域网IP,便于后续穿透配置
# 检查Ubuntu网络配置 ip addr show | grep "inet " # 若未安装net-tools sudo apt update && sudo apt install net-tools -y2.2 FRP选型建议
对比常见穿透工具:
- Ngrok:配置简单但免费版不稳定
- FRP:开源可控,支持TCP/UDP/HTTP多种协议
- ZeroTier:适合组建虚拟局域网但需要客户端安装
选择FRP 0.65.0版本因其:
- 完善的TCP穿透支持(适合微服务间调用)
- 可视化Dashboard监控
- 轻量级(服务端仅10MB内存占用)
3. 服务端配置实战
3.1 云服务器初始化
以阿里云ECS为例:
- 安全组开放7000(主端口)、7500(Dashboard)和后续映射端口
- 使用systemd管理服务避免进程意外终止
# 创建FRP专用目录 sudo mkdir -p /opt/frp && cd /opt/frp # 下载并解压(注意替换版本号) wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz tar -xzf frp_0.65.0_linux_amd64.tar.gz3.2 关键配置解析
frps.toml核心参数:
bindPort = 7000 # 客户端连接端口 # Dashboard配置(建议修改默认密码) webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "StrongP@ssw0rd!" # 安全认证(token相当于密钥) auth.method = "token" auth.token = "RuoYi2025SecureToken"启动命令添加-t参数强制token验证:
./frps -c frps.toml -t RANDOM_STRONG_TOKEN4. 客户端穿透配置
4.1 虚拟机端安装
通过Xftp上传frp压缩包后:
# 解压并保留客户端文件 tar -xzf frp_0.65.0_linux_amd64.tar.gz cd frp_0.65.0_linux_amd64 rm frps* # 删除服务端文件4.2 多服务映射方案
frpc.toml典型配置:
serverAddr = "your.server.ip" serverPort = 7000 auth.token = "RuoYi2025SecureToken" # 映射SSH服务(22→60022) [[proxies]] name = "ruoyi-ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 60022 # 映射Nacos(8848→60848) [[proxies]] name = "nacos" type = "tcp" localIP = "127.0.0.1" localPort = 8848 remotePort = 60848调试技巧:先用
telnet your.server.ip 60022测试端口连通性,再尝试SSH连接
5. 系统集成与优化
5.1 开机自启动配置
创建systemd服务文件:
sudo vim /etc/systemd/system/frpc.service写入以下内容(注意路径修改):
[Unit] Description=FRP Client After=network.target [Service] Type=simple ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reload sudo systemctl enable frpc sudo systemctl start frpc5.2 安全加固措施
- 防火墙配置:
# 仅允许云服务器IP访问FRP端口 sudo ufw allow from 云服务器IP to any port 7000- 日志监控:
# 查看实时日志 journalctl -u frpc -f- Token轮换:每月更新一次auth.token
6. 典型问题排查指南
6.1 连接超时问题
- 现象:Dashboard可访问但服务不通
- 排查步骤:
- 在云服务器执行
tcpdump -i eth0 port 7000确认有流量到达 - 检查客户端日志
journalctl -u frpc - 验证安全组规则是否放行所有映射端口
- 在云服务器执行
6.2 性能调优建议
当出现高延迟时:
- 在
frpc.toml中添加:
transport.protocol = "kcp" # 改用UDP协议- 调整心跳参数:
transport.heartbeatInterval = 30 transport.heartbeatTimeout = 907. 扩展应用场景
7.1 远程调试方案
通过穿透实现:
- IDEA远程调试:映射5005调试端口
- Arthas连接:暴露3658端口进行线上诊断
7.2 多环境协同
配置示例:
# 开发环境 [[proxies]] name = "dev-mysql" localPort = 3306 remotePort = 60306 # 测试环境 [[proxies]] name = "test-redis" localPort = 6379 remotePort = 606378. 维护与升级建议
- 版本升级:
# 保留配置文件的情况下 mv frpc.toml /tmp/ wget 新版本FRP tar -xzf 新版本包 mv /tmp/frpc.toml ./- 配置备份:
# 每天凌晨备份 0 0 * * * tar -czf /backups/frp_$(date +\%Y\%m\%d).tar.gz /opt/frp实际使用中发现,当同时映射超过10个服务时,建议在云服务器端调整内核参数:
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf sysctl -p
编程学习
技术分享
实战经验