Linux 部署Java应用程序
只是做简单的流程简介, 如果有不足支持, 还望海涵
一、Linux 环境部署
http://cn.linux.vbird.org/
为了进行部署, 需要把 javaWeb(jar包) 程序放到 linux 上, 需要先把对应的依赖的软件环境搭建好.
安装一些必要的软件程序.
Jdk
Tomcat
Mysql / MariaDB
服务器环境:
Linux(CentOS系统) + JDK1.8 + MariaDB(MySQL)
1.1 搭建 Java 部署环境
yum 命令
yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.
包管理器就好比 "应用商店", 我们可以在应用商店上下载一些 app.
yum 起到的功能和 Maven 的依赖管理功能类似. 使用 Maven 能帮我们方便的安装一些第三方 jar 包, 而yum 方便我们方便的安装第三方程序.
类似的, Github 也能起到 "软件仓库" 的效果, 而且确实有些编程语言的包管理工具就是基于
Github (例如 Go 语言). 只不过, Github 不光能用于分发程序, 也能管理源码并进行协同开发, 而yum 和 maven 都是仅用于分发程序
查看软件包列表
yum list | grep [软件包关键字] # 注意, 最好要加上 grep, 否则罗列的内容会非常多, 导致机器很卡
安装软件包(需要管理员权限)
yum install [软件包名字]
卸载软件包(需要管理员权限)
yum remove [软件包名字]
注意事项 yum 所有的命令必须保证网络是联通情况下, 才能使用(云服务器一般网络都是良好的). yum install / yum remove 必须具备管理员权限(root 用户). 可以使用 ping www.baidu.com 来检测网络的畅通情况
安装 JDK(Java 编译环境)
推荐使用 JDK 1.8, 可根据自己本地的 JDK 版本来安装 Linux 版本
yum install java-1.8.0-openjdk.x86_64
注意: yum上的 JDK 是 OpenJDK, 是一个开源版本的 JDK, 和 Oracle 官方的 JDK 略有差别.
此处我们就使用 OpenJDK 即可. 安装 Oracle JDK 比较麻烦. 使用 java -version 验证是否安装成功. 如果提示 "java 命令找不到" 则说明安装失败.
安装 Tomcat(http服务器)
在将一个 Spring Boot 程序部署到 Linux 系统时,通常不需要单独安装 Tomcat。Spring Boot 的一个主要特点是能够将应用程序打包为一个独立的、可执行的 JAR 文件,其中已经嵌入了一个内嵌的 Tomcat(或其他支持的容器,如 Jetty 或 Undertow)。这意味着你可以通过直接运行这个 JAR 文件来启动你的应用,而不需要外部的 Tomcat 服务器。
-
下载 Tomcat 压缩包
由于 yum 源上默认的 Tomcat 7 版本, 比较旧了. 我们一般使用 Tomcat 8, 所以需要手动安装, 不能使用yum 命令进行安装.
下载 Tomcat 压缩包 下载路径可以参考官网 https://tomcat.apache.org/download-80.cgi
需要手动安装 tomcat, 从官网上下载 .zip 压缩包上传到 linux 服务器上, 就可以使用了.
如果需要将文件啥的拖拽上传到liunx 上, 可以使用 :
yum install lrzsz
解压缩 Tomcat
unzip apache-tomcat-8.5.49.zip # 使用 unzip 命令解压缩
如果 unzip 命令找不到, 则先 yum install unzip 即可
修改可执行权限
cd apache-tomcat-8.5.47/bin # 将所有 .sh 后缀的文件加上可执行权限(后面会介绍) chmod +x *.sh
启动 Tomcat
sh bin/startup.sh
验证是否启动成功
# 方法1 查看 tomcat 进程是否存在 ps aux | grep tomcat # 方法2 查看端口 8080 是否被绑定 netstat -anp | grep 8080 # 方法3 使用 curl 命令访问默认 demo curl 127.0.0.1:8080 # 方法4 使用 sudo 查找占用8080端口的进程ID: sudo lsof -i :8080
如果进程存在或者端口状态正确(LISTEN 状态) 或者能够访问到默认主页, 说明启动成功.
Linux 的 Tomcat 目录结构和 Windows 完全一致. (就是同一个 zip 包解压缩出来的)
外网访问 tomcat 默认 demo
在浏览器地址栏中, 即可看到默认的页面 http://[服务器外网ip]:8080/
在外网访问这个页面之前需要先开启服务器的 "安全组" 功能. 登陆自己的云服务账户, 在主页中找到 控制台 -> 自己的服务器 -> 安全组 需要配置安全组, 允许外部主机访问服务器的 8080 端口. 安全组配置界面如果找不到, 可以随时咨询云服务器客服 , 或百度查询
(1) 选择加入安全组
(2) 选择新建安全组
详细操作,可根据自己用云服务器, 对应的去查询相关操作.
安装 MariaDB / MySQL
MySQL 同样也可以使用 yum 安装. 但是要修改一些配置, 稍微复杂一些
参考陈沛鑫老师写的一个知乎上的文章.
https://zhuanlan.zhihu.com/p/49046496
yum 上的是 MariaDB, 和纯正的 MySQL 还不太一样. MariaDB 和 MySQL 的关系, 类似于 CentOS 和 RedHat 的关系. 从使用角度上, MariaDB 和MySQL 之间都是兼容的 .
在数据库运行过程中出现问题, 可以查看 MySQL 的错误日志.
修改密码: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
在 MySQL 中通过这个命令, 获取到日志的路径
mysql> show variables like 'log_error';
# 输出结果
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| log_error | /var/log/mariadb/mariadb.log |
+---------------+------------------------------+
使用 vim 或 less 查看该文件内容即可.
less /var/log/mariadb/mariadb.log
创建数据库时为了支持中文,统一使用 utf8mb4 字符集
create database demo_db charset utf8mb4;
2.1 修改本地程序的配置文件
2.1.1 数据库配置
如果我们先让咱们的程序启动时, 自动的建库建表, 可以用以上配置, 会自动的执行的我们指定路径的 sql 文件.
如果我们是平常的设置, 那么在此之前, 需要在服务器上的 mysql/ MariaDB 上建库建表(我们在本地,建库建表的时候, 建议保存好相关sql 语句, 方便后续的创建, 调整).
2.1.2 日志文件配置
2.1.3 自定义配置
总之, 线上环境跟本地环境的配置文件的一些路径, 配置的信息要注意区分开来, 不要使用本地的路径, 不然上传之后, 既定功能可能无法实现.
2.2 打包上传
这里使用 IDEA 来打包程序
如果不跳过测试, 测试代码中如果有不通过的就会导致打包失败, 而且也必要将测试打包进行.
看到 BUILD SUCCESS 就表示程序打包成功了~
打包后的 .jar 包在工程路径的 target\ 目录之下.
我们将 .jar 文件直接拖到 Linux 上我们为程序准备的目录中
如果需要将文件啥的拖拽上传到liunx 上, 可以使用 :
yum install lrzsz
2.3 运行程序
nohup java -jar jar包文件名 &
nohup 英文全称是 nohang up (不挂起), 用于在系统后台不断地运行命令, 退出终端不会影响程序的运行.
指定配置文件
nohup java -jar forum.jar --spring.profiles.active=application.yml &
参数说明:
Command : 要执行的命令.
Arg: 一些参数, 可以指定输出文件.
&: 让命令在后台执行, 终端退出后命令依旧执行.
三、进程无法启动?
3.1 端口占用
每一个程序在启动的时候就会拥有一个 端口号,作为该程序在网络通信中的身份标识,那么这个身份标识在有些时候 或默认或主动设置 端口号,或者重新部署程序, 端口被已启动的程序占用等情况,我们可以根据需求,决定是否释放端口, 或者主动修改端口号,不过有些应用程序会占用默认端口, 例如 MySQL 服务器就默认占用 3306 端口。
释放被占用的端口:
-
查找占用8080端口的进程ID:
sudo lsof -i :8080
-
结束占用端口的进程,可以使用
kill
命令来结束该进程。例如,如果上一步的输出显示进程ID为1234,则可以使用以下命令结束该进程:
sudo kill 1234
-
确认端口被释放,可以再次使用
lsof
命令验证端口是否已被释放。
sudo lsof -i :8080
防火墙设置
有些时候, 及时我们部署成功, 我们也无法通过外部访问, 可以考虑一下是否是防火墙将该进程进行拦截.
在CentOS Linux上,您可以使用防火墙工具(如iptables或firewalld)来开放特定端口。
3.2 防火墙操作
启动防火墙:systemctl start firewalld
关闭防火墙: systemctl stop firewalld
检查防火墙状态:systemctl status firewalld
-
添加一个新的防火墙规则以开放指定的端口。例如,要开放mysql端口 3306,可以执行以下命令:
firewall-cmd --permanent --zone=public --add-port=3306/tcp --permanent
-
如果要删除一个防火墙规则指定的端口。例如,删除 mysql 端口的 3306.
firewall-cmd --permanent --zone=public --remove-port=3306/tcp --permanent
我们只需要修改以上命令的端口号就行.
--zone=public
:指定要添加规则的区域,一般使用public区域。
--add-port=80/tcp
:指定要开放的端口和协议。
--permanent
:将该规则永久保存,以便重启后仍然有效。
注意, 我们修改其配置后, 需要重启防火墙, 使其生效.
重新加载防火墙配置以使更改生效:
sudo firewall-cmd --reload
验证端口是否已成功开放:
sudo firewall-cmd --list-all | grep 80/tcp
如果输出显示已开放的端口,则表示配置成功。
请注意,以上步骤仅适用于使用firewalld作为防火墙管理工具的CentOS系统。如果您使用的是iptables,请参考相应的命令和文档适配iptables。
好了,到这里,Linux 部署Java应用程序 博主已经分享完了,阐述较为基础, 希望对大家有所帮助,如有不妥之处欢迎批评指正。
感谢每一位观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*
遇见你,所有的星星都落在我的头上……