美文网首页
Java 程序部署

Java 程序部署

作者: bowen_wu | 来源:发表于2021-09-09 14:42 被阅读0次

概述

主机上的一个进程监听着某个端口

Java 程序部署需要解决的问题

  • 代码上传到服务器
  • 依赖的第三方库
  • 依赖的特殊环境配置(数据库 | 缓存等)
  • 稳定性(挂了如何处理?)
  • 升级和回滚

Maven exec Plugin

  • 自动将所有的传递性依赖加入
  • 优点:简单
  • 缺点:不适用于自动化的场景
  1. pom.xml 添加 Plugin

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
        </plugins>
    </build>
</project>
  1. 添加运行 Java 程序的配置

<configuration>
    <executable>java</executable>
    <arguments>
        <argument>-classpath</argument>
        <!-- automatically creates the classpath using all project dependencies,
             also adding the project build directory -->
        <classpath/>
        <argument>com.example.Main</argument>
    </arguments>
</configuration>
  1. 运行
mvn exec:exec
mvn exec:exec -X // -X 使得报错信息更加详细

jar 包

jar 包 => 编译后的代码和资源打包 => 压缩包,相当于一个 zip 包 => Spring Boot 在打包的时候把所有相关的启动信息都打在了里面,所有运行时依赖的信息都在里面 => 所有的依赖 + 内嵌 Tomcat

  • 优点:简单可靠
  • 缺点:依赖于 JVM 环境
mvn package // 打包, 生成 jar 包
java -jar xxx.jar // 运行 xxx jar 包

# 等同于 
java --classpath xxx com.xxx.yyy.Main

在 jar 包中 META-INF/MANIFEST.MF 其中有重要的信息,其中包括了 Main-Class,即上述的 com.xxx.yyy.Main

后台启动 | 关闭 Java 服务

启动

  1. nohup == no hung up
nohup java -jar test.jar & 
nohup java -jar test.jar > temp.txt &  // 将日志文件输入到 temp.txt
  1. tmux => terminal multiplexer 终端多路复用器
    1. tmux => 进入
    2. control + b 之后按 d => 脱离
    3. tmux attach => 回到 tmux
    4. exit => 退出
  2. 上述两种方法无法解决进程崩溃。服务机制:进程放在后台运行,同时监控进程,如果进程出现问题,服务会自动重启使得对外服务不中断 => Google <OS> create service
  3. docker => docker run -d

列出后台进程

ps -ef | grep java

杀死进程

kill -9 <PID> // -9 表示无条件终止

Docker

  • 将所有的依赖,包括操作系统,打包在一起
  • 完全的资源隔离
  • 轻量级,启动迅速
  • 方便大规模水平扩展

服务器搭建 Docker Register

docker pull registry
docker run -d -p 5000:5000 --restart always --name registry registry:2

之后配置 docker 的配置文件 daemon.json

{
    "insecure-registries": [
        "http://<ip>:<port>"
    ]
}

Dockerfile

# 基础镜像
FROM openjdk:11.0.12-jdk

RUN mkdir /app
WORKDIR /app

# 相对路径相对于当前目录
COPY your/jar/path/xxx-0.0.1-SNAPSHOT.jar  /app

# 暴露端口
EXPOSE 8080

CMD ["java", "-jar", "xxx-0.0.1-SNAPSHOT.jar"]

Build

# . 代表当前文件
docker build [-f <DockerfileName>] -t <Ip>:<Port>/<Name>:<Tag> . 

Push

推送到远程,默认推送至 Docker 中心仓库

# docker push <Ip>:<Port>/<Name>:<Tag>,推送至私服 Ip:port
docker push 1.2.3.4:5001/xxx:0.0.1

服务器拉取镜像

# docker pull <Ip>:<Port>/<Name>:<Tag>
docker pull 1.2.3.4:5001/xxx:0.0.1

启动 Docker 镜像

在服务器上启动 Docker 镜像即启动 Java 服务

docker run -p 8081:8080 -d xxx

之后便可以通过 8081 端口访问 Java 服务了

NGINX 代理

NGINX 作为 Load Balancer configuration

# nginx.conf
events {}
http {
   # NGINX 代理静态资源,css 文件可以加载但是不生效 => css文件正常加载
   include       mime.types;
   default_type  application/octet-stream;
   
   upstream app {
      server <局域网IP>:8081;
   }

   server {
      listen 80;

      location / {
         root   /static; # 静态文件
         autoindex on;
      }

      location /api {
         proxy_pass http://app;
      }
   }
}

启动 NGINX 代理

docker run --name nginx -v /<path>/<to>/nginx.conf:/etc/nginx/nginx.conf:ro -v /<path>/<to>/<static>/<file>:/static -p <对外暴露的端口号>:80 -d nginx

相关文章

  • docker部署前端和后端打包程序

    docker部署前端vue打包程序、后端java打包程序。前端vue打包后部署在nginx容器,后端部署在jdk8...

  • 回忆Sonarqube7.8详细部署

    主要部署步骤 1、安装 java2、安装 mysql3、部署sonarqube主程序 部署环境 ubuntu 20...

  • Java 程序部署

    概述 主机上的一个进程监听着某个端口 分布式 当访问的用户太多 垂直扩展 => 买更好的机器 水平扩展 => 加机...

  • Tomcat部署Web应用方法总结

    Tomcat部署Web应用方法总结在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署。在下...

  • 热部署

    对于Java应用程序来说,热部署就是在运行时更新Java类文件。 热部署的原理是什么? 想要知道热部署的原理,必须...

  • 使用Java操作Docker

    本人在做实验过程中,需要通过Java程序部署docker容器。故尝试搜集资料,实现在Java端可以操作部署dock...

  • 查看内网主机的JVM信息

    查看内网主机的JVM信息 Java程序部署在没有公网IP的主机上,登陆该主机需要跳板机。 方法一 Java程序启动...

  • JAVA Day01[概述、环境部署、入门程序、常量、变量、数据

    JAVA Day01[概述、环境部署、入门程序、常量、变量、数据类型] 本章内容 Java语言的发展历史(了解) ...

  • Docker 部署java 程序

    通常情况下制作镜像时,都是将jar包直接Add或Copy进入镜像中,这样启动容器后,如需更新jar包,需要重新制作...

  • Java面试题整理汇总

    1. Java程序基础 1.1开发和运行环境1.2Java语言概述1.3生成,部署和配置 2. Java语法基础 ...

网友评论

      本文标题:Java 程序部署

      本文链接:https://www.haomeiwen.com/subject/zvzvwltx.html