2023运维经验总结

180 阅读7分钟

1、docker+jenkins 微服务springcloud项目部署

1)、在dev环境中开发好,提交代码到git

可能提交失败,代码会到搁置这里,点进去”取消搁置”就行, image-20231116185203930.png 2)、切换分支从dev到master,如果有未提交代码,就需要暂存代码,操作如下:

进入git,找到”未提交代码”--》”隐藏更改” 然后写好对应描述即可,隐藏未提交代码,下次需要用时,取消隐藏就可以了。

image-20231116185540268.png

image-20231116185657307.png

3)、暂存代码后,切换分支,将dev分支合并到master中去

image-20231116190041120.png

4)、ctrl+shift+R全局替换版本号,提交到git后,开始打包,就可以操作docker 部署服务器了

image-20231117094532770.png

5)、使用FinalShell工具连接linux服务器,运行 ”docker ps” 命令查看docker进程

6)、编辑运行脚本 可以使用vim命令,也可以下载下载改好之后上传更新脚本, ”vim /home/run.sh” 命令

7)、run.sh 脚本文件,怎么编辑

#docker一共5个步骤 需要改新老版本和对应代码放行地方
#!/bin/bash
#更新版本:Version
#老版本:oldVersion
Version=3.11.5.RELEASE
oldVersion=3.11.4.RELEASE
Active=prod
Namespace=prod

#放行下面4个地方(自己修改的地方)

#1、停止旧容器
#sudo docker stop admin-$oldVersion
#sudo docker stop jtt808-$oldVersion 
#sudo docker stop monitor-$oldVersion
#sudo docker stop job-admin-$oldVersion
sudo docker stop driver-$oldVersion
#sudo docker stop auth-$oldVersion
#sudo docker stop gateway-:$oldVersion
#sudo docker stop front-$oldVersion
#sudo docker stop nacos-$oldVersion

#2、删除旧容器

#sudo docker rm admin-$oldVersion
#sudo docker rm jtt808-$oldVersion 
#sudo docker rm monitor-$oldVersion
#sudo docker rm job-admin-$oldVersion
sudo docker rm driver-$oldVersion
#sudo docker rm auth-$oldVersion
#sudo docker rm -gateway-$oldVersion
#sudo docker rm front-$oldVersion
#sudo docker rm nacos-$oldVersion

#3、删除所有镜像

docker rmi $(docker images -q)

#4、登录代码托管网站,pull代码

sudo docker login --username=10001 --password=P@ss gitee.com
#sudo docker pull ccr.ccs.gitee.com/badi/nacos:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/gateway:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/auth:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/admin:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/front:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/jtt808:$Version 
sudo docker pull ccr.ccs.gitee.com/badi/driver:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/job-admin:$Version
#sudo docker pull ccr.ccs.gitee.com/badi/monitor:$Version
echo "------------------------下载镜像(完成)--------------------------"
#docker run -d -p 8848:8848 --network=host --name=nacos-$Version -e TZ=Asia/Shanghai -e MYSQL_HOST=172.16.16.15 -e MYSQL_PORT=12306 -e MYSQL_USER=root -e MYSQL_PWD=VL6MQvvl9IYd  -e JAVA_OPTS="-Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai -Dspring.profiles.active=$Active -Dnacos.nacos.config.namespace=-$Active" ccr.ccs.gitee.com/badi/nacos:$Version

#5、休息10s后,运行对应微服务。输出 ”启动完成”
#sleep 10
#docker run -d -p 8090:8090 --network=host --name=gateway-$Version -e TZ=Asia/Shanghai -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms2048m -Xmx4096m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/gateway:$Version
#docker run -d -p 4831:4831 --network=host --name=-admin-$Version -itv /data/wwwroot/cart:/data/wwwroot/cart -e TZ=Asia/Shanghai -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-admin:$Version
#docker run -d -p 3000:3000 --network=host --name=-auth-$Version -e TZ=Asia/Shanghai -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-auth:$Version
#docker run -d -p 5831:5831 --network=host --name=front-$Version -e TZ=Asia/Shanghai -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms4096m -Xmx6144m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-front:$Version
docker run -d -p 6000:6000 --network=host --name=-driver-$Version -e TZ=Asia/Shanghai -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-driver:$Version
#docker run -d -p 8005:8005 --network=host --name=-jtt808-$Version  -itv /data:/data -e TZ=Asia/Shanghai -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-jtt808:$Version
#docker run -d -p 5004:5004  --network=host --name=-job-admin-$Version -e TZ=Asia/Shanghai -e MYSQL_HOST=172.16.16.15 -e MYSQL_PORT=12306 -e MYSQL_USER= -e MYSQL_PWD=VL6MQvvl9IYd -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms512m -Xmx512m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-job-admin:$Version
#docker run -d -p 5001:5001 --network=host --name=-monitor-$Version -e TZ=Asia/Shanghai  -e NACOS_HOST=127.0.0.1 -e NACOS_PORT=8848 -e NACOS_NAMESPACE=$Namespace -e NACOS_ACTIVE=$Active -e JAVA_OPTS="-server -Xms512m -Xmx512m -Duser.timezone=Asia/Shanghai" ccr.ccs.gitee.com/badi/-monitor:$Version
echo "---------------------启动完成----------------------------------"

