diff --git a/novalon-manage-api/manage-gateway/Dockerfile b/novalon-manage-api/manage-gateway/Dockerfile
new file mode 100644
index 0000000..d285685
--- /dev/null
+++ b/novalon-manage-api/manage-gateway/Dockerfile
@@ -0,0 +1,9 @@
+FROM openjdk:21-jdk-slim
+
+WORKDIR /app
+
+COPY manage-gateway/target/manage-gateway-1.0.0.jar app.jar
+
+EXPOSE 8080
+
+ENTRYPOINT ["java", "-jar", "app.jar"]
diff --git a/novalon-manage-api/manage-gateway/pom.xml b/novalon-manage-api/manage-gateway/pom.xml
new file mode 100644
index 0000000..169ea14
--- /dev/null
+++ b/novalon-manage-api/manage-gateway/pom.xml
@@ -0,0 +1,55 @@
+
+
+ 4.0.0
+
+
+ cn.novalon.manage
+ novalon-manage-api
+ 1.0.0
+
+
+ manage-gateway
+ jar
+
+ Manage Gateway
+ Gateway module for Novalon Manage API
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-gateway
+ 4.1.0
+
+
+ io.micrometer
+ micrometer-registry-prometheus
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ cn.novalon.manage.gateway.GatewayApplication
+
+
+
+
+
diff --git a/novalon-manage-api/manage-gateway/src/main/java/cn/novalon/manage/gateway/GatewayApplication.java b/novalon-manage-api/manage-gateway/src/main/java/cn/novalon/manage/gateway/GatewayApplication.java
new file mode 100644
index 0000000..afdcd88
--- /dev/null
+++ b/novalon-manage-api/manage-gateway/src/main/java/cn/novalon/manage/gateway/GatewayApplication.java
@@ -0,0 +1,24 @@
+package cn.novalon.manage.gateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+public class GatewayApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GatewayApplication.class, args);
+ }
+
+ @Bean
+ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
+ return builder.routes()
+ .route("manage-app", r -> r
+ .path("/api/**")
+ .uri("http://manage-app:8081"))
+ .build();
+ }
+}
diff --git a/novalon-manage-api/manage-gateway/src/main/resources/application-dev.yml b/novalon-manage-api/manage-gateway/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..bbb479e
--- /dev/null
+++ b/novalon-manage-api/manage-gateway/src/main/resources/application-dev.yml
@@ -0,0 +1,13 @@
+spring:
+ cloud:
+ gateway:
+ routes:
+ - id: manage-app
+ uri: http://localhost:8081
+ predicates:
+ - Path=/api/**
+
+logging:
+ level:
+ org.springframework.cloud.gateway: TRACE
+ org.springframework.web.reactive: TRACE
diff --git a/novalon-manage-api/manage-gateway/src/main/resources/application-prod.yml b/novalon-manage-api/manage-gateway/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..31f06a8
--- /dev/null
+++ b/novalon-manage-api/manage-gateway/src/main/resources/application-prod.yml
@@ -0,0 +1,13 @@
+spring:
+ cloud:
+ gateway:
+ routes:
+ - id: manage-app
+ uri: http://manage-app:8081
+ predicates:
+ - Path=/api/**
+
+logging:
+ level:
+ cn.novalon.manage: INFO
+ org.springframework.cloud.gateway: INFO
diff --git a/novalon-manage-api/manage-gateway/src/main/resources/application.yml b/novalon-manage-api/manage-gateway/src/main/resources/application.yml
new file mode 100644
index 0000000..43a1fd8
--- /dev/null
+++ b/novalon-manage-api/manage-gateway/src/main/resources/application.yml
@@ -0,0 +1,42 @@
+server:
+ port: 8080
+
+spring:
+ application:
+ name: manage-gateway
+ cloud:
+ gateway:
+ routes:
+ - id: manage-app
+ uri: http://manage-app:8081
+ predicates:
+ - Path=/api/**
+ default-filters:
+ - name: Retry
+ args:
+ retries: 3
+ statuses: BAD_GATEWAY,SERVICE_UNAVAILABLE
+ methods: GET,POST
+ backoff:
+ firstBackoff: 10ms
+ maxBackoff: 50ms
+ factor: 2
+ basedOnPreviousValue: false
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: health,info,metrics
+ base-path: /actuator
+ endpoint:
+ health:
+ show-details: always
+ metrics:
+ tags:
+ application: ${spring.application.name}
+
+logging:
+ level:
+ cn.novalon.manage: DEBUG
+ org.springframework.cloud.gateway: DEBUG
diff --git a/novalon-manage-api/pom.xml b/novalon-manage-api/pom.xml
index b721d7c..9e5c85e 100644
--- a/novalon-manage-api/pom.xml
+++ b/novalon-manage-api/pom.xml
@@ -30,6 +30,7 @@
manage-sys
+ manage-gateway
@@ -126,6 +127,11 @@
springdoc-openapi-starter-webflux-ui
2.8.13
+
+ io.micrometer
+ micrometer-registry-prometheus
+ 1.13.4
+
org.jacoco
jacoco-maven-plugin