测试环境部署V1.0
V1.0是纯手工部署。
后端部署
前置条件
我们后端项目需要java环境、maven环境。这个可以与开发确认需要提前安装哪些环境。
流程
①拉取代码到本地
②本地打包
③打好的包上传至服务器
④登录服务器,重启tomcat
操作实施
拉取代码到本地
- 确认源代码版本控制系统
需要先确认项目使用的版本控制系统是啥,一般就是git、svn,我们项目用的是git。 - 安装版本控制工具
- 配置用户及认证凭据
- 了解项目分支
- 查看当前仓库中的分支
DELL@DESKTOP-15R0S26 MINGW64 /f/tools/project/whzz/sales (master)
$ git branch
* master
- 查看远程仓库中的分支
DELL@DESKTOP-15R0S26 MINGW64 /f/tools/project/whzz/sales (master)
$ git branch -r
...
了解分支是为了确认分支对应什么环境,一般测试环境、开发环境、预发布环境、线上环境都对应至少一个不同的分支。因此,如果需要快速搭建一个环境用作测试,了解分支是比较重要的。
比如,线上问题排查及定位:
我们现在有一个线上问题,需要马上排查处理。那我们需要以线上的环境去复现和定位问题。那一般就需要快速拉取线上分支的代码,连接线上最新的备份数据库,部署一个测试环境,进行测试。
再比如,临时急需上线的需求:
我们正在测试一个迭代,预计测试三天后上线。但是,突然产品带着热乎乎的需求笑意盈盈的向你走来,轻声的对你说,有一个临时的需求,今天就要上线。你怎么办?肯定是一边骂着nnd一边准备搭建一个临时的测试环境,当然这个环境拉取的分支肯定也是另一个分支了。
- 拉取代码
#进入存储项目的路径
git clone [项目代码地址]
本地打包
- 确认环境
先确认是否已具备java,maven环境。
在cmd执行以下命令,查看jdk环境、以及maven的版本
F:\tools\project\whzz\sales>
F:\tools\project\whzz\sales>java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
F:\tools\project\whzz\sales>mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: F:\tools\maven\apache-maven-3.6.3\bin\..
Java version: 1.8.0_192, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_192\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
如果没有显示版本号,那可能是没配置环境变量或者没安装。
- 打包
在存储项目的路径下,输入cmd,进入命令行(进入后,默认就在存储项目的路径)
#maven打包命令,clean是先清除之前打好的包,package是执行打包
mvn clean package
上传至服务器
- 定位打好的包
打好的包一般以 [项目名称.jar] 或 [项目名称.war] 的形式,存放在“项目路径*web\target”目录下。
ps:jar包还是war包是由项目pom.xml文件中标签决定的,标签后是jar就会打jar包,是war就会打war包。jar包和war包的部署流程不同,我这边项目是打war包,所以主要说明war包部署。
- 上传到服务器
- 连接服务器
- war包部署
上传文件
重启tomcat
[root@localhost logs]# systemctl restart tomcat
查看tomcat进程
[root@localhost logs]# ps -ef|grep tomcat
root 7876 1 86 00:26 ? 00:00:34 /usr/local/jdk/jdk1.8.0_202/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dspring.profiles.active=test -Djavax.servlet.request.encoding=UTF-7 -Dfile.encoding=UTF-8 -Duser.language=zh_CN -Dsun.jnu.encoding=UTF-8 -Duser.timezone=GMT+08 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/tomcat/bin/bootstrap.jar:/usr/local/tomcat/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/tomcat -Dcatalina.home=/usr/local/tomcat/tomcat -Djava.io.tmpdir=/usr/local/tomcat/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 8263 105617 0 00:27 pts/1 00:00:00 grep --color=auto tomcat
[root@localhost logs]#
通过tomcat的进程id7876,查看tomcat占用端口
[root@localhost logs]# netstat -anop|grep 7876
tcp6 0 0 :::8050 :::* LISTEN 7876/java off (0.00/0/0)
tcp6 0 0 192.168.63.130:45930 192.168.2.13:3307 ESTABLISHED 7876/java keepalive (7163.71/0/0)
tcp6 0 0 192.168.63.130:45902 192.168.2.13:3307 ESTABLISHED 7876/java keepalive (7163.71/0/0)
...
从上面可以看到我这边占用的端口是8050,默认是8080。因为我是有改过tomcat的端口号。
如何修改呢?通过修改tomcat安装路径下conf目录下的 server.xml文件。
如果不知道tomcat的安装路径,可以通过whereis 命令查看
[root@localhost sbin]# whereis tomcat
tomcat: /usr/local/tomcat
怎么修改tomcat的占用端口,可以参考这篇文章:Linux下修改tomcat端口号
验证部署
查看tomcat运行日志
进入tomcat安装目录/logs,再查看日志文件
[root@localhost webapps]# cd ../logs
[root@localhost logs]# cat catalina.out
日志文件看到有项目中的sql在运行。
通过postman调用接口
接口有返回,说明后端项目已经部署成功了。
前端部署
前置条件
确保前端环境已配置好,我们项目的前端依赖是nodejs,可以向开发确认一下需要什么样的环境。
最好是确定一下安装什么版本比较稳定,我之前安装的nodejs版本过高,导致很多依赖都下载不下来,版本不兼容,就无法成功打包
流程
①拉取代码到本地
②本地打包
③打好的包上传至服务器
④登录服务器,重启nginx
操作实施
拉取代码到本地
与后端部署步骤中拉取代码一致
本地打包
- 确认环境
先确认是否已具备nodejs环境。
在cmd执行以下命令,查看nodejs版本
F:\tools\project\whzz\front>node -v
v14.21.3
如果没有显示版本号,那可能是没配置环境变量或者没安装。
- 修改后端连接地址
因为我们的项目现在有五套环境:开发,测试,预发布,生产,线上备份,因此需要配置前端打包环境变量,来指定前端连接哪个后端地址(可以查
一般是在前端项目的package.json文件内修改,修改后保存即可。如果接口有统一的路径,需要加上。 - 打包
在存储项目的路径下,输入cmd,进入命令行,执行以下命令:
#初始化安装依赖
F:\tools\project\whzz\front>npm install
我这边会有这样的提示,好像也不影响
再执行打包命令:
#这里因为是打test环境的包,所以会指定test脚本
F:\tools\project\whzz\front>npm run build:test
#test表示测试环境,这里有一个前端打包环境变量的概念,可以参考这边文章([前端环境部署如何配置后端接口地址](前端环境部署如何配置后端接口地址_后端地址_IT 哈的博客-学习。
打包完成后,会提示:
也有可能运行打包命令后,会出现报错,比如:
error code ELIFECYCLE 21 error errno 1 22 error sales@1.0.0 build:test:set external_url=http://119.23.31.110:80&& set server_url=http://192.168.1.66:8990&& set activityCodePre=http://jystest.zzcfo.cn/#/activityAddCustomer/index?&& set activityCodePres=http://jystest.zzcfo.cn/#/registrationPage?&& set agentRegister=http://jystest.zzcfo.cn/#/account/registe?&& node build/build.js
22 error Exit status 1 23 error Failed at the sales@1.0.0 build:test script.不要惊慌,小问题(虽然我也不懂)。
但是可以看大佬是如何解决的:
解决方案参考文章:[解决]npm ERR! code ELIFECYCLE - 简书 (jianshu.com)
上传到服务器
- 定位打好的包
打好包后,一般会在项目路径下生成一个 dist 文件。
上传到服务器存放项目的路径下,并且复制路径(操作过程跟后端部署里上传到服务器是一样的,复制路径是后面修改nginx配置需要)
我这边dist文件存放的路径:
重新加载nginx
- 配置nginx文件
需要修改服务器上{nginx安装路径}/conf/nginx.conf文件配置。
我不太习惯vim下编辑,就通过editplus修改的。
下载editplus后,可以配置连接服务器。参考文章:Editplus 远程连接虚拟机
- 重新加载nginx
在nginx安装路径sbin目录下输入命令,重新加载nginx(一般是/usr/local/nginx/sbin)
[root@localhost sbin]# nginx -s reload
tips:
如果访问不了的话,可以检查一下前端端口是否被占用。
#检查80端口是否被占用
[root@localhost sbin]# netstat -ntlp | grep 80
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 88029/sshd: root@pt
tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 96008/nginx: worker
tcp6 0 0 :::8050 :::* LISTEN 7876/java
tcp6 0 0 ::1:6010 :::* LISTEN 88029/sshd: root@pt
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 7876/java
如果端口被占用,有两个解决方法,一是杀掉占用端口的进程;二是修改nginx端口
#一 杀掉占用端口的进程
[root@localhost sbin]# netstat -ntlp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 101354/nginx: worke
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 88029/sshd: root@pt
tcp6 0 0 :::8050 :::* LISTEN 7876/java
tcp6 0 0 ::1:6010 :::* LISTEN 88029/sshd: root@pt
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 7876/java
[root@localhost sbin]# kill -9 101354 #进程id
#二 修改nginx配置文件中的端口
修改配置文件nginx.conf(一般是/usr/local/nginx/conf路径下)如下:
server {
listen 80; #可以修改为其他端口号
server_name 192.168.63.131;
#charset koi8-r;
#access_log logs/host.access.log main;
#注意:
#修改的端口号,要是防火墙已经启用的
#启用某个端口的命令:
[root@localhost sbin]# firewall-cmd --zone=public --add-port=端口号/tcp --permanent
参考文档:Linux下开启、关闭端口的方法>
最终检查项目是否成功部署
访问前端地址,查看后端接口是否为配置的地址,是否能正常登录。