缘起: Gradio
Gradio
是一款快速构建AI Web演示应用的Python Web框架(主要适用于科研、实验室,而非ToC的Web应用),其支持本地运行和远程访问。
1个极简的
Gradio
代码:app.py
import gradio as gr # 导入gradio库,gradio用于快速创建机器学习模型的web界面# 定义一个名为greet的函数,接收两个参数:name 和 intensity
def greet(name, intensity):# 函数返回一个字符串,包含问候语和根据intensity重复的名字return "Hello, " + name + "!" * int(intensity) # 使用gr.Interface创建一个UI界面,fn指定了接口的函数,inputs定义了输入类型,outputs定义了输出类型
demo = gr.Interface(fn=greet, # 指定greet函数作为接口的回调函数inputs=["text", "slider"], # 设置两个输入,一个文本输入框和一个滑块outputs=["text"], # 设置一个文本输出,用于显示greet函数的结果
)#demo.launch() # 启动界面,这将会在本地服务器上运行web应用程序
demo.launch(share=True) # share=True 即可支持远程访问
如何运行呢?
(base) D:\Workspace\CodeRepositories\gradio-app> python app.py
信息: 用提供的模式无法找到文件。
* Running on local URL: http://127.0.0.1:7860Could not create share link. Missing file: C:\Users\xxx\AppData\Roaming\Python\Python312\site-packages\gradio\frpc_windows_amd64_v0.3.Please check your internet connection. This can happen if your antivirus software blocks the download of this file. You can install manually by following these steps:1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_windows_amd64.exe
2. Rename the downloaded file to: frpc_windows_amd64_v0.3
3. Move the file to this location: C:\Users\xxx\AppData\Roaming\Python\Python312\site-packages\gradio
Gradio
的远程访问,无需用户精通网络和Web开发相关技术,那么它怎么做到的呢?
从上面的日志中可见,是利用了
frpc
这款反向代理软件。(公网IP的问题,应是Gradio
组织提供的)
- 由此,本篇的正主
frpc
开始。
概述:反向代理与内网穿透软件(FRPC
)
frp
是一个可用于内网穿透的高性能反向代理应用
- 支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力
- 且尝试性支持了点对点穿透。
- 其名称其实就是使用了
Fast Reverse Proxy
的首字母缩写。
FRPC
的架构
反向代理的场景类型
类型 | 描述 |
---|---|
tcp | 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
udp | 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
http | 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。 |
https | 针对 HTTPS 应用定制了一些额外的功能。 |
stcp | 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
sudp | 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
xtcp | 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 |
tcpmux | 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。 |
FRPC 的安装篇
FRPC Install on Windows
Step1 下载安装包
- url
- https://github.com/fatedier/frp/releases/tag/v0.61.0
- https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_windows_amd64.zip
- https://github.com/fatedier/frp/releases/tag/v0.39.1
- https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_windows_amd64.zip
Step2 解压即安装
$ pwd
/d/Program/frpc/frp_0.39.1_windows_amd64$ ls -la
total 24262
drwxr-xr-x 1 EDY 197612 0 Jan 4 09:55 ./
drwxr-xr-x 1 EDY 197612 0 Jan 4 09:56 ../
-rw-r--r-- 1 EDY 197612 11358 Feb 9 2022 LICENSE
-rwxr-xr-x 1 EDY 197612 10769408 Feb 9 2022 frpc.exe*
-rw-r--r-- 1 EDY 197612 126 Feb 9 2022 frpc.ini
-rw-r--r-- 1 EDY 197612 10009 Feb 9 2022 frpc_full.ini
-rwxr-xr-x 1 EDY 197612 14029824 Feb 9 2022 frps.exe*
-rw-r--r-- 1 EDY 197612 26 Feb 9 2022 frps.ini
-rw-r--r-- 1 EDY 197612 5155 Feb 9 2022 frps_full.ini
drwxr-xr-x 1 EDY 197612 0 Jan 4 09:55 systemd/
frpc
: 客户端(一般放内网服务器)frps
: 服务端(一般放公网服务器)
补充:v0.61.0(可见与v0.39.1的文件区别较大)
Step3 配置环境变量
- 新建系统变量:
FRP_HOME
=D:\Program\frpc\frp_0.39.1_windows_amd64\
- 编辑系统环境变量
Path
,新增1项:%FRP_HOME%\
Step4 验证
C:\Users\xxx>frpc --version
0.39.1C:\Users\xxx>frpc --help
frpc is the client of frp (https://github.com/fatedier/frp)Usage:frpc [flags]frpc [command]Available Commands:help Help about any commandhttp Run frpc with a single http proxyhttps Run frpc with a single https proxyreload Hot-Reload frpc configurationstatus Overview of all proxies statusstcp Run frpc with a single stcp proxysudp Run frpc with a single sudp proxytcp Run frpc with a single tcp proxytcpmux Run frpc with a single tcpmux proxyudp Run frpc with a single udp proxyverify Verify that the configures is validxtcp Run frpc with a single xtcp proxyFlags:-c, --config string config file of frpc (default "./frpc.ini")-h, --help help for frpc-v, --version version of frpcUse "frpc [command] --help" for more information about a command.
Y 推荐文献
- FRPC
- https://github.com/fatedier/frp
- https://github.com/fatedier/frp/releases
- https://github.com/fatedier/frp/releases/tag/v0.39.1
- https://github.com/fatedier/frp/releases/tag/v0.61.0
- https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_windows_amd64.zip
- https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_windows_amd64.zip
- https://github.com/fatedier/frp/releases/tag/v0.3.0
- Gradio
- https://www.gradio.app/
- https://www.gradio.app/docs
- https://www.gradio.app/guides/quickstart
- https://github.com/gradio-app/gradio
- https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_windows_amd64.exe
应用案例
案例:将内网Linux服务器上的web网站映射到公网上去
做具体的配置前,根据对应的操作系统及架构,从github 页面下载所需版本的程序。
- 将
frps
及frps.ini
放到具有公网 IP 的机器上。
请注意配置防火墙或安全组放过配置文件中使用的端口。
-
将
frpc
及frpc.ini
放到处于内网环境的机器上。 -
在公网windows上部署
frps
Step1 上传frp
安装包到**公网上的Windows服务器上
Step2 修改公网服务器的配置文件frps.ini
文件
Step3 在公网服务器启动frps.exe
程序
cmd
:
frps.exe -c ./frps.ini
出现 frps started successfully 代表frps启动成功
Step4 在内网liunx上部署frpc
- 把
frpc
上传到本地内网的liunx服务器上并解压此文件
$ cd frp_0.39.1_linux_386$ ls
frpc frpc_full.ini frpc.ini frps frps_full_ini frps.ini LICENSE systemd
Step5 在内网服务器配置frpc.ini
这里需要有一个自己的公网域名
Step6 在内网服务器启动FRPC
./frpc -c ./frpc.ini
启动frpc,出现[web] start proxy success即可
Step7 在浏览器访问与验证
http://ccq.caichuanqi.cn:8000
在浏览器上访问成功
案例:通过 rdp 访问家里的机器
- 详情参见:
- 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu
案例:通过 SSH 访问公司内网机器
- 详情参见:
- 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu
案例:通过自定义域名访问部署于内网的 Web 服务
- 详情参见:
- 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu
案例:对外提供简单的文件访问服务
- 详情参见:
- 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu
FRP 常用功能
统计面板(Dashboard)
- 通过浏览器查看 frp 的状态以及代理统计信息展示。
注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。
需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:
- 打开浏览器通过 http://[server_addr]:7500 访问 dashboard 界面,用户名密码默认为 admin 。
加密与压缩
-
这两个功能默认是不开启的,需要在
frpc.ini
中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用 snappy: -
如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 SSH 协议等,通过设置 use_encryption = true,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。
-
如果传输的报文长度较长,通过设置 use_compression = true 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 CPU 资源。
TLS
-
从 v0.25.0 版本开始 frpc 和 frps 之间支持通过 TLS 协议加密传输。通过在 frpc.ini 的 common 中配置 tls_enable = true 来启用此功能,安全性更高。
-
为了端口复用,frp 建立 TLS 连接的第一个字节为 0x17。
注意: 启用此功能后除 xtcp 外,不需要再设置
use_encryption
。
代理限速
-
目前支持在客户端的代理配置中设置代理级别的限速,限制单个 proxy 可以占用的带宽。
-
在代理配置中增加 bandwidth_limit 字段启用此功能,目前仅支持 MB 和 KB 单位。
范围端口映射
- 在 frpc 的配置文件中可以指定映射多个端口,目前只支持 tcp 和 udp 的类型。
这一功能通过 range: 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。
例如要映射本地 6000-6005, 6007 这 6 个端口,主要配置如下:
实际连接成功后会创建 8 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_7。
X 参考文献
- 【附下载】带你使用frp实现内网穿透详细教程! - Zhihu
- windows 安装 frpc - 51CTO 【推荐】
版本:
frp_0.25.3_windows_amd64.exe
和0.61.3
的配置方式上,区别较大
- 用FRP做内网穿透使用远程桌面连接家里的windows电脑 - Zhihu 【推荐】
版本:
frp_0.33.0_linux_amd64.tar.gz
os : centos