基于docker环境jenkins一键部署springcloud微服务

1.前言

1.1目的

提供一键式部署spring cloud微服务方案,提高了系统部署的效率

1.2技术架构

1.2.1后端服务

后端服务采用spring cloud alibaba架构,分为6个模块:
模块     | 备注
-------- | -----
cherry-blog-article  | 文章模块
cherry-blog-data-platform  | 数据平台
cherry-blog-oauth  | 授权模块
cherry-blog-question  | 问题模块
cherry-blog-system  | 管理模块
cherry-blog-saas-gateway  | 网关模块

1.2.2中间件

中间件     | 备注   | 镜像版本
-------- | -----  | -----
jenkins  | 提供构建部署服务  |  jenkins/jenkins:2.346.2-jdk11 
nacos  | 提供服务注册、配置服务 |  nacos/nacos-server:v2.2.1
elasticsearch  | 提供数据存储服务 |  elasticsearch:7.4.2
kibana  | 提供可视化界面查询服务 |  kibana:7.4.2
gitlab  | 代码仓库  |  gitlab/gitlab-ce:14.7.7-ce.0
kafka  | 消息队列  | wurstmeister/kafka
kafka-map  | 提供消息队列可视化界面  |  dushixiang/kafka-map:latest
redis  | 提供缓存服务  |  redis:6.2.1
seata  | 提供分布式事务解决方案  |  seataio/seata-server:1.6.1

1.2.3数据库

数据库     | 备注   | 镜像版本
-------- | -----  | -----
mysql  | 提供数据存储服务  |  mysql:8.0.20

2.安装服务

2.1安装虚拟机

准备两台虚拟机,我使用的是virtualBox6x安装的centos7镜像
两台虚拟机IP:
192.168.56.106
192.168.56.101

需要在宿主机上提前安装jdk11,安装目录为
/usr/local/jdk/bin

需要在宿主机上提前安装maven3.8.4,安装目录为
/blog/maven/apache-maven-3.8.4

在这里插入图片描述

2.2安装docker

// 安装docker 20.10.8版本,分别在192.168.56.106和192.168.56.101
//宿主机执行以下指令
//1.卸载docker旧版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
             
//2.配置阿里云仓库
sudo yum install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

//3.查看docker所有可用版本
yum list docker-ce --showduplicates | sort -r

//4.安装docker指定版本
yum install docker-ce-20.10.8-3.el7 docker-ce-cli-20.10.8-3.el7 containerd.io  docker-compose-plugin

//5.设置docker镜像加速器
mkdir -p /etc/docker

//6.新建daemon.json,然后把以下内容放到该目录下
vim daemon.json
{
  "registry-mirrors": ["https://w2ym11si.mirror.aliyuncs.com"]
}

//7.重启docker服务
systemctl daemon-reload
systemctl restart docker

//8.查看docker服务,如果状态为running表示安装完成
systemctl status docker

//9.设置docker开机自启动
systemctl enable docker

//10.查看docker版本
docker version

安装docker截图:
在这里插入图片描述

2.3安装中间件和数据库

2.3.1安装nacos

// 在192.168.56.106宿主机安装nacos服务
//1.宿主机创建目录,用于数据绑定
mkdir -p /blog/docker/nacos/conf
mkdir -p /blog/docker/nacos/logs
mkdir -p /blog/docker/nacos/data

//2.拉取nacos镜像
docker pull nacos/nacos-server:v2.2.1

//3.运行nacos容器
docker run --name nacos -d -p 8848:8848 --restart=always -e MODE=standalone  nacos/nacos-server:v2.2.1

//4.把nacos容器里的文件拷贝到宿主机
docker cp nacos:/home/nacos/conf/ /blog/docker/nacos
docker cp nacos:/home/nacos/logs/ /blog/docker/nacos
docker cp nacos:/home/nacos/data/ /blog/docker/nacos

//5.停止nacos容器,并删除nacos容器
docker ps | grep nacos
docker stop 镜像id
docker rm -f 镜像id

