java部署项目流程几种常见方式详解

 更新时间:2025年06月06日 08:46:55   作者:x-ming-code  
部署Java项目通常有几种常见的方法,具体选择哪种方法取决于项目需求、资源、团队习惯等因素,这篇文章主要介绍了java部署项目流程几种常见方式,文中通过代码介绍的非常详细,需要的朋友可以参考下

java部署有几种方式,这里说一个比较简单的

方式一:Docker 容器化部署

Docker:将Java应用程序及其运行时环境打包成一个Docker镜像。Docker容器提供了隔离的运行环境,确保应用程序在不同环境中具有一致的行为。可以通过Docker Compose或Kubernetes等工具来管理和部署多个容器化应用。(后续会出教程)

方式二:云平台部署

  • PaaS (Platform as a Service):如Heroku、Google App Engine、AWS Elastic Beanstalk等云平台提供了Java应用的托管服务。开发者只需上传代码或WAR/JAR文件,平台会自动处理应用的部署、扩展和管理。

  • IaaS (Infrastructure as a Service):如AWS EC2、Azure VM、Google Compute Engine等云平台允许您创建虚拟机并在其上部署Java应用。您可以完全控制服务器的配置和环境设置。

  • Serverless:如AWS Lambda、Google Cloud Functions等无服务器计算平台允许您以函数的形式部署Java代码,按需执行并自动扩展。

这里为了方便使用宝塔进行部署

宝塔面板(BT Panel)是一款基于Web的Linux服务器管理工具,旨在简化Linux服务器的管理和部署过程。它提供了图形化的用户界面,宝塔面板支持多种操作系统,如CentOS、Ubuntu、Debian等,并且提供了丰富的功能来帮助用户部署和管理网站、数据库、邮件服务等。

涉及到具体的部署方式,前端要遵循 Next.is 服务端渲染的部署模式,基于 Node.is 运行;后端可以直接运行 jar 包。

也可使用docker进行部署,有空了会出过程

部署计划

前端:通过 Nginx 进行部署,访问地址为 http://{域名}。由于是 Node 服务,实际运行在 3000 端口。

后端:通过 Nginx 进行转发,访问地址为 http://{域名}/api 。实际运行在 8101 端口。JDK 建议选择 17 版本!

为什么要用 Nginx 转发?

前端和后端域名一致,保证不会出现跨域问题。

Nginx:服务器 80 端口,默认已安装,

数据库:服务器 3306 端口,默认已安装。

Redis:服务器 6379 端口,需要手动安装

做好规划后,我们需要在腾讯云控制台的防火墙中开通需要外网访问的服务端口:

添加自己需要开放的防火墙即可

环境准备

mysql,这里使用docker进行安装

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

里面的账号密码可以自行设置

宝塔也可进行直接安装mysql,这里不做演示,redis使用宝塔进行演示

redis安装,搜索直接安装即可

要部署 Java 项目,必须安装 JDK。在宝塔面板中,可以通过下图的方式快速安装指定版本的 JDK。

建议多安装几个版本,比如 JDK8、11、17,需要用哪个版本的时候可以随时切换。

后端代码打包

修改 application-prod 生产环境配置,包括数据库、Redis 等,替换为上述安装依赖时指定的配置(如用户名、密码)

以下仅供参考,总之就是把数据库连接等配置改为线上地址 改之前可以手动进行连接测试

# 线上配置文件
server:
  port: 8101
spring:
  # 数据库配置
  # todo 需替换配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://你自己的服务器地址:3306/mianshiniu
    username: root
    password: 你自己的数据库密码
  # Redis 配置
  # todo 需替换配置
  redis:
    database: 1
    host: 你自己的服务器地址
    port: 6379
    timeout: 5000
    password: 你自己的数据库密码
  # Elasticsearch 配置
  # todo 需替换配置
  elasticsearch:
    uris: http://你自己的服务器地址:9200
#    username: root
#    password: 你自己的es密码
mybatis-plus:
  configuration:
    # 生产环境关闭日志
    log-impl: ''
#mybatis-plus:
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 接口文档配置
knife4j:
  basic:
    enable: true
    username: root
    password: 自己设置



sa-token:
  # token 名称(同时也是 cookie 名称)
  token-name: token
  # token 有效期(单位:秒) 默认30天,-1 代表永久有效
  timeout: 2592000
  # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
  active-timeout: -1
  # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
  is-concurrent: false
  # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
  is-share: true
  # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
  token-style: uuid
  # 是否输出操作日志
  is-log: true

打包即可

打包成功后会得到一个jar包

上传jar包到服务器

上传完成后,运行jar包即可

启动成功后即可看到

如果失败了可查看项目运行日志

但是现在我们无法通过ip地址加接口文档地址访问到测试文档

这是因为我们的服务器防火墙没有放开 8101端口。这里我们故意不放开,因为在之前的部署规划中,后端需要通过 Nginx 进行转发,从而解决跨域问题。

nginx配置

新建一个php(只是使用Nginx进行代理转发,并不写代码)

