标题: 物理机上跑一个前后端分离的单服务项目并用frp挖隧道
时间: 2023-10-19
总结:方案可行,但是呢!好比两人约会手牵手时用微信聊天。
1、一台能跑项目的电脑。
2、一台有公网ip的服务器
3、与系统对应的frp软件包v0.51.0(https://github.com/fatedier/frp)
配置frps.ini(注:防火墙开放6000-8000端口号)
[common]
bind_port = 7000
vhost_http_port = 8000
bind_udp_port = 6000
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = 123456
token = 123456
配置frps.service文件
vim /usr/lib/systemd/system/frps.service
编辑模式下写入以下信息
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/frp/frps -c /frp/frps.ini
[Install]
WantedBy=multi-user.target
这里我把frp解压到/
根目录下了,ExecStart=
后面的是执行命令。
启动并测试
systemctl daemon-reload // 重新加载服务项
systemctl enable frps // 配置开机自启
systemctl start frps // 启动服务
systemctl status frps // 查看服务状态
systemctl stop frps // 关闭服务
web查看运行状态:http://ip:6001
1、把项目跑起来。(假设本地访问项目地址是 localhost:8080
)
2、配置frpc.ini(这里复制一份并改个名 frontEnd.ini)
[common]
server_addr = 服务端公网ip
server_port = 7000
token = 123456
[http1]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = 服务端公网ip
(涉及到http请求,所以用http协议而不是tcp协议)
3、客户端Windows的话,要用CMD
运行 frp软件
PS D:\app\temp\frp\frp_0.51.1_windows_386> .\frpc.exe -c .\frontEnd.ini
运行日志没有报错的话,可以在http://ip:6001
这里查看到客户端是否已上线online\offline
4、假设客户端已上线,通过以下地址访问前端项目。
http://服务端公网ip:8000
为什么是8000端口?因为服务端的配置信息里有一项:vhost_http_port = 8000
1、也是先把项目跑起来(假设后端SpringBoot单服务的端口号是8008
)
2、配置frpc.ini(这里复制一份并改个名 backEnd.ini)
[common]
server_addr = 服务端公网ip
server_port = 7000
token = 123456
[tcp1]
type = tcp
local_ip = 127.0.0.1
local_port = 8008
remote_port = 6008
heartbeat_timeout = 30
好像 tcp协议要自己配心跳heartbeat_timeout = 30
3、同上,客户端Windows的话,要用CMD
运行 frp软件
PS D:\app\temp\frp\frp_0.51.1_windows_386> .\frpc.exe -c .\backEnd.ini
运行日志没有报错的话,可以在http://ip:6001
这里查看到客户端是否已上线online\offline
4、假设客户端已上线,通过以下地址访问后端项目。
http://服务端公网ip:6008
把上面的ip:6008
复制到前端项目的配置项里,比如:
NODE_ENV='development'
VUE_APP_MODE='dev'
VUE_APP_BASE_URL='http://服务端公网ip:6008'
重启前端项目(重新把前端项目跑起来)
==============================
搞定!
下面假设一个业务流程----->登录系统,简述流量是怎么转发的。
1、首先,通过
http://服务端公网ip:8000
访问到前端项目,打开了一个登录页面,输入用户名和密码点击登录按钮,由前端项目发起了一个http请求(http://服务端公网ip:6008/api/admin/user/login)
2、然后,密码正确,成功进入系统。
其实原本我想着:明明前端和后端明明就放在一起,前端项目的配置信息里,如果把http://服务端公网ip:6008
配置改成localhost、127.0.0.1
竟然找不到后端接口,反而要去互联网找...
所以就有了开头的那句总结:两人约会手牵手时用微信聊天。
『回复列表(7|隐藏机器人聊天)』
在网络层面上,部署在CentOS上的frp客户端和部署在Docker上的frp客户端之间有几个区别:
网络隔离:Docker使用容器技术,每个Docker容器都有自己的网络命名空间,因此Docker容器之间的网络是相互隔离的。而CentOS上的frp客户端与其他应用程序共享主机的网络命名空间。
IP地址:Docker容器具有自己的独立IP地址,与主机和其他容器分开。而CentOS上的frp客户端使用主机的IP地址。
网络性能:Docker容器的网络性能通常比主机上的应用程序稍差,因为Docker在网络传输过程中会增加一些额外的开销和延迟。但是,这种性能差异通常是微小的,除非在非常高负载的情况下。
当将frp部署到Docker中时,网络请求会经过Docker网络层,然后转发给CentOS的网络层,最后通过主机的网口出去。这可能会导致一些微小的延迟,但对于大多数应用程序来说,影响并不显著。如果网络响应速度对您的应用程序非常重要,您可以考虑将frp客户端直接部署在CentOS上,而不是使用Docker。