//6.重新启动nacos容器
docker run -d --name nacos \
--ip 0.0.0.0 \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
--env MODE=standalone \
--env NACOS_AUTH_ENABLE=true \
-v /blog/docker/nacos/conf/:/home/nacos/conf \
-v /blog/docker/nacos/logs:/home/nacos/logs \
-v /blog/docker/nacos/data:/home/nacos/data \
nacos/nacos-server:v2.2.1

2.3.1安装elasticsearch和kibana

// 安装elasticsearch和kibana服务
//1.拉取elasticsearch和kibana镜像
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2

//2.在宿主机下创建目录
mkdir -p /blog/docker/elasticsearch/config
mkdir -p /blog/docker/elasticsearch/data

//3.将/Users/jak/mydata/elasticsearch/文件夹中文件都可读可写
chmod -R 777 /blog/docker/elasticsearch/

//4.追加配置到yml文件
echo "http.host: 0.0.0.0" >> /blog/docker/elasticsearch/config/elasticsearch.yml 

//5.启动elasticsearch服务
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx1024m" \
--restart=always \
-e "TZ=Asia/Shanghai" \
-v /blog/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /blog/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /blog/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

//6.编辑elasticsearch.yml文件,按照如下进行更改配置
vim /blog/docker/elasticsearch/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

//7.重启elasticsearch
docker ps | grep elasticsearch
docker restart 镜像id

//8.进入elasticsearch容器
docker ps | grep elasticsearch
docker exec -it 镜像id /bin/bash

//9.执行如下指令
./bin/elasticsearch-setup-passwords interactive

//10.重启elasticsearch
docker ps | grep elasticserach
docker restart 镜像id

//11.启动kibana容器
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.106:9200 -p 5601:5601 \
--restart=always \
-e "TZ=Asia/Shanghai" \
-v /etc/localtime:/etc/localtime:ro \
-v /blog/docker/kibana/config/config/kibana.yml:/usr/share/kibana/config/kibana.yml  \
-d kibana:7.4.2

2.3.1安装gitlab

// 安装gitlab服务
//1.拉取镜像
docker pull gitlab/gitlab-ce:14.7.7-ce.0

//2.创建目录
mkdir -p /blog/gitlab/etc
mkdir -p /gitlab/log
mkdir -p /gitlab/data

//3.启动gitlab容器
docker run -d \
  -p 18880:80 -p 18822:22 \
  --name gitlab \
  --restart always \
  -v /blog/gitlab/config:/etc/gitlab \
  -v /blog/gitlab/logs:/var/log/gitlab \
  -v /blog/gitlab/data:/var/opt/gitlab \
  --privileged=true \
  gitlab/gitlab-ce:14.7.7-ce.0

//4.进入容器
docker ps | grep gitlab
docker exec -it 镜像id /bin/bash

//5.修改配置文件
vi /etc/gitlab/gitlab.rb
修改配置如下
external_url 'http://192.168.100.120'
gitlab_rails['gitlab_ssh_host'] = '192.168.100.120'
gitlab_rails['gitlab_shell_ssh_port'] = 8822

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
修改配置如下
host: 192.168.100.120
port: 8880
https: false
ssh_host: 192.168.100.120

//6.容器内重启gitlab
gitlab-ctl restart

//7.退出容器,在宿主机上执行命令,获取root密码
exit
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

//8.再次进入容器
docker ps | grep gitlab
docker exec -it 镜像id /bin/bash

//9.执行如下指令,备份旧数据,默认将会在 /var/opt/gitlab/backups/ 目录下生成备份文件
gitlab-rake gitlab:backup:create

//10.拷贝备份文件到新服务器中的/var/opt/gitlab/backups/ 目录下
cd /var/opt/gitlab/backups
chmod 777 1684461274_2023_05_19_13.12.2_gitlab_backup.tar

//11.停止新服务连接
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

//12.恢复数据
gitlab-rake gitlab:backup:restore BACKUP=1684461274_2023_05_19_13.12.2

//13.重启
gitlab-ctl start
exit

2.3.1安装jenkins

// 安装jenkins
//1.来气jenkins镜像
docker pull jenkins/jenkins:2.451-jdk11

//2.在宿主机创建挂载目录 
mkdir -p /blog/jenkins_mount 

