我们将为你的环境(CentOS + Docker Compose + Maven + JDK 17)生成并部署一个基础的 Spring Cloud 微服务系统。整个项目结构将包括以下组件:
✅ 项目模块结构(Spring Cloud Alibaba 示例)
bash
springcloud-demo/
├── eureka-server/ # 注册中心
├── config-server/ # 配置中心(可选)
├── gateway/ # 网关服务
├── service-user/ # 用户微服务
├── service-order/ # 订单微服务
└── docker-compose.yml # 一键部署入口
一、构建服务模块
我们先从最核心的 eureka-server
开始。以下是所需关键文件:
1. eureka-server/pom.xml
XML
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-server</name>
<description>Eureka Server for Spring Cloud</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>17</java.version>
<spring-cloud.version>2022.0.5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. eureka-server/src/main/resources/application.yml
bash
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
3. EurekaServerApplication.java
java
package com.example.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
4. Dockerfile
bash
FROM openjdk:17
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
二、构建其他模块(如 gateway
、service-user
等)
1. gateway/pom.xml
XML
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gateway</name>
<description>Spring Cloud Gateway</description>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
</parent>
<properties>
<java.version>17</java.version>
<spring-cloud.version>2022.0.5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. gateway/src/main/resources/application.yml
bash
server:
port: 8080
spring:
cloud:
gateway:
routes: []
eureka:
client:
service-url:
defaultZone: http://eureka-server:8761/eureka
3. GatewayApplication.java
java
package com.example.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
4. Dockerfile
bash
FROM openjdk:17
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
可以根据上面结构复用类似配置,接入 Eureka,并配置简单 REST Controller + 注册信息。
三、docker-compose.yml
示例(部署所有服务)
bash
version: '3.8'
services:
eureka-server:
build: ./eureka-server
ports:
- "8761:8761"
gateway:
build: ./gateway
ports:
- "8080:8080"
depends_on:
- eureka-server
user-service:
build: ./service-user
ports:
- "8081:8081"
depends_on:
- eureka-server
networks:
default:
name: springcloud-net
四、部署步骤
-
上传项目至 CentOS(如:/root/springcloud-demo)
-
构建服务
cd /root/springcloud-demo mvn clean package -DskipTests
进入项目解压目录,依次执行以下命令:
cd eureka-server
mvn clean package -DskipTests
cd ../gateway
mvn clean package -DskipTests
cd ../user-service
mvn clean package -DskipTests
cd ../order-service
mvn clean package -DskipTests
cd ../auth-service
mvn clean package -DskipTests
-
构建 & 启动容器
docker compose up --build -d
-
访问 Eureka 控制台
http://<你的服务器IP>:8761
访问 user后台 控制台
http://<你的服务器IP>:8081/hello