commit 51022e39dc74ca3fb023b228a27ee5ab00bdb0c0
Author: zhangsan <646228430@qq.com>
Date: Fri Jul 11 09:59:15 2025 +0800
7.11 frp部署与使用示例编写
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..613ee2d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,40 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
+/data/
+/.idea/
diff --git a/docs/dev-ops/frpc/config/frpc.toml b/docs/dev-ops/frpc/config/frpc.toml
new file mode 100644
index 0000000..513ca6c
--- /dev/null
+++ b/docs/dev-ops/frpc/config/frpc.toml
@@ -0,0 +1,29 @@
+# 服务端地址 https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml
+serverAddr = "124.71.159.195"
+# 服务端配置的bindPort
+serverPort = 7000
+# token =
+
+[[proxies]]
+# 代理应用名称,根据自己需要进行配置
+name = "smile-dev-tech-01"
+# 代理类型 有tcp\udp\stcp\p2p
+type = "tcp"
+# 客户端代理应用IP
+localIP = "host.docker.internal"
+# 客户端代理应用端口
+localPort = 8234
+# 服务端反向代理端口;提供给外部访问
+remotePort = 8234
+
+[[proxies]]
+# 代理应用名称,根据自己需要进行配置
+name = "smile-dev-tech-02"
+# 代理类型 有tcp\udp\stcp\p2p
+type = "tcp"
+# 客户端代理应用IP
+localIP = "127.0.0.1"
+# 客户端代理应用端口
+localPort = 9001
+# 服务端反向代理端口;提供给外部访问
+remotePort = 9001
\ No newline at end of file
diff --git a/docs/dev-ops/frpc/docker-compose.yml b/docs/dev-ops/frpc/docker-compose.yml
new file mode 100644
index 0000000..59ff0a5
--- /dev/null
+++ b/docs/dev-ops/frpc/docker-compose.yml
@@ -0,0 +1,13 @@
+# 命令执行 docker-compose -f docker-compose.yml up -d
+version: '3.9'
+services:
+ frpc:
+ image: fatedier/frpc:v0.60.0
+ hostname: frpc
+ container_name: frpc
+ volumes:
+ - "./config/frpc.toml:/frpc.toml"
+ command:
+ - "-c"
+ - "/frpc.toml"
+ network_mode: "host"
diff --git a/docs/dev-ops/frps/config/frps.toml b/docs/dev-ops/frps/config/frps.toml
new file mode 100644
index 0000000..56d316f
--- /dev/null
+++ b/docs/dev-ops/frps/config/frps.toml
@@ -0,0 +1,10 @@
+# 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 =
\ No newline at end of file
diff --git a/docs/dev-ops/frps/docker-compose.yml b/docs/dev-ops/frps/docker-compose.yml
new file mode 100644
index 0000000..a22d340
--- /dev/null
+++ b/docs/dev-ops/frps/docker-compose.yml
@@ -0,0 +1,13 @@
+# 命令执行 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"
\ No newline at end of file
diff --git a/docs/dev-ops/smile-tech-app/docker-compose.yml b/docs/dev-ops/smile-tech-app/docker-compose.yml
new file mode 100644
index 0000000..2e2d289
--- /dev/null
+++ b/docs/dev-ops/smile-tech-app/docker-compose.yml
@@ -0,0 +1,9 @@
+version: '3.8'
+# 命令执行 docker-compose -f docker-compose-app.yml up -d
+services:
+ smile-tech-frp-app:
+ image: zhangsan/smile-tech-frp-app:1.0
+ container_name: smile-tech-frp-app
+ restart: always
+ ports:
+ - "8234:8234"
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..e80b4fd
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,104 @@
+
+
+ 4.0.0
+
+ cn.bugstack
+ smile-tech-frp
+ 1.0-SNAPSHOT
+ pom
+
+
+ smile-tech-app
+
+
+
+ 1.8
+ UTF-8
+ 8
+ 8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.12
+
+
+
+
+
+
+ com.alibaba
+ fastjson
+ 2.0.28
+
+
+ org.apache.commons
+ commons-lang3
+ 3.9
+
+
+ com.google.guava
+ guava
+ 32.1.3-jre
+
+
+
+
+
+ smile-tech
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.0
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.5
+
+ UTF-8
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ 2.7
+
+
+
+
+
+
+ dev
+
+ true
+
+
+ dev
+
+
+
+ test
+
+ test
+
+
+
+ prod
+
+ prod
+
+
+
+
+
\ No newline at end of file
diff --git a/smile-tech-app/Dockerfile b/smile-tech-app/Dockerfile
new file mode 100644
index 0000000..ec3d63b
--- /dev/null
+++ b/smile-tech-app/Dockerfile
@@ -0,0 +1,18 @@
+# 基础镜像 openjdk:8-jre-slim
+FROM openjdk:8-jre-slim
+
+# 作者
+MAINTAINER smile
+
+# 配置
+ENV PARAMS=""
+
+# 时区
+ENV TZ=PRC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+# 添加应用
+ADD target/smile-tech-frp-app.jar /smile-tech-frp-app.jar
+
+## 在镜像运行为容器后执行的命令
+ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /smile-tech-frp-app.jar $PARAMS"]
diff --git a/smile-tech-app/build.sh b/smile-tech-app/build.sh
new file mode 100644
index 0000000..f0c0a2b
--- /dev/null
+++ b/smile-tech-app/build.sh
@@ -0,0 +1 @@
+docker build -t zhangsan/smile-tech-frp-app:1.0 -f ./Dockerfile .
\ No newline at end of file
diff --git a/smile-tech-app/pom.xml b/smile-tech-app/pom.xml
new file mode 100644
index 0000000..0d02a79
--- /dev/null
+++ b/smile-tech-app/pom.xml
@@ -0,0 +1,110 @@
+
+
+ 4.0.0
+
+ cn.bugstack
+ smile-tech-frp
+ 1.0-SNAPSHOT
+
+
+ org.example
+ smile-tech-frp-app
+
+ jar
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ io.micrometer
+ micrometer-registry-prometheus
+
+
+ com.alibaba
+ fastjson
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.projectlombok
+ lombok
+
+
+ junit
+ junit
+ test
+
+
+
+
+ smile-tech-frp-app
+
+
+ src/main/resources
+ true
+
+ **/**
+
+
+
+
+
+ src/test/resources
+ true
+
+ **/**
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.6
+
+ true
+ false
+
+ **/*Test.java
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ edu.whut.smile.tech.Application
+ JAR
+
+
+
+
+
+
\ No newline at end of file
diff --git a/smile-tech-app/src/main/java/edu/whut/smile/dev/tech/Application.java b/smile-tech-app/src/main/java/edu/whut/smile/dev/tech/Application.java
new file mode 100644
index 0000000..f67fddf
--- /dev/null
+++ b/smile-tech-app/src/main/java/edu/whut/smile/dev/tech/Application.java
@@ -0,0 +1,58 @@
+package edu.whut.smile.dev.tech;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@SpringBootApplication
+@RestController()
+@RequestMapping("/api/")
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class);
+ }
+
+ /**
+ * http://localhost:8234/api/test
+ * http://124.71.159.195:8234/api/test
+ */
+ @RequestMapping(value = "/test", method = RequestMethod.GET)
+ public ResponseBodyEmitter test(HttpServletResponse response) {
+ response.setContentType("text/event-stream");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Cache-Control", "no-cache");
+
+ ResponseBodyEmitter emitter = new ResponseBodyEmitter();
+
+ String[] words = new String[]{"嗨,小伙伴。\r\n", "恭喜💐 ", "你的", " FRP 内网穿透 ", "部", "署", "测", "试", "成", "功", "了啦🌶!", "\r\nBy Smile https://blog.bitday.top"};
+ new Thread(() -> {
+ for (String word : words) {
+ try {
+ emitter.send(word);
+ Thread.sleep(250);
+ } catch (IOException | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }).start();
+
+ return emitter;
+ }
+
+ /**
+ * http://localhost:8234/api/query
+ * http://124.71.159.195:8234/api/query
+ */
+ @RequestMapping(value = "/query", method = RequestMethod.GET)
+ public String query() {
+ return "hi!";
+ }
+
+}
diff --git a/smile-tech-app/src/main/resources/application-dev.yml b/smile-tech-app/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..ca8b8a4
--- /dev/null
+++ b/smile-tech-app/src/main/resources/application-dev.yml
@@ -0,0 +1,14 @@
+server:
+ port: 8234
+ tomcat:
+ max-connections: 20
+ threads:
+ max: 20
+ min-spare: 10
+ accept-count: 10
+
+# 日志
+logging:
+ level:
+ root: info
+ config: classpath:logback-spring.xml
\ No newline at end of file
diff --git a/smile-tech-app/src/main/resources/application.yml b/smile-tech-app/src/main/resources/application.yml
new file mode 100644
index 0000000..495a57f
--- /dev/null
+++ b/smile-tech-app/src/main/resources/application.yml
@@ -0,0 +1,5 @@
+spring:
+ config:
+ name: smile-dev-tech
+ profiles:
+ active: dev
diff --git a/smile-tech-app/src/main/resources/logback-spring.xml b/smile-tech-app/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..b2f1932
--- /dev/null
+++ b/smile-tech-app/src/main/resources/logback-spring.xml
@@ -0,0 +1,112 @@
+
+
+
+
+ logback
+
+
+
+
+
+
+
+
+
+
+
+
+ info
+
+
+ %d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n
+ UTF-8
+
+
+
+
+
+
+
+ ./data/log/log_info.log
+
+
+ %d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n
+ UTF-8
+
+
+
+
+ ./data/log/log-info-%d{yyyy-MM-dd}.%i.log
+
+ 100MB
+
+
+ 15
+ 10GB
+
+
+
+
+
+
+ ./data/log/log_error.log
+
+
+ %d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n
+ UTF-8
+
+
+
+ ./data/log/log-error-%d{yyyy-MM-dd}.%i.log
+
+ 100MB
+
+
+ 7
+ 5GB
+
+
+
+ WARN
+
+
+
+
+
+
+ 0
+
+ 8192
+
+ true
+
+ false
+
+
+
+
+
+ 0
+
+ 1024
+
+ true
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file