【JavaEE进阶】部署Web项目到Linux服务器
目录
🍀什么是部署
🌲环境配置
🚩数据准备
🚩程序配置文件修改
🎄构建项目并打包
🎋上传Jar包到服务器,并运行
🚩上传Jar包
🚩运行程序
🏀短暂运行
🏀永久运行
🚩开放端口号
🌴杀掉进程
🌳常见问题
🍀什么是部署
我们在⼯作中会涉及到几个"环境"
- 开发环境: 开发⼈员写代码用的机器.
- 测试环境: 测试⼈员测试程序使用的机器.
- ⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器.对稳定性要求很⾼.
把程序安装到⽣产环境上,这个过程称为"部署".也叫"上线"
⼀旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到.
换句话说,如果程序有BUG,这个BUG也就被千千万万的⽤⼾看到了.
部署过程⾄关重要,属于程序开发中最重要的⼀环.⼀旦部署出现问题,极有可能导致严重的事故(服务器不可⽤之类的).
为了防⽌部署出错,⼀般公司内部都有⼀些⾃动化部署工具(如Jenkins等).
本文章使⽤⼿⼯部署的⽅式来完成部署
🌲环境配置
要使程序正常运行,需要保证环境和程序都要正确,我们需要先设置环境
🚩数据准备
准备需要部署到服务器上的web项目所需要的数据库
首先建立我们所需要的数据库
接下这里我们有两种方法来填充里面的数据
- 建⽴相同的表结构,导入相同的数据
- 对原来数据库的数据进行打包,放入Linux某一个目录下面,然后打开相应的数据库,实用如下命令进行导入
🚩程序配置文件修改
实际⼯作中,开发环境,测试环境以及⽣产环境的配置都是不⼀样的
⽐如mysql的⽤⼾名和密码(当前本地的密码为123456,线上的密码是Yy584等等),我们可以针对不同的环境,设置不同的配置
针对不同平台创建不同的配置⽂件,要求名字为application-XXX.yml或者application-XXX.properties 以下以application-XXX.yml为例
对于开发环境起一个dev的配置文件,对于发布环境起一个prod的配置文件
固定格式,只有后⾯的字⺟可以修改
在配置⽂件⾥写不同的内容
application-dev.yml:
application-prod.yml:
在主配置⽂件application.yml 中指定配置⽂件,并删除数据库相关配置
设置prod:
首先删掉主配置文件中的所有配置信息,通过以下配置信息来指定上述哪个配置文件生效(dev/prod)
启动项目:可以看到当前是prod配置生效了
启动一个测试代码:会直接报错,因为当前项目还没有上线,使用的发布环境的密码,报密码错误
设置dev:
启动项目:
启动测试代码:运行成功
由于在公司是进行团队开发的,通过上述这样的方式进行切换,也是非常的麻烦,接下来我们就通过Maven的方式来进行操作。
在pom.xml文件中,随意找个位置添加:
相当于定义了两个变量,通过主配置文件进行读
application.yml文件:
刷新Maven之后,Profiles文件中就会多出两个文件(dev,prod),你用哪个就勾选哪个即可,勾选完成之后也要刷新Maven
也可以设置其中一个为默认环境:
🎄构建项目并打包
在本地使用maven进行打包
1.如果Test代码中有与环境配置相关的操作(比如环境为prod),打包会失败,点击下图①处的图标,可以跳过测试
2. 点击clean->package
🎋上传Jar包到服务器,并运行
🚩上传Jar包
直接拖动打好的jar包到xshell窗⼝即可完成⽂件的上传
Xshell可以直接拖动⽂件到窗⼝,达到上传⽂件的⽬的,如果使⽤其他客⼾端,不⽀持⽂件的上传,需要借助lrzsz命令
- 上传⽂件
sz filename
- 下载⽂件
rz
执行该命令后,在弹出框中选择要上传的文件即可,上传的速度取决于网络.
如果执⾏上述命令之后,提⽰ Command ‘XX’ not found ,表⽰当前云服务器未安装lrzsz命令,需要先进⾏安装
安装lrzsz命令如下:
🚩运行程序
运行程序分为两种,一种使永久的,一种是短暂的
🏀短暂运行
现在来看一下短暂的语法如下(这个命令的运行方式会在你退出终端时就停止)
🏀永久运行
接下来我们看一个永久的运行方式
现在就能永久访问了,即使关掉终端。
跟踪日志:(tail -f XX.log)
还可以选择性跟踪,例如跟踪错误日志:
我们还可以通过该命令搭配 >
把需要输出的内容写到指定⽂件中.这样的操作称为"重定向".
但是要想重定向首先要杀死启动的进程
举例如下:
🚩开放端口号
程序运行起来后,就需要开放端口号
如果外网需要访问该服务,需要先服务器防火墙开放对应的端⼝号
本着服务器安全的原则,云服务器上的端口非必要不开启.
⽐如常见端⼝号:数据库3306,Redis6379,尽可能避免开放,而是采⽤其他⽅式来连接,⽐如配置隧道的⽅式
接下来以华为云服务器举例:
1. 进入防火墙管理页面(也有可能是安全组)
2. 添加规则(在项目中默认的是8080端口,所以需要把8080端口号开放进来)
通过公网IP进行访问:
但是,现在点击登录的话,会显示"密码错误",因为在程序中的数据库是通过md5进行加密的,在Linux中的数据库是明文显示的
在xshell界面中,也会有相应日志显示:
只需要对其进行修改即可:
此时,项目就可以正常运行了:
当前是采用短暂运行方式进行操作的。
🌴杀掉进程
如果我们需要重启服务,或者重新部署等,都需要先停⽌之前的服务
1. 查看当前服务的进程
编辑
编辑
上图119256就是该服务的进程
2. 杀死进程
🌳常见问题
⼀个程序的正常运行,需要程序的正确和环境的正确.同样的代码在Windows上可以运行成功,不⼀定在Linux上运⾏成功.
不同的系统对代码的理解和止持是不同的.⽐如Windows系统对MySQL不区分大小写,Linux区分大小写
服务不能正常访问的原因有很多,主要分以下⼏⽅⾯
服务未启动
- 使⽤ ps -ef|grep java 查看程序是否在运⾏
- 使⽤ 相应的访问界面 看下是否有返回html⻚⾯,
如果有返回,说明程序启动成功了,考虑端⼝未开放
如果未启动成功,需要查看对应的⽇志,根据原因来分析.
- 数据库不存在
- 表不存在(区分大小写)
- 数据库密码不正确
- Jdk安装版本不对,或者未安装
- mysql未设置密码