内网穿透(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
相关推荐
TG:@yunlaoda360 云老大31 分钟前
华为云国际站代理商GeminiDB的企业级高可用具体是如何实现的?
服务器·网络·数据库·华为云
j_xxx404_1 小时前
Linux:第一个程序--进度条|区分回车与换行|行缓冲区|进度条代码两个版本|代码测试与优化
linux·运维·服务器
是一个Bug1 小时前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟1 小时前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
我是Superman丶1 小时前
《Spring WebFlux 实战:基于 SSE 实现多类型事件流(支持聊天消息、元数据与控制指令混合传输)》
java
廋到被风吹走1 小时前
【Spring】常用注解分类整理
java·后端·spring
是一个Bug1 小时前
Java基础20道经典面试题(二)
java·开发语言
Z_Easen2 小时前
Spring 之元编程
java·开发语言
leoufung2 小时前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode
阿蒙Amon2 小时前
C#每日面试题-委托和事件的区别
java·开发语言·c#