//3.该文件夹授权 
chmod 777 /blog/jenkins_mount

//4.授权把jenkins用户授权给docker
which docker
chown -R 1000:1000 /blog/jenkins_mount/
chown -R 1000:1000 /usr/local/jdk/
chown -R 1000:1000 /blog/maven/apache-maven-3.8.4/
chmod -R 777 /usr/bin/docker
chomd -R 777 /var/run/docker.sock

//5.启动jenkins容器
docker run -itd --name jenkin \
--privileged=true \
-p 10240:8080 \
-p 10241:8888 \
-p 10242:50000 \
--restart=always \
-v /blog/jenkins_mount:/var/jenkins_home \
-v /blog/maven/apache-maven-3.8.4:/usr/local/maven \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/jdk:/usr/local/java \
-v /etc/localtime:/etc/localtime \
jenkins/jenkins:2.451-jdk11

//6.容器运行后,查看密码
docker ps | grep jenkins
docker logs -f 镜像id

//7.进入jenkins挂载目录,追加信息
cd /blog/jenkins_mount/updates
sed -i ‘s/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g’ default.json && sed -i ‘s/http://www.google.com/https://www.baidu.com/g’ default.json

//8.每次宿主机启动时,需要在宿主机执行授权
chmod -R 777 /var/run/docker.sock

2.3.1安装kafka

// 安装kafka服务
//1.拉取zookeeper镜像
docker pull wurstmeister/zookeeper

//2.启动zookeeper容器
docker run -d --name zookeeper -p 2181:2181 --restart=always -v /etc/localtime:/etc/localtime wurstmeister/zookeeper

//3.拉取kafka镜像
docker pull wurstmeister/kafka

//4.启动kafka容器
docker run  -d --name kafka -p 9092:9092 --restart=always -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.56.106:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.56.106:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka

//5.安装kafka可视化服务kafka-map
docker run -d \
    -p 8080:8080 \
    --restart=always \
    -v /opt/kafka-map/data:/usr/local/kafka-map/data \
    -e DEFAULT_USERNAME=admin \
    -e DEFAULT_PASSWORD=1qaz2wsx! \
    --name kafka-visual \
    --restart always dushixiang/kafka-map:latest

2.3.1安装mysql

// 安装mysql8服务
//1.拉取mysql8.0镜像
docker pull mysql:8.0.20

//2启动mysql8.0
docker run -p 3306:3306 --restart=always --name mysql8 -e MYSQL_ROOT_PASSWORD=1qaz2wsx! -d mysql:8.0.20

//3.宿主机创建目录
mkdir -p /blog/docker/mysql8.0.20/

//4.把mysql容器内配置文件拷贝出来
docker cp  mysql:/etc/mysql /blog/docker/mysql8.0.20/

//5.停止mysql8容器,并删除容器
docker ps | grep mysql
docker stop 镜像id
docker rm -f 镜像id

//6.进入mysql挂载的配置目录
cd /blog/docker/mysql8.0.20/mysql/conf.d

//7.编辑my.cnf文件,使用如下内容覆盖
vim my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
 
[client]
default-character-set=utf8
[mysql]

//8.启动mysql容器
docker run \
-p 3306:3306 \
--restart=always \
--name mysql8 \
--privileged=true \
-v /blog/docker/mysql8.0.20/mysql:/etc/mysql \
-v /blog/docker/mysql8.0.20/logs:/logs \
-v /blog/docker/mysql8.0.20/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=1qaz2wsx! \
-d mysql:8.0.20

//9.进入mysql容器
docker ps | grep mysql
docker exec -it 镜像id /bin/bash

//10.通过mysql客户端连接mysql
mysql -u root -p

//11.授权操作,执行以下指令
grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
use mysql;
update user set host='%' where user='root';
grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
ALTER user 'root'@'%' IDENTIFIED BY '1qaz2wsx!' PASSWORD EXPIRE NEVER;
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz2wsx!';
FLUSH PRIVILEGES;
exit

2.3.1安装seata

// 安装seata服务
//1.拉取seata镜像
docker pull seataio/seata-server:1.6.1