如果访问的是后端接口(地址有 /api 前缀),则 Nginx 将请求转发到后端服务,对应配置代码如下:

location /api {
  proxy_pass  http://127.0.0.1:8101;
  proxy_set_header Host $proxy_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_buffering off;
  proxy_set_header Connection "";
}

添加代理规则

一定要注释掉下列配置!**否则访问接口文档时,静态资源的加载可能会出错:

服务器ip地址加/api/doc.html即可访问到接口文档

前端

环境准备

要选择稳定的版本进行安装

打包

  • 线上的前端需要请求线上的后端接口,所以需要修改 libs/request.ts 文件中的请求地址为线上:

改为线上地址,因为Next.js在构建时需要调用后端接口,所以后端必须启动才能完成构建

  • 修改 Nextjs 配置文件 next.config.mjs ,使用 standalone 模式部署,这样上传到服务器的时候可以不用上传 nodemodules 目录。

ignoreBuildErrors: true, 忽略构建时的语法错误

  • 执行打包命令,注意node.js版本要大于18.18,否则报错

如果构建过程中出现其他错误,需要根据错误信息排查并处理。比如下面这个示例,显然是 TypeScript 类型错误:

找到 fileController 文件,加个 // @ts-ignore 就好了:

可能还会遇到其他因为类型的错误,这类错误不影响运行,但是会在 Next,js 打包时被检测,可以根据实际情况修改。或者直接在打包时忽略 TypeScript错误,参考官方文档:Configuration: TypeScript | Next.js

注意,如果后端接口没启动,也可能会导致打包错误!

打包成功后,看到下图信息,能够很直观地看到哪些页面用到了静态渲染和服务端渲染:

然后在 .next 日录下会生成 standalone 目录,该目录就是可以独立部署的前端包。但是必须按照如下模式组织目录,一定不能有错!

  • 1.将项目根目录下的 public 日录移动到.next/standalone 内
  • 2.将.next/static日录移动到.next/standalone/.next内

目录结构如下

3.上传服务器,只需要上传standalone下的文件即可,建议打成压缩包上传,解压即可

4.新建一个node项目

修改配置

可以查看启动时的项目日志,快速定位问题

5 nginx转发

当用户访问除了后端之外的任何地址时,都找到前端的node服务 http://127.0.0.1:3000;,从而访问到页面

location / {
  proxy_pass  http://127.0.0.1:3000;
  proxy_set_header Host $proxy_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_buffering off;
  proxy_set_header Connection "";
}

完整的nginx代理如下

访问即可 ip或域名即可

总结 

到此这篇关于java部署项目流程几种常见方式详解的文章就介绍到这了,更多相关java部署项目流程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java类比C++的STL库详解

    java类比C++的STL库详解

    这篇文章主要介绍了java类比C++的STL库详解,标准模板库,是C++标准库的重要组成部分,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,STL 是一些容器、算法和其他一些组件的集合,需要的朋友可以参考下
    2023-08-08
  • springboot如何为web层添加统一请求前缀

    springboot如何为web层添加统一请求前缀

    这篇文章主要介绍了springboot如何为web层添加统一请求前缀,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Python实现filter函数实现字符串切分

    Python实现filter函数实现字符串切分

    这篇文章主要介绍了Python实现filter函数实现字符串切分,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 一文搞清楚Spring事务

    一文搞清楚Spring事务

    Spring事务是指在Spring框架中对于数据库操作的一种支持,它通过对一组数据库操作进行整体控制来保证数据的一致性和完整性。本文介绍Spring事务介绍的非常详细,有需要的朋友可以参考本文
    2023-04-04
  • Spring项目中使用Junit单元测试并配置数据源的操作

    Spring项目中使用Junit单元测试并配置数据源的操作

    这篇文章主要介绍了Spring项目中使用Junit单元测试并配置数据源的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java注释和关键字实例详解

    Java注释和关键字实例详解

    注释是对程序语言的说明,有助于开发者和用户之间的交流,方便理解程序,注释不是编程语句,因此被编译器忽略,下面这篇文章主要给大家介绍了关于Java注释和关键字的相关资料,需要的朋友可以参考下
    2023-01-01
  • Java8并行流中自定义线程池操作示例

    Java8并行流中自定义线程池操作示例

    这篇文章主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • JAVA中使用MD5加密实现密码加密

    JAVA中使用MD5加密实现密码加密

    本篇文章主要介绍JAVA中使用MD5加密实现密码加密,很多地方都要存储用户密码,这里整理了详细的代码,有需要的小伙伴可以参考下
    2017-07-07
  • idea maven 经常主目录自动变回默认的解决方法

    idea maven 经常主目录自动变回默认的解决方法

    很多朋友反映idea maven 经常主目录自动变回默认,遇到这样的问题真的很头疼,该如何解决呢?下面小编给大家介绍下idea maven目录变回默认的解决方法,需要的朋友可以参考下
    2022-08-08
  • mybatis insert返回主键代码实例

    mybatis insert返回主键代码实例

    这篇文章主要介绍了mybatis insert返回主键代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论