8)、修改好run.sh脚本文件后,最好检查一遍是否正确,最后进入run.sh的路径下运行run.sh就算完成了一次上线操作 命令为:先输入 ” cd /home ” 后输入 ” ./run.sh ” 也可以进入jenkins网页,点击立即构建也可以完成发布操作,上线 image.png

2、Tomcat+war包运维上线

1)、使用FinalShell连接上服务器

2)、查看java进程使用命令 ” ps -ef|grep tomcat ” 找到对应java进程的进程id

3)、在确保没有用户使用系统后,开始停服务,使用命令 ” kill -s 9 384114 ” 其中384114为第二步查到的java进程的进程id

4)、更新上线时有两种,一种增量更新、一种全量更新,增量更新就是把自己修改后的代码的class文件更新,全量更新需要进入Tomcat的war包目录删除原有的war包,把自己上线的war上传即可 webapps目录

5)、最后进入Tomcat的bin目录下运行startup.sh文件,完成上线操作 命令为:先输入” cd /home/tomcat/bin ” 后输入” ./startup.sh ”

备注:第二步:杀死进程

正常杀死进程:kill -15 pid号

如杀死上图中pid为10的进程:kill -15 10

强制杀死进程: kill -9 pid号

注:杀死进程的时候,推荐是正常杀死进程,而不是强制杀死进程。

原理解读:

Kill命令和信号
当你执行一个“kill”命令,你实际上发送了一个信号给系统,告诉它去终结不正常的应用。总共有60个你可以使用的信号,但是基本上你只需要知道SIGTERM15)(正常杀死信号)和SIGKILL9)(强制杀死信号)。

2 将常规的两步杀死进程合并为一步 进阶1: kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
 其中awk '{print $2}' 的作用就是打印(print)出第二列的内容。根据常规篇,可以知道ps输出的第二列正好是PID。就把进程相应的PID通过xargs传递给kill作参数,杀掉对应的进程。

进阶2: pgrep firefox | xargs kill -s 9
“ xargs kill -s 9 ”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。
进阶3:kill -s 9 `pgrep firefox`
进阶4: pkill -9 firefox
前面三个进阶虽然将查找进程和删除进程合并为一个步骤,但是,仍然是两个命令,这里采用pkill命令将查找和杀掉进程的两个命令合并为一个命令了,即:pkill=pgrep + kill,表示找到并杀死进程。
进阶5:killall -9 firefox

killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。

3 强制踢掉登陆用户 有的时候,可能我们的系统中有很多用户在同时登陆这一台服务器,而我们想要踢掉某个不良用户,就可以执行如下操作。

(1)查看用户登陆信息: who

(2)查看自己的身份(避免把自己踢掉):whoami

(3)踢掉用户ats

pkill -kill -t pts/2(按终端踢,pts/2为所踢用户的终端) 或 pkill -u ats(按用户名踢,ats为用户名)

kill的注意事项 1.如果kill时,不指定信号就会默认发送信号15,终止指定进程,使得进程在退出之前清理并释放资源。

2.使用kill时,root用户将影响用户的进程,非root用户只能影响自己的进程。

3.使用kill时,当kill向进程发送信号,必须是这些进程的主人。如果杀死一个没有权限杀死的进程或杀死一个不存在的进程,就会报错。如下: -bash: kill: (20) - No such process

4.使用kill时,如果成功地发送了信号,shell会在屏幕上显示出进程的终止信息。(按下Enter键,就会显示出来)

5.使用kill时,如果使用信号9,使进程强行终止,可能会使数据丢失或者终端无法恢复到正常状态。

6.init进程,它是一个由内核启动的用户级进程,所有进程都是init进程的子孙,init不可杀。

3、jar包部署上线流程

1)、 打包 jar 包 在项目根目录下执行以下 Maven 命令打包 jar 包:

mvn clean package 在 target 目录下生成 jar 包。

2)、 将 jar 包上传到 Linux 服务器 上传Java项目到服务器是准备要执行的下一步。通常可以使用FTP等文件传输工具将Java项目上传到服务器。如果使用Windows操作系统,则可以使用Xftp客户端等工具,将Java项目上传到Linux服务器上。

如果您想从Linux本地终端上传Java项目,在Linux本地终端中使用rsync命令即可。以下是一个例:

rsync -avz -e ssh /path/to/local/java/project/ user@remote.server:/path/to/remote/java/project/ 替换/path/to/local/java/project/和/path/to/remote/java/project/路径,使用自己的路径。

注意: 通常我们每次打包新上线的时候, 会把当前正在运行的包停掉但是保存着,上传时千万不要直接覆盖! 启动新的包后也不要立即删除了之前的包! 不然你会后悔的。。。

3)、 运行 jar 包 运行时按一下几个步骤:

进入jar包所在目录 cd /../..

查询所有进程,找到项目端口号对应的PID netstat -ntpl

假设找到的项目的PID为: 8548

执行杀进程命令(8548为PID) kill -9 8548

再次执行查询命令,没有项目端口,表示杀死进程成功 netstat -ntpl

执行启动jar包命令 nohup java -jar 项目包.jar >> 日志.log & 日志中显示启动完毕后退出日志 执行查看进程命令 netstat -ntpl

查看实施日志 tail -f 日志.log