1. 搭建 Java 部署环境
接下来以 Ubuntu 来进行演示
1.1. apt 包管理工具
apt 就相当于手机上的应用市场
列出所有软件包:apt list
这个命令输出所有包的列表,内容比较多,可以使用 grep 命令过滤输出:apt list |grep "jdk"
如果需要下载的软件,软件包中没有的话那就需要用其他方式下载了
安装软件前需要更新一下软件包数据库:sudo apt-get update
安装软件包
sudo apt install package_name
移除软件包
sudo apt remove package_name
remove 命令将卸载给定的软件包,但可能会留下一些配置文件。如果要删除包含所有配置文件的软件包,要使用 purge
apt remove 和 apt purge 的区别
・apt remove 删除包的二进制文件,它留下了残留的配置文件。
・apt purge 删除与包相关的所有内容,包括配置文件。
如果弄乱了程序的配置,希望从系统中完全清除它的痕迹再重新开始,可以使用 apt purge。
1.2. 下载 jdk
sudo apt install openjdk-17-jdk
安装之后可以使用 java -version 来查看是否安装成功
关于如何卸载 jdk
- 检查安装的是哪个 OpenJDK
dpkg --list | grep -i jdk
- 移除 openjdk 包:
apt-get purge openjdk*
- 卸载 OpenJDK 相关包:
apt-get purge icedtea-* openjdk-*
- 检查所有 OpenJDK 包是否都已卸载完毕:
dpkg --list | grep -i jdk
1.3. 下载 mysql
通过下面的命令来下载 mysql
sudo apt install mysql-server
安装好之后可以通过 mysql --version
来查看版本
也可以通过 sudo systemctl status mysql
来检查 mysql 的状态
关于卸载 mysql:
- 停止 mysql
sudo systemctl stop mysql
- 卸载 mysql
sudo apt-get remove --purge mysql-*
- 删除 MySQL 配置文件和数据
sudo rm -rf /etc/mysql/var/lib/mysql
- 清理残留文件和目录
sudo apt-get autoremove
sudo apt-get autoclean
- 验证卸载结果
mysql --version
2. 部署 Web 项目
开发环境:开发人员写代码用的机器。
测试环境:测试人员测试程序使用的机器。
生产环境 (线上环境): 最终项目发布时所使用的机器,对稳定性要求很高。
2.1. mysql 安全设置
运行一下命令:
sudo mysql_secure_installation
运行之后的选项都输入 Y,密码强度设置为 2
输入 sudo mysql
进入后设置密码
ALTERUSER'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '自定义密码';
设置之后就可以创建数据库和表,保持和开发时的数据一致
2.2. 配置环境
开发环境和生产环境肯定是不一样的,所以一些配置也需要修改,比如 mysql 的密码或者一些日志的配置,就可以针对不同的平台来进行配置
那么这三个文件哪个可以生效,可以在 application.yml 来配置下面这些内容
spring:
profiles:
active: @profile.name@
是通过自定义 Maven 的参数来实现的
XML
<profiles>
<profile>
<id>dev</id>
<properties>
<profile.name>dev</profile.name>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profile.name>prod</profile.name>
</properties>
</profile>
</profiles>
这样就可以通过 Maven 来进行选择使用哪个配置了
也可以设置默认选择的是哪个配置文件
<activation>
<activeByDefault>true</activeByDefault>
</activation>
2.3. 打包项目
上面配置好之后就可以打包了,注意要选择 prod,然后双击 package
如果 Test 代码中有与环境配置相关的操作 (比如数据库相关的操作,可能由于密码等不一致发生错误),打包会失败,可以选择跳过测试,因为执行 package 时会按照步骤从上往下依次执行
2.4. 上传并运行 jar 包
可以直接把 jar 包拖进 finalshell 中或者使用 rz 命令来进行上传,上传之后通过 java -jar
命令来运行 jar 包
如果希望别人也能访问的话,项目中设置的端口号(例如8080)也需要在云服务器上进行开放
不过使用上面的启动方式的话,如果 finalshell 关了或者断开连接,服务就停止了,就需要使用 nohup 命令来启动:
看日志的话推荐 tail -f 命令来去看,就可以实时查看,后续新增的日志也是能看到的
3. 常见问题总结
如果说服务不能正常访问,可能会有以下原因:
- 服务未启动:
可以使用 ps -ef|grep java
来查看程序是否运行
使用 curl 项目路径
来看是否返回有 html 页面,如果有返回,那么就说明程序启动成功了, 可能是端口号未开放
如果没有启动成功,需要查看对应的日志,可能是数据库不存在或者数据库密码不正确,jdk版本 ,mysql 没有设置密码等问题
- http 端口未开放,如果说云服务器的防火墙打开了,还需要再打开防火墙的端口号
可以使用sudu ufw status
命令来查看防火墙是否开启,下面显示的是未开启状态
- 如果说在部署之后又发生了错误,要重新部署,就需要先把对应的进程结束掉,可以先通过
netstat -nltp|grep 8080
来查看对应的进程,再使用 kill 命令结束进程