内网穿透(FRP)部署小结,服务器上xxl-job 调度本机任务

一、内网穿透是什么?

"内网穿透"是一种让外网设备可以访问内网服务的技术。


一句话解释:

内网穿透 = 让"家里/公司里的电脑"被"外面的网络"访问到。


举个例子:

你在家里的电脑上搭了一个网站(比如运行在 http://192.168.1.100:8080),但这个地址是内网IP,外面的人根本访问不到。

这时候你可以用内网穿透工具(如 frp、Ngrok、花生壳、ZeroTier 等),把内网端口"映射"到一个公网(云服务器)地址,比如:

复制代码
https://abc123.ngrok.io → 你家里的电脑:8080

云服务器地址 ---> 你家里的电脑:8080

别人访问这个公网地址,就能看到你家里的网站了


技术原理(简化版):
  1. 内网客户端主动连接一个公网服务器(云服务端)。
  2. 公网服务器建立一个"隧道"。
  3. 外网用户访问公网服务器的某个端口 → 数据通过隧道 → 转发到你内网的服务。

二、怎么部署内网穿透 frp ?

云服务器和客户端都需要部署

1、云服务器部署(frps)

准备好docker-compose.yml文件
JAVA 复制代码
// 可以从这里拉取
https://gitcode.com/weixin_47555380/fpr.git  
docker-compose.yml:
JAVA 复制代码
# 命令执行 docker-compose -f docker-compose.yml up -d
version: '3.9'
services:
  frps:
    image: fatedier/frps:v0.60.0
    hostname: frps
    container_name: frps
    volumes:
      - "./config/frps.toml:/frps.toml"
    command:
      - "-c"
      - "/frps.toml"
    network_mode: "host"
frps.toml:
JAVA 复制代码
# https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml
[common]
# 监听端口
# 与本行监听端口配置要一致
bind_port = 7000   
# 面板端口
dashboard_port = 7500
# 登录面板的账号密码(修改成自己的)
dashboard_user = admin
dashboard_pwd = admin
# token =
启动docke docker-compose -f docker-compose.yml up -d

2、windows本机部署(frpc)

2.1、如果本机有安装docker,可以直接拉取,docker部署
JAVA 复制代码
// frpc目录
https://gitcode.com/weixin_47555380/fpr.git  

// 执行  docker-compose -f docker-compose.yml up -d 即可
2.2、如果本机没有安装docker,则下载压缩包
JAVA 复制代码
https://gitcode.com/weixin_47555380/fpr.git  
解压后修改frpc.toml文件
frpc.toml:
JAVA 复制代码
serverAddr = "XXXXX"  // 云服务器地址(公网ip)
serverPort = 7000	  // 与frps配置bind_port 一致

[[proxies]]
name = "xxl-job"  // 服务名称
type = "tcp"
localIP = "127.0.0.1"
localPort = 9999    // 需要访问的本机服务端口
remotePort = 9999

 // 可以配置多个服务
[[proxies]]
name = "myApp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080
启动
JAVA 复制代码
// exe文件 目录下 cmd执行
.\frpc.exe -c frpc.toml

注意1:云服务器防火墙需要放行以下端口

端口与角色对照

端口 方向 机器 作用 必须
7000 入站 云服务器 frps 与 frpc 握手
7500 入站 云服务器 Web 面板(可选)
9999 入站 云服务器 转发到本机执行器
8080 入站 云服务器 转发到本机执行器

注意2:本机安装frpc时,可能会被windows杀毒系统拦截,注意放行

三、使用场景 :

当我们云服务器部署了xxl-job,本地想要使用xxl-job 定时功能时,因为XXL-JOB 调度中心在"触发时机"到达时,自己作为 HTTP 客户端去 POST 请求我们本机 执行器 接口时,是公网 ---> 内网,访问不通,执行器不会执行定时任务
当我们配置frp 内网穿透后,本机执行器 run方法能被访问,能够执行:
JAVA 复制代码
调度中心(Leader) ──HTTP POST──▶ 公网IP:9999 ──frp隧道──▶ 本机9999/run
注意任务调度中心 --> 执行器管理界面需要手动录入 云服务器ip(公网ip):端口(9999)
xxl-job配置文件:
JAVA 复制代码
xxl:
  job:
    # 验证信息 官网Bug https://github.com/xuxueli/xxl-job/issues/1951
    accessToken: default_token
    # 注册地址
    admin:
      addresses: http://云服务器ip:9090/xxl-job-admin
    # 注册执行器
    executor:
      #  执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 "IP:PORT" 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
      address:
      appname: job
      # 执行器IP 配置为本机IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
      ip:
      # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath: ./data/applogs/xxl-job/jobhandler
      # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 30
相关推荐
〝七夜5691 小时前
jdk1.8新增的类以及常用的方法有哪些?
java
万岳科技程序员小金1 小时前
在线教育系统源码选型对比:PHP、Java、Flutter、UniApp谁更适合?
java·uni-app·php·软件开发·在线教育系统源码·教育app开发·教育软件开发
hazhanglvfang1 小时前
使用curl测试java后端post接口
java·开发语言
7澄11 小时前
Servlet 前后端交互实战(登录/注册案例)
运维·服务器·ajax·servlet·jquery·form·前后端交互
雨中飘荡的记忆1 小时前
设计模式之建造者模式详解
java·设计模式·建造者模式
雨中飘荡的记忆1 小时前
StepBuilder模式详解
java·建造者模式
通义灵码1 小时前
Java 后端开发工程师使用 Qoder 实现面向 API 的运维平台前端开发
java·运维·状态模式
-大头.1 小时前
Spring消息集成:从企业模式到云原生
java·spring·云原生
杀死那个蝈坦1 小时前
Redis 缓存预热
java·开发语言·青少年编程·kotlin·lua