Java项目部署云服务器详细教程

Java项目部署云服务器详细教程

1.首先在模块根目录下(和pom一个路径)新建一个Dockerfile

bash 复制代码
FROM openjdk:8
MAINTAINER heavydrink
ADD target/shp-oauth2-1.0.0-SNAPSHOT.jar app.jar
ENV JAVA_OPTS="-Xms256m -Xmx256m"
ENV SPRING_ARGS=""
RUN echo "JAVA_OPTS=" $JAVA_OPTS
CMD java $JAVA_OPTS -jar app.jar --logging.file.path=/tmp/logs/spring-boot $SPRING_ARGS

这里需要修改target里面对应的jar包名

2.在父模块pom新增

复制代码
  <!-- 配置 Javadoc 插件,忽略某些警告 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <encoding>UTF-8</encoding>
          <annotationProcessorPaths>
            <path>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>${lombok.version}</version>
            </path>
            <path>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok-mapstruct-binding</artifactId>
              <version>${lombok-mapstruct-binding.version}</version>
            </path>
            <path>
              <groupId>org.mapstruct</groupId>
              <artifactId>mapstruct-processor</artifactId>
              <version>${org.mapstruct.version}</version>
            </path>
          </annotationProcessorPaths>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${maven-javadoc-plugin.version}</version>
        <configuration>
          <doclint>none</doclint>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <!-- spring boot maven plugin -->
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <version>${spring-boot.version}</version>
          <executions>
            <execution>
              <id>repackage</id>
              <goals>
                <goal>repackage</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <!-- docker maven plugin -->
        <plugin>
          <groupId>io.fabric8</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <version>${docker.maven.plugin.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

3.在当前模块pom中新增插件

复制代码
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.npu.oauth2.Oauth2Application</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <configuration>
                    <!-- Docker 远程管理地址-->
                    <dockerHost>https://xx.xx.xx.xx:2375</dockerHost>
                    <!-- CA 证书位置 -->
                    <certPath>E:\Workspace\docker-ca</certPath>
                    <!-- 镜像设置 -->
                    <images>
                        <image>
                            <!-- Docker 镜像名称定义 -->
                            <name>npu/${project.artifactId}:${project.version}</name>
                            <!-- 指定Dockerfile所在目录 -->
                            <build>
                                <contextDir>${project.basedir}</contextDir>
                            </build>
                            <!-- 别名用于容器命名 -->
                            <alias>${project.artifactId}</alias>
                            <!-- 容器run相关配置 -->
                            <run>
                                <!-- 配置运行时容器命名策略为:别名,如果不指定则默认为none,即使用随机分配名称 -->
                                <namingStrategy>alias</namingStrategy>
                                <!-- 端口映射 -->
                                <ports>
                                    <port>10010:10010</port>
                                </ports>
                                <!-- 数据卷 -->
                                <volumes>
                                    <bind>
                                        <volume>/etc/localtime:/etc/localtime</volume>
                                        <volume>/home/app/${project.artifactId}/logs:/tmp/logs</volume>
                                    </bind>
                                </volumes>
                                <!-- 设置环境变量 -->
                                <env>
                                    <!-- JVM参数 -->
                                    <JAVA_OPTS>-Xms256m -Xmx256m</JAVA_OPTS>
                                    <!-- 启动替换参数 -->
                                    <SPRING_ARGS>
                                        --spring.profiles.active=test --spring.cloud.nacos.discovery.ip=xx.xx.xx.xx
                                    </SPRING_ARGS>
                                </env>
                            </run>
                        </image>
                    </images>
                </configuration>
            </plugin>
        </plugins>
    </build>

注意修改几个点

com.npu.oauth2.Oauth2Application

这里要修改成自己启动类的名字

复制代码
          <dockerHost>https://xx.xx.xx.xx:2375</dockerHost>
          <!-- CA 证书位置 -->
          <certPath>E:\Workspace\huaweiyun-heavydrink-ca</certPath>

这里需要去制作CA证书,具体制作流程请看docker配置TLS那篇文章
10010:10010

端口映射这里需要正确的端口
<SPRING_ARGS>

--spring.profiles.active=test --spring.cloud.nacos.discovery.ip=xx.xx.xx.xx

</SPRING_ARGS>

这里要修改properties要启用的是哪个,这里我用的是test

后面这个ip就填写你要部署上去的云服务器的ip

4.打包

项目根模块执行maven clean 和package操作

然后去当前模块里plugins找到docker这个选项,点击里面的build就可以制作镜像到服务器了

5.运行

可以在云服务器编写脚本

这里给出一个示例脚本

复制代码
# bin/bash
app_name='shp-gateway'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker run -p 10001:10001 --name ${app_name} \
-v /etc/localtime:/etc/localtime \
-v /home/app/${app_name}/logs:/tmp/logs \
-e JAVA_OPTS="-Xms256m -Xmx256m" \
-e SPRING_ARGS="--spring.profiles.active=test --spring.cloud.nacos.discovery.ip=xx.xx.xx.xx" \
-d npu/${app_name}:1.0.0-SNAPSHOT
echo '----start container----'

这里要修改app_name,对应端口,profile环境,以及最后的ip

最后运行自己的脚本 bash xx.sh就可以了

相关推荐
Seven971 小时前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
怒放吧德德12 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆14 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌16 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊17 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang17 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang19 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解19 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
YuMiao1 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
SimonKing1 天前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员