//2.创建seata目录,用于挂载
mkdir -p /blog/docker/seata

//3.启动seata服务
docker run -d --name seata -p 7091:7091 --restart=always seataio/seata-server:1.6.1

//4.把seata容器内的配置文件拷贝到宿主机
docker cp seata:/seata-server/resources /blog/docker/seata

//5.编辑seata配置文件,内容如下
server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 192.168.56.106:9092
      topic: logback_to_logstash

console:
  user:
    username: seata
    password: seata

seata:
  config:
    type: nacos
    nacos:
      server-addr: 192.168.56.106:8848
      namespace: seata
      group: SEATA_GROUP
      username: nacos
      password: nacos
      context-path:
      data-id: seataServer.properties
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 192.168.56.106:8848
      group: SEATA_GROUP
      namespace: seata
      cluster: default
      username: nacos
      password: nacos
      context-path:
  store:    
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://192.168.56.106:3306/seata?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false
      user: root
      password: 1qaz2wsx!
      min-conn: 10
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 1000
      max-wait: 5000
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

//6.停止seata容器,并删除容器
docker ps | grep seata
docker stop 镜像id
docker rm -f 镜像id

//7.再次启动seeata容器
docker run -d --name seata \
-p 8091:8091 \
-p 7091:7091 \
--restart=always \
-e SEATA_IP=192.168.56.106 \
-v /blog/docker/seata/resources:/seata-server/resources \
seataio/seata-server:1.6.1

3.配置jenkins

3.1jenkins系统配置

3.1.1maven配置

在这里插入图片描述

3.1.2 JDK11配置

在这里插入图片描述

3.1.3 安装git

在这里插入图片描述

3.2流水线构建配置

3.2.1新建流水线任务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3截图

改进:支持构建时选择代码分支进行打包、部署
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 48
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.安装JDK 在进行SpringCloud微服务架构环境部署之前,需要先安装Java Development Kit(JDK),可以从Oracle官网下载最新版本的JDK,然后按照提示安装即可。 2.安装Eclipse Eclipse是一款开源的集成开发环境(IDE),可以用来开发Java应用程序。在进行SpringCloud微服务架构环境部署之前,需要先安装Eclipse。 可以从Eclipse官网下载最新版本的Eclipse,然后按照提示安装即可。 3.安装Maven Maven是一个构建工具,可以用来自动化构建、测试和部署Java应用程序。在进行SpringCloud微服务架构环境部署之前,需要先安装Maven。 可以从Maven官网下载最新版本的Maven,然后按照提示安装即可。 4.安装Docker Docker是一款开源的容器化平台,可以将应用程序打包成容器,方便部署和管理。在进行SpringCloud微服务架构环境部署之前,需要先安装Docker。 可以从Docker官网下载最新版本的Docker,然后按照提示安装即可。 5.安装Kubernetes Kubernetes是一个开源的容器编排系统,可以用来部署、管理和扩展容器化应用程序。在进行SpringCloud微服务架构环境部署之前,需要先安装Kubernetes。 可以从Kubernetes官网下载最新版本的Kubernetes,然后按照提示安装即可。 6.部署SpringCloud微服务架构 在完成以上步骤之后,就可以开始部署SpringCloud微服务架构了。具体步骤如下: (1)创建一个SpringBoot项目,并在pom.xml文件中添加所需的SpringCloud依赖。 (2)在src/main/resources目录下创建一个application.yml配置文件,并配置SpringCloud相关的参数。 (3)使用Maven打包应用程序,并将生成的jar文件上传到Docker镜像仓库。 (4)使用Kubernetes创建一个Deployment对象,用来部署应用程序的容器。 (5)使用Kubernetes创建一个Service对象,用来暴露应用程序的服务。 (6)使用Kubernetes创建一个Ingress对象,用来路由应用程序的请求。 (7)完成以上步骤后,就可以访问应用程序了。 7.总结 以上就是SpringCloud微服务架构环境部署的详细步骤。需要注意的是,在进行部署之前,需要先熟悉Docker和Kubernetes的基本概念和操作方法,以便能够顺利完成部署

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值