Java Web 程序在 Linux 上的部署 - 指南
目录
前言
本文介绍了在Linux系统中部署Web项目的完整流程。首先讲解了使用apt命令管理软件包、安装JDK和MySQL的基本操作;然后详细说明了如何通过Maven配置多环境参数、打包项目并上传到服务器;最后介绍了后台运行程序、处理端口冲突的方法。整个部署过程涵盖了从基础环境搭建到项目上线的关键步骤,为开发者提供了实用的Linux部署指导。
一、搭建部署环境
使用 apt 在 Linux 环境中安装,更新,删除和管理软件包;
1. apt 的常用命令
# 列出所有软件包
apt list
# 更新软件包数据库
apt-get update
# 安装软件包
apt install package_name
# 移除软件包
apt remove package_name
apt purge package_name
2. 安装 JDK
安装软件前,先更新包管理器中的软件资源:
apt-get updtae
查找及安装 JDK:
# 查找 jdk
apt list | grep "jdk"
# 安装 jdk
apt install openjdk-17-jdk
# 查看 jdk 版本
java -version
3. 安装 mysql
# 查找安装包
apt list | grep "mysql-server"
# 安装 mysql
apt install mysql-server
# 查看 mysql 状态
systemctl status mysql
二、部署 Web 项目到 Linux
1. 环境配置
为了避免在开发环境中和生产环境中切换时,频繁的修改程序,因此配置文件通常写两个,程序打包时,选择使用哪个配置文件即可,避免修改程序;

开发环境使用 dev 配置文件,线上环境使用 prod 配置文件;两个文件的格式是相同的,内容需要根据数据库的配置填写不同的内容;
以 dev 为例:
spring:
application:
name: spring-blog
# 数据库配置
datasource:
url: jdbc:mysql://127.0.0.1:3308/java_blog_spring?characterEncoding=utf8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mapper-locations: classpath:mapper/**Mapper.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置打印 MyBatis日志
map-underscore-to-camel-case: true #配置驼峰自动转换
logging:
file:
name: spring-blog.log
在 application.yml 中指定使用哪个配置文件;
spring:
profiles:
active: dev
为了防止 application.yml 中的总是需要修改,可以从 Maven 环境中读取配置变量:
dev
dev
prod
prod
修改 application.yml:
spring:
profiles:
active: @profile.name@
2. 构建项目并打包
使用 Maven 进行打包:
1. 需要选择使用哪个配置文件,勾选好之后,要刷新,重新加载 Maven 配置;

2. 如果是线上环境,数据库配置和本地环境不同,打包时测试相关的操作会失败,因此可以跳过测试;

3. 双击 package 进行打包;
打包完,在指定目录中找到打包好的软件包,通常有几十兆,如果打包过小,只有几兆,可能是 Maven 中打包插件有问题,没有打包引入的第三方的代码;

3. 上传 jar 包到服务器
将打好的 jar 包托到服务器的指定目录:

拖动需要使用 rzsz 命令,如果拖动失败,先安装 rzsz:
apt-get install lrzsz
成功后运行程序:
nohup java -jar blog-spring-0.0.1-SNAPSHOT,jar &
使用 nohup 指令,可以使程序在 shell 窗口关闭后也能运行(后台运行程序);
程序运行后,注意一定要开放应用程序的端口号;
一切就绪后,使用浏览器进行访问,检查能否访问成功;
4. 解决端口号冲突
如果端口号冲突,先查找到使用这个端口进程;
netstat -anp | grep "8080"
找到使用这个端口的进程,查看这个进程是什么:
ps aux | grep "进程号"
如果这个进程可以不运行,可以杀掉进程:
kill 进程号

浙公网安备 33010602011771号