微服务多服务器远程发布、反向代理优化
2022/3/7 6:45:15
本文主要是介绍微服务多服务器远程发布、反向代理优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、微服务多服务器远程发布
1、配置远程部署服务器
(1)从 Jenkins (192.168.10.20)服务器拷贝公钥到 docker2 (192.168.10.80)远程服务器
#Jenkins服务器上操作 ssh-copy-id 192.168.10.80 #web2-server生产服务器上查看是否有.ssh ls -a
(2)Manage Jenkins --> Configure System --> Publish over SSH --> 添加远程服务器(最底部)
2、修改 Docker 配置信任 Harbor 私服地址
(安装docker时已经配置过),配置完成后重启 Docker
3、添加参数
多选框:部署服务器
tensquare_back_cluster --> 配置 -->添加参数
最终效果
4、修改 Jenkinsfile 构建脚本
红色代码需要修改部分
//git的凭证 def git_auth="015f1ee4-73cf-4d51-95b0-2954fc32aadb" //git的URL def git_url="git@192.168.10.10:xxx_group/tensquare_back.git" //定义镜像标签 def tag="latest" //定义harbor的url地址 def harbor_url="192.168.10.60:85" //定义镜像仓库名 def harbor_name="tensquare" //定义harbor的凭证 def harbor_auth="8f55a28e-3be2-463d-b988-34f93063fdf2" node { //选择当前微服务项目名称 def selectedProjectNames="${project_name}".split(",") //定义选择服务器 def selectedServers="${publish_server}".split(",") stage('pull code') { checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]]) } stage('check code') { for(int i=0;i<selectedProjectNames.length;i++){ //项目信息 tensquare_eureka_server@10086 def projectInfo=selectedProjectNames[i] //当前的项目名称 def currentProjectName="${projectInfo}".split("@")[0] //当前的项目端口 def currentProjectPort="${projectInfo}".split("@")[1] //定义SonarQubeScanner工具 def scannerHome = tool 'sonar-scanner' //引用SonarQube系统环境 withSonarQubeEnv('sonarqube') { sh """ cd ${currentProjectName} ${scannerHome}/bin/sonar-scanner """ } } } //编译,打包,镜像制作 stage('make package images') { sh "mvn -f tensquare_common clean install" } //打包微服务项目,制作镜像,上传镜像 stage('make server') { for(int i=0;i<selectedProjectNames.length;i++){ //项目信息 tensquare_eureka_server@10086 def projectInfo=selectedProjectNames[i] //当前的项目名称 def currentProjectName="${projectInfo}".split("@")[0] //当前的项目端口 def currentProjectPort="${projectInfo}".split("@")[1] sh "mvn -f ${currentProjectName} clean package dockerfile:build" //定义镜像名称 def imageName="${currentProjectName}:${tag}" //对镜像打标签 sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}" //镜像推送到harbor withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) { //登录harbor sh "docker login -u ${username} -p ${password} ${harbor_url}" //镜像上传 sh "docker push ${harbor_url}/${harbor_name}/${imageName}" sh "echo 镜像上传成功" } //遍历所有服务器,分别部署 for (int j=0;j<selectedServers.length;j++){ //获取当前服务器名称 def currentServerName=selectedServers[j] //调用不同服务器模块内容--spring.profiles.active=eureka-server1/eureka-server2 def activeProfile="--spring.profiles.active=" //根据不同的服务器名称调用不同的服务器配置信息 if (currentServerName=="master_server"){ activeProfile=activeProfile+"eureka-server1" }else if (currentServerName=="slave_server"){ activeProfile=activeProfile+"eureka-server2" } //业务部署 sshPublisher(publishers: [sshPublisherDesc(configName: "${currentServerName}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/jenkins_shell/deployCluster.sh ${harbor_url} ${harbor_name} ${currentProjectName} ${tag} ${currentProjectPort} ${activeProfile}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } } }
代码上传、推送上传gitlab
5、编写 deployCluster.sh 部署脚本,放到2台生产服务器中
路径:/opt/jenkins_shell/deployCluster.sh
(1)新生产服务器 web2-server(192.168.10.80)上操作:
mkdir /opt/jenkins_shell
chmod +x *
web-server(192.168.10.70)上操作:
脚本内容如下:
#! /bin/sh #接收外部参数 harbor_url=$1 harbor_project_name=$2 project_name=$3 tag=$4 port=$5 profile=$6 imageName=$harbor_url/$harbor_project_name/$project_name:$tag echo "$imageName" #查询容器是否存在,存在则删除 containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'` if [ "$containerId" != "" ] ; then #停掉容器 docker stop $containerId #删除容器 docker rm $containerId echo "成功删除容器" fi #查询镜像是否存在,存在则删除 imageId=`docker images | grep -w $project_name | awk '{print $3}'` if [ "$imageId" != "" ] ; then #删除镜像 docker rmi -f $imageId echo "成功删除镜像" fi # 登录Harbor docker login -u tom -p Abcd1234 $harbor_url # 下载镜像 docker pull $imageName # 启动容器 docker run -di -p $port:$port $imageName $profile echo "容器启动成功"
6、构建 tensquare_back_cluster
构建成功
生产服务器 web2-server 上查看
7、Eureka网页上查看
分别登录到 http://192.168.10.70:10086/ 和 http://192.168.10.80:10086/
两台生产服务器集群都启动成功!!!
二、Nginx+Zuul集群实现高可用网关
1、生产服务器web2-server上安装 Nginx
#安装 Nginx yum install epel-release -y yum install nginx -y
修改配置文件 vim /etc/nginx/nginx.conf
upstream zuulServer{ server 192.168.10.70:10020 weight=1; server 192.168.10.80:10020 weight=1; } listen 85; listen [::]:85; location / { proxy_pass http://zuulServer/; }
3、重启 Nginx
nginx -t #检查语法 systemctl restart nginx
4、修改前端 Nginx 的访问地址
5、提交、推送
6、构建前端项目 tensquare_front
7、浏览器访问 192.168.10.70:9090
这篇关于微服务多服务器远程发布、反向代理优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程