docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)

目录

安装docker+jenkins+docker-compose+ruoyi+mysql

安装yum命令

下载docker-ce

启动docker

安装docker-compose

查询docker和docker-compose兼容性

查询docker-compose版本

下载docker-compose

使用sudo管理员权限执行命令

 docker-compose --version  查询是否成功   

docker-compose部署若依项目

打包

部署出现过得问题

启动基础环境./deploy.sh base

若依数据库默认密码

很纳闷

deploy.sh  modules命令

docker 安装Jenkins

linux安装jdk17

安装maven

安装gitlab

拉取报错docker: error pulling image configuration

​编辑

修改gitlab配置

重启gitlab

 修改密码

启动Jenkins+挂载配置+访问

jenkins部署若依

安装docker-compose

 宿主机不安装jdk和maven启动

配置容器中得jdk和maven

设置全局工具配置

 构建一个maven项目

 配置项目

 配置Build

jenkins+docker+docker-compose+shell脚本部署

jenkins项目配置

修改项目配置的build

添加Publish over SSH

添加Post Steps

idea中修改项目配置

修改ip

配置Jenkins.sh文件

添加copy.sh

配置deploy.sh

配置jenkins.sh   deploy.sh   copy.sh 文件权限

jenkins部署遇到的问题

 部署ruoyi-ui

配置ruoyi.sh

修改jenkins.sh文件

docker 安装es

docker官网查询镜像地址

第二步启动 es

第三步 创建docker容器挂载的目录

第四步将容器文件拷贝出来

 第五步 设置elasticsearch.yml内容

第七步  重新起容器并挂载外部文件夹

docker安装  logstash

启动 logstash 

创建logstash 挂载文件夹

mkdir -p /data/logstash/config

将容器文件拷贝出来

停止和删除容器

创建logstash.conf配置文件

启动logstash和挂载的文件

docker进入容器

docker安装Kibana

启动kibana

创建kibana本地挂载文件

停止和删除临时容器

启动挂载地址后的新容器

 进入elasticsearch容器获取token

进入es容器修改密码

docker 安装nacos

nacos单机版

启动挂载

nacos配置数据库

 搭建集群nacos

 添加多数据库

修改cluster.conf文件配置集群节点

 遇到问题 :

启动命令配置集群


参考文章

docker一站式安装Java开发环境_codexiaov的博客-CSDN博客docker+jenkins+gitee+shell 自动化部署微服务(基于若依)【详细完整版】_jenkins部署若依微服务_菠萝仔丨叶的博客-CSDN博客docker一站式安装Java开发环境_codexiaov的博客-CSDN博客

后续继续实验完善补全

安装docker

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
# 开机自启动
sudo systemctl enable docker

# docker 会用到很多端口,建立先关闭

systemctl stop firewalld

# 禁止开机启动防火墙

systemctl disable firewalld

#查看是否关闭防火墙

systemctl status firewalld

Docker配置镜像源

{
"registry-mirrors":["https://vu7aic22.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]
}

启动docker

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

systemctl enable docker #开机启动

安装docker-compose

查询docker和docker-compose兼容性

https://docs.docker.com/compose/compose-file/compose-file-v3/

查询docker-compose版本

https://github.com/docker/compose/releases/

下载docker-compose

我用的是centos桌面版,修改文件名字为docker-compose    直接拷贝  
存放的路径  usr/local/bin/ 

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第1张图片

使用sudo管理员权限执行命令

sudo chmod +x /usr/local/bin/docker-compose

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第2张图片

 docker-compose --version  查询是否成功   

不熟悉的,不推荐链接地址下载

明明文件在出现错误 : bash: /usr/local/bin/docker-compose: 没有那个文件或目录,

 

docker-compose部署若依项目

打包

需要注意修改若依yml文件中nacos注册中心地址

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第3张图片

复制一个分docker文件 上传到服务器中

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第4张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第5张图片

部署出现过得问题

问题1 :bash: ./deploy.sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录

脚本文件在windows下编辑过。在windows下,会出现空格 每一行的结尾是\n\r,而在linux下文件的结尾是\n

解决方法 : cat -A 文件名称   #可以查询当前文件   \r 字符被显示为^M

使用指令sed -i 's/\r$//' 【文件名称】  ,上面的指令会把  copy.sh 中的\r 替换成空白
问题2 :启动./deploy.sh modules时,连接nacos 提示 Connection refused: /127.0.0.1:9848

把注册地址换成了,容器名称:端口,不使用ip地址

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第6张图片

 问题3:Connection refused: localhost/127.0.0.1:6379

我是查询redis容器得ip, 修改nacos注册中心yml文件 redis 地址

 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 7d7d1b396ac4
docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第7张图片

 也配置过容器名称,访问redis   通过docker  logs  去查询也没发现报错信息 

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第8张图片

问题4: 明明若依有几个jar包,其他几个却没有启动

因为在deploy.sh文件中有设置

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第9张图片

启动基础环境./deploy.sh base

我是关闭了防火墙 所以不需要开启端口,命令需要在当前目录下执行

# 开启所需端口
./deploy.sh port

# 启动基础环境

./deploy.sh base  下面是操作图

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第10张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第11张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第12张图片

关闭所有模块 因为没有把nacos得sql放入

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第13张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第14张图片

使用 ./deploy  base 后的成功界面,因为没使用 ./ deploy.sh   modules所以,没有服务注册

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第15张图片

若依数据库默认密码

mysql -uroot-ppassword

docker exec -it     /bin/bash

让root可被所有ip链接

grant all privileges on *.* to root@'%' with grant option;

刷新限权

flush privileges;

当用navicat连接数据库后,建议去执行nacos所需要的sql  

# 开启所需端口
./deploy.sh port

# 启动基础环境(必须)
./deploy.sh base

# 启动程序模块(必须)
./deploy.sh modules

# 关闭所有环境/模块
./deploy.sh stop

# 删除所有环境/模块
./deploy.sh rm

很纳闷

当nacos通过docker logs 查询日志时,出现No DataSource set错误时 ,进入mysql容器,然后进入mysql,nacos就能访问
后面再次关机,重试启动所有服务时, 就没有在出现

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第16张图片

deploy.sh  modules命令

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第17张图片

docker 安装Jenkins

docker pull jenkinsci/blueocean

当下载超时,去阿里云容器镜像服务,把加速器的地址加入daemon.json

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第18张图片

linux安装jdk17

Java Downloads | Oracle

将文件传输到Linux的 /opt 目录下

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第19张图片

 解压文件

tar -zxvf jdk-17_linux-x64_bin.tar.gz

配置环境变量

vim /etc/profile

在文件底部加上

JAVA_HOME=/opt/jdk-17.0.7
PATH=/opt/jdk-17.0.7/bin:$PATH
export JAVA_HOME PATH

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第20张图片

保存后让配置文件生效

source /etc/profile

安装maven

https://maven.apache.org/download.cgimaven 官网地址  https://maven.apache.org/download.cgi

 存放路径自己选择,只要在profile指定就行

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第21张图片

修改配置文件

:%d   清空文件内容    替换以下配置


 

 
  /m2/repository
  
  
  
 
      
  
 
  
  
 
  
      
   	  alimaven  
   	  aliyun maven  
	  http://maven.aliyun.com/nexus/content/groups/public/  
   	  central          
     
  
 
  
  

 修改profile  在底部加入以下配置  注意路径   

MAVEN_HOME=/usr/local/maven/apache-maven-3.9.2
PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_HOME PATH

保存后让配置文件生效

source /etc/profile

验证

mvn -version

安装gitlab

docker pull gitlab/gitlab-ce:latest

拉取报错docker: error pulling image configuration

解决方法 修改国内镜像

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
}

然后重启docker

systemctl restart docker

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第22张图片

启动gitlab 和设置挂载
\-v /var/gitlab 这是挂载路径
 

docker run \-itd  \-p 9980:80 \-p 9922:22 \-v /var/gitlab/etc:/etc/gitlab  \-v /var/gitlab/log:/var/log/gitlab \-v /var/gitlab/opt:/var/opt/gitlab \--restart always \--privileged=true \--name gitlab \gitlab/gitlab-ce
 

修改gitlab配置

修改端口80  改为 9980

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第23张图片

重启gitlab

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第24张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第25张图片

 修改密码

#进入容器  执行以下命令
docker exec -it gitlab /bin/bash

# 进入控制台
gitlab-rails console -e production
 
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(id:1).first
# 密码不能太简单 修改密码为root123456
user.password='root123456'
# 保存
user.save!
# 退出
exit

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第26张图片

 gitlab界面设置中文

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第27张图片

启动Jenkins+挂载配置+访问

启动后访问密码在本机var地址中,不在docker容器

docker run \-u root \-d \--name jenkins \--restart=always \-p 8001:8080 \-p 50000:50000 \-v /var/run/docker.sock:/var/run/docker.sock \-v /var/jenkins_home:/var/jenkins_home \jenkinsci/blueocean

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第28张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第29张图片

 初次可以选择推荐的插件docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第30张图片

jenkins部署若依

安装docker-compose

可以参考前面得安装和使用

修改文件名字
mv docker-compose-linux-x86 64 docker-compose
授权
sudo chmod +x /usr/local/bin/docker-compose
查询是否成功
docker-compose -version

下载jenkins:jdk17版本

docker pull jenkins/jenkins:jdk17

因为这个版本在新手安装插件时,都是成功得, 比如jenkinsci/blueocean  有些插件下载不了,或者因为镜像源得版本 

例如 以下问题

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第31张图片

有一些可以使用 清华镜像源解决  :  https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/

完整路径例子 : https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.387/update-center.json

修改站点地址

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第32张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第33张图片

 宿主机不安装jdk和maven启动

设置挂载目录,默认密码也在挂载目录下面

docker run -u root -it --name jenkins -p 9200:8080  -v /var/jenkins_home:/var/jenkins_home -d jenkins/jenkins:jdk17

因为选择得jenkins-jdk17 ,所以只需要拷贝maven到容器中

docker cp /usr/local/maven/apache-maven-3.9.2    容器名称:/opt

因为容器中无法编辑profile,所以我是拷贝出来进行修改环境变量

docker cp  jenkins92:/etc/profile  /usr/local/maven/apache-maven-3.9.2

配置容器中得jdk和maven

在文件的最下面添加容器中得maven和jdk地址
export MAVEN_HOME=/opt/apache-maven-3.9.2                
export PATH=$MAVEN_HOME/bin:$PATH

JAVA_HOME=/opt/java/openjdk
PATH=/opt/java/openjdk/bin:$PATH
export JAVA_HOME PATH

#生效profile文件
source /etc/profile

检查
mvn -v

java -version

 设置全局工具配置
docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第34张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第35张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第36张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第37张图片

 构建一个maven项目

 如果没有这个选项, 需要去jenkins下载插件 Maven Integration plugin, 然后在重启

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第38张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第39张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第40张图片

 配置项目

Credentials 是需要去设置账户密码,我使用的url是gitlab地址

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第41张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第42张图片

 创建账户docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第43张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第44张图片

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第45张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第46张图片

 ID不设置,会默认生成  docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第47张图片

 配置Build

 如果 jenkins   提示没有这个文件: ‘pom.xml‘   说明在工作空间中没有把gitlab项目拉下来

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第48张图片

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第49张图片

 立即构建后回去下载包

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第50张图片

jenkins+docker+docker-compose+shell脚本部署

启动 jenkins


docker run -u root -it --name jenkins30 -p 9400:8080  -v /var/jenkins_home3:/var/jenkins_home -v /opt/jdk-17.0.7:/opt/java/openjdk -v /usr/local/maven/apache-maven-3.9.2:/opt/apache-maven-3.9.2 -d jenkins/jenkins:jdk17

#修改jenkins容器jdk环境变量

当启动挂载目录时,容器中就会创建对应文件夹,只需要修改环境变量路径

jenkins全局工具配置的jdk需要和jenkins容器配置的环境变量一致

export MAVEN_HOME=/opt/apache-maven-3.9.2                
export PATH=$MAVEN_HOME/bin:$PATH

JAVA_HOME=/opt/java/openjdk
PATH=/opt/java/openjdk/bin:$PATH
export JAVA_HOME PATH

替换文件jenkins容器中profile文件

docker cp  /usr/local/maven/apache-maven-3.9.2/profile   jenkins30:/etc/profile  

#生效profile文件


source /etc/profile

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第51张图片

jenkins项目配置

修改项目配置的build

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第52张图片

添加Publish over SSH

没有这个选项的取下载插件

用于jenkins通过SSH连接服务用

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第53张图片

 找到SSH Servers , 添加SSH连接地址和密码

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第54张图片

添加Post Steps

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第55张图片

选择你添加的SSH账户和配置

Remote directory  指定宿主机容器地址,也就是你liunx系统的地址,

会根据指定的路径 /home/sw 把构建的项目存在路径下 ,jenkins构建完成后,可以去当前路径下查看

Exec command : 执行宿主机下路径的脚本

cd  /home/docker/  找到路径   我是换行了,至于不换行,能不能执行还没实验

sh ./jenkins.sh    执行的shell脚本

idea中修改项目配置

修改ip

连接nacos 和 config 替换   ruoyi-nacos

连接mysql 替换   ruoyi-mysql          这里需要注意配置文件是在nacos中   ,修改后重启对应容器

连接redis替换   ruoyi-redis            这里需要注意有些配置文件是在nacos中    

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第56张图片

 注意dockerfile 里面的路径配置

配置Jenkins.sh文件

 如果在windows下编辑,需要注意空格无法被liunx环境识别  否则会报

bash: ./ruoyi-ui.sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录

解决方法 : cat -A 文件名称   #可以查询当前文件   \r 字符被显示为^M

使用指令sed -i 's/\r$//' 【文件名称】  ,上面的指令会把  copy.sh 中的\r 替换成空白

配置容器名称和版本,设置执行的脚本

执行了拷贝 : copy.sh

执行了 deploy.sh  modules  

#!/bin/sh
echo "清理已有容器及镜像资源"
	for container in {"ruoyi-gateway","ruoyi-auth","ruoyi-modules-system"}
do
	image=docker-${container}:latest
	if docker ps | grep ${container} ;then
	    docker stop ${container}
	fi
	if docker ps -a | grep ${container};then
	    docker rm ${container}
	fi
	if docker images | grep ${image};then
	    docker rmi ${image}
	fi
done


# 拷贝构建的jar包到宿主机
/home/docker/copy.sh
# 重新启动docker项目
/home/docker/deploy.sh modules

因为这里使用docker-compose  如果没有请下参考前面的配置方式进行配置

 作用是执行docker-compose.yml文件里面的配置, 在docker-compose.yml配置文件中有指定执行dockerfile,在dockerfile中又配置了执行jar的路径

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第57张图片

version : '3.8'
services:
  ruoyi-nacos:
    #指定容器的名称为
    container_name: ruoyi-nacos
    #指定要使用的镜像
    image: nacos/nacos-server
    build:
      #表示在 ./nacos 目录下有 Dockerfile,可以用来构建镜像。
      context: ./nacos
    #设置环境变量,这里设置了 MODE=standalone,表示以单机模式运行 Nacos。
    environment:
      - MODE=standalone
    #设置容器挂载路径   挂载文件或目录到容器中
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    #将容器内的端口映射到宿主机的对应端口
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    #定义了服务之间的依赖关系,这里表示 ruoyi-nacos 依赖于另一个名为 ruoyi-mysql 的服务。
    depends_on:
      - ruoyi-mysql
    links:
      - ruoyi-mysql
  ruoyi-mysql:
    #指定容器的名称为
    container_name: ruoyi-mysql
    #指定要使用的镜像
    image: mysql:5.7
    build:
      #表示在 ./mysql 目录下有 Dockerfile,可以用来构建镜像。
      context: ./mysql
    #将容器内的端口映射到宿主机的对应端口
    ports:
      - "3306:3306"
    #设置容器挂载路径
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
    #command: 定义了要在容器内运行的命令和参数。
    #'mysqld': 指定要运行的命令为 mysqld,即 MySQL 服务器进程。
    #--innodb-buffer-pool-size=80M: 设置 InnoDB 缓冲池的大小为 80MB。这是 MySQL 中用于存储数据和索引的内存缓冲区。
    #--character-set-server=utf8mb4: 设置 MySQL 服务器的字符集为 utf8mb4,支持存储和处理 Unicode 字符。
    #--collation-server=utf8mb4_unicode_ci: 设置 MySQL 服务器的排序规则为 utf8mb4_unicode_ci,用于字符串比较和排序。
    #--default-time-zone=+8:00: 设置默认时区为 UTC+8,这里表示东八区时间。
    #--lower-case-table-names=1: 设置表名大小写不敏感,即表名的字母都被转换为小写。
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    # #设置环境变量
    environment:
      #表示要创建的数据库名称为 'ry-cloud'。这将在 MySQL 容器启动时自动创建该数据库。
      MYSQL_DATABASE: 'ry-cloud'
      #表示要设置的 MySQL 根用户的密码为 'password'   账户为root
      MYSQL_ROOT_PASSWORD: password

  ruoyi-redis:
    container_name: ruoyi-redis
    image: redis
    build:
      context: ./redis
    ports:
      - "6379:6379"
    volumes:
      - ./redis/conf/redis.conf:/home/ruoyi/redis/redis.conf
      - ./redis/data:/data
    #表示在 Redis 容器中执行的命令是 redis-server /home/ruoyi/redis/redis.conf。
    #告诉 Redis 容器使用指定的配置文件 /home/ruoyi/redis/redis.conf 启动 Redis 服务器
    command: redis-server /home/ruoyi/redis/redis.conf
  ruoyi-nginx:
    container_name: ruoyi-nginx
    image: nginx
    build:
      context: ./nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/html/dist:/home/ruoyi/projects/ruoyi-ui
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
      - ./nginx/conf.d:/etc/nginx/conf.d
    #表示该容器依赖于名为 "ruoyi-gateway" 的服务容器,在启动时会先启动 "ruoyi-gateway"。
    depends_on:
      - ruoyi-gateway
    #将 "ruoyi-gateway" 容器与 "ruoyi-nginx" 容器链接起来,以便于容器之间的通信。 相当于在gateway上搭建了nginx
    links:
      - ruoyi-gateway
  ruoyi-gateway:
    container_name: ruoyi-gateway
    build:
      context: ./ruoyi/gateway
      dockerfile: dockerfile
    ports:
      - "8080:8080"
    #表示 ruoyi-gateway容器依赖于名为 "ruoyi-redis" 的服务容器
    depends_on:
      - ruoyi-redis
    #将 "ruoyi-redis" 容器与 "ruoyi-gateway" 容器链接起来,以便于容器之间的通信。
    links:
      - ruoyi-redis
  ruoyi-auth:
    container_name: ruoyi-auth
    build:
      context: ./ruoyi/auth
      dockerfile: dockerfile
    ports:
      - "9200:9200"
    depends_on:
      - ruoyi-redis
    links:
      - ruoyi-redis
  ruoyi-modules-system:
    container_name: ruoyi-modules-system
    build:
      context: ./ruoyi/modules/system
      dockerfile: dockerfile
    ports:
      - "9201:9201"
    depends_on:
      - ruoyi-redis
      - ruoyi-mysql
    links:
      - ruoyi-redis
      - ruoyi-mysql
  ruoyi-modules-gen:
    container_name: ruoyi-modules-gen
    build:
      context: ./ruoyi/modules/gen
      dockerfile: dockerfile
    ports:
      - "9202:9202"
    depends_on:
      - ruoyi-mysql
    links:
      - ruoyi-mysql
  ruoyi-modules-job:
    container_name: ruoyi-modules-job
    build:
      context: ./ruoyi/modules/job
      dockerfile: dockerfile
    ports:
      - "9203:9203"
    depends_on:
      - ruoyi-mysql
    links:
      - ruoyi-mysql
  ruoyi-modules-file:
    container_name: ruoyi-modules-file
    build:
      context: ./ruoyi/modules/file
      dockerfile: dockerfile
    ports:
      - "9300:9300"
    volumes:
    - ./ruoyi/uploadPath:/home/ruoyi/uploadPath
  ruoyi-visual-monitor:
    container_name: ruoyi-visual-monitor
    build:
      context: ./ruoyi/visual/monitor
      dockerfile: dockerfile
    ports:
      - "9100:9100"

添加copy.sh

注意在windows环境下编辑容易产生liunx无法识别的空格

主要作用就是拷贝

指定宿主机路径/home/sw 打包路径下的jar    拷贝到宿主机其他路径,方便./deploy.sh 执行

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第58张图片

配置deploy.sh

路径最好是和jenkins.sh文件中配置的一致,如果你要增加模块, 可以把docker-compose文件配置的模块名称加入到 base和modules中

端口号如果没有关闭防火墙,就需要调用 ./deploy  port  执行配置的端口

配置完成后先别急使用jenkins进行构建,还需要配置jenkins.sh   deploy.sh   copy.sh 文件权限

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第59张图片

配置jenkins.sh   deploy.sh   copy.sh 文件权限

ls -l deploy.sh  查询权限

 chmod +rwx  deploy.sh   设置文件权限

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第60张图片

jenkins部署遇到的问题

问题1
若依的mysql脚本为啥不会放入/docker-entrypoint-initdb.d文件夹中, 
 我用docker  cp 放入, 重启mysql 容器sql也还是不会被执行


./deploy启动后mysql 只会创建一个ruoyi-cloud   不会使用sql文件进行创建
因为没有加入/docker-entrypoint-initdb.d(用于存放初始化数据库的脚本文件)

想过是不是文件的使用权限不够

查询文件权限
ls -l ry_config_20220929.sql

这个问题还没解决
问题2
Server check fail, please check server x.x.x.x ,port 9848 is available , error ={}

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第61张图片
解决方法 : 是因为删除镜像不彻底  docker rmi / rm   去删除容器和镜像,
然后在修改system服务数据库,连接地址改成ruoyi-mysql  和 ruoyi-redis  然后重启,最后所有容器才启动成功
问题3
10:32:21 ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [2]]
修改 shell脚本  检查是否存在windows空格

 部署ruoyi-ui

Centos安装Nodejs简单方式_诚哥博客的博客-CSDN博客

安装 Node.js 和 npm

cd /usr/local
wget https://npmmirror.com/mirrors/node/v16.18.1/node-v16.18.1-linux-x64.tar.xz

node -v

npm -v

配置ruoyi.sh
#!/bin/sh

#进入路径
cd /home/sw/ruoyi-ui

#安装依赖
npm  install

#删除原打包
rm -rf  dist

#打包
npm run build:prod

#将名为 "stage" 的文件或目录重命名为 "dist"
mv stage dist

# 打包完成后,将生成的静态文件复制到指定目录
# 例如,a将 dist 目录下的文件 通过copy.sh 复制到 NGINX 的 HTML 目录
#cp -R dist/* /usr/share/nginx/html
修改jenkins.sh文件

因为在copy.sh  配置文件中,把打包生成的html文件拷贝到nginx中,

#!/bin/sh
echo "清理已有容器及镜像资源"
	for container in {"ruoyi-gateway","ruoyi-auth","ruoyi-modules-system"}
do
	image=docker-${container}:latest
	if docker ps | grep ${container} ;then
	    docker stop ${container}
	fi
	if docker ps -a | grep ${container};then
	    docker rm ${container}
	fi
	if docker images | grep ${image};then
	    docker rmi ${image}
	fi
done

#部署ruoyi-ui
/home/docker/ruoyi-ui.sh
# 拷贝构建的jar包到宿主机
/home/docker/copy.sh
# 重新启动docker项目
/home/docker/deploy.sh modules

访问路径http://192.168.16.130/login

访问路径http://192.168.16.130/login

docker 安装es

docker  login  登录

docker tag  镜像名称 / TAG   docker账户/ 上传得版本号      打包镜像上传到docker

docker tag hello-world:latest gandegui629/test-hello:1.0.0

 docker push gandegui629/test-hello:1.0.0    上传

docker pull elasticsearch:7.17.2

docker ps 查看是否启动

docker logs elasticsearch 启动日志查询

docker restart elasticsearch 重启

docker exec -it 容器名称 /bin/bash   进入 容器

exit  退出容器

docker logs <容器名称或ID>   查询容器日志
docker ps -a  查询所有容器

docker inspect <容器名称或ID> grep IPAddress   查看容器IP地址

docker logs -f cf66a8bd5cb5   查询容器实时日志

查询容器的ip地址 4bf93249fc1b 容器的id

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 4bf93249fc1b
 


docker官网查询镜像地址

Docker

第二步启动 es

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" elasticsearch:7.17.2

参数说明

  • -d 后台启动
  • –name 起别名即:NAMES
  • -p 9200:9200 将端口映射出来
    elasticsearch的9200端口是供外部访问使用;9300端口是供内部访问使用集群间通讯
  • -e "discovery.type=single-node"单节点启动
  • -e ES_JAVA_OPTS="-Xms256m -Xmx256m" 限制内存大小

docker ps 查看是否启动成功

第三步 创建docker容器挂载的目录

mkdir -p /data/elasticsearch/{config,data,logs,plugins}

第四步将容器文件拷贝出来

docker cp elasticsearch:/usr/share/elasticsearch/config /data/elasticsearch

docker cp elasticsearch:/usr/share/elasticsearch/logs /data/elasticsearch

docker cp elasticsearch:/usr/share/elasticsearch/data /data/elasticsearch

docker cp elasticsearch:/usr/share/elasticsearch/plugins /data/elasticsearch

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第62张图片

 第五步 设置elasticsearch.yml内容

vi /data/elasticsearch/config/elasticsearch.yml

还可以设置密码

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第63张图片

第六步  停止和删除临时容器

 docker stop elasticsearch

docker rm elasticsearch

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第64张图片

第七步  重新起容器并挂载外部文件夹

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \-v /data/elasticsearch/data:/usr/share/elasticsearch/data \-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \elasticsearch:7.17.2

注意 \-e   \-v之间不能有空格     \前面需要一个空格否则会报 docker: invalid reference format

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第65张图片

 然后就可以访问  curl "http://localhost:9200"  这是在虚拟机安装的,可以在本机访问 例如192.168.16.128:9200

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第66张图片

es命令

match query 用于搜索单个字段

GET /attendance_server_log/_search
{
  "query": {
    "match": {
      "action": "修改"
    }
  }
}
#等同于 or 匹配操作

multi_match 是 match 的升级,用于搜索多个字段

docker安装  logstash

docker pull logstash:7.17.2

启动 logstash 

启动 logstash  :  docker run -d --name logstash -p 5044:5044 -p 9600:9600 logstash:7.17.2

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第67张图片

创建logstash 挂载文件夹

mkdir -p /data/logstash/config


将容器文件拷贝出来

docker cp logstash:/usr/share/logstash/config /data/logstash/config

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第68张图片

停止和删除容器

docker stop logstash 

docker rm -f logstash 

创建logstash.conf配置文件

input {
  #为logstash增加tcp输入口,方便springboot接入
  tcp {
    mode => "server"
    host => "0.0.0.0"
	#从4560端口取日志
    port => 4560
	#需要进入logstash容器安装logstash-codec-json_lines插件
    codec => json_lines
	#设置类型
    type => "debug"
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4561
    codec => json_lines
    type => "error"
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4562
    codec => json_lines
    type => "info"
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4563
    codec => json_lines
    type => "record"
  }
}

#数据筛选和过滤,只处理符合特定条件的数据,不需要可删除
filter{
  if [type] == "record" {
    mutate {
      remove_field => "port"
      remove_field => "host"
      remove_field => "@version"
    }
    json {
      source => "message"
      remove_field => ["message"]
    }
  }
}
output {
  elasticsearch {
   #hosts中的地址应该写同一network下的容器名称
    hosts => "192.168.16.128:9200"
    index => "springboot-%{type}-%{+YYYY.MM.dd}"
  }
}

启动logstash和挂载的文件

  docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \--link elasticsearch:es \-v /data/logstash/config/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \-d logstash:7.17.2

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第69张图片

docker进入容器

docker exec -it bc3fa65632bb bash 

# 进入bin目录 cd /bin/

# 安装插件 logstash-plugin install logstash-codec-json_lines

# 重启logstash服务 docker restart logstash

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第70张图片

docker安装Kibana

docker pull kibana:7.17.2

启动kibana

 docker run -d --name kibana -p 5601:5601 kibana:7.17.2

创建kibana本地挂载文件

mkdir -p /data/kibana/

拷贝docker文件指定存储

docker cp kibana:/usr/share/kibana/config  /data/kibana
docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第71张图片

 修改kibana.yml配置文件

vim /data/kibana/config/kibana.yml

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第72张图片

停止和删除临时容器

docker stop  kibana

docker rm  kibana

 docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第73张图片

启动挂载地址后的新容器

docker run -d --name kibana -p 5601:5601 -v /data/kibana/config:/usr/share/kibana/config kibana:7.17.2

 进入elasticsearch容器获取token

 因为kibana发现es需要token

b726550721fb = 容器id

docker exec -it b726550721fb /bin/bash bin/elasticsearch-create-enrollment-token --scope kibana

进入es容器修改密码

使用kibana查询索引下的所有

7之后的版本,默认情况下会连接localhost:9200  的Es

match query 用于搜索单个字段

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第74张图片

docker 安装nacos

nacos单机版

docker  pull

docker run -d --name nacos -p 8848:8848 -e MODE=standalone  nacos/nacos-server
创建挂载目录

 mkdir -p /data/nacos/{conf,data,logs}

拷贝文件到新建的文件夹中
docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第75张图片

请求地址http://192.168.16.128:8848/nacos

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第76张图片

 删除启动的nacos

docker  stop nacos 

docker rm nacos

启动挂载

docker run -it --name nacos \-p 8848:8848 \-e MODE=standalone 
\-v /data/nacos/conf/application.properties:/home/nacos/conf/application.properties 
\-v /data/nacos/data:/home/nacos/conf/data 
\-v /data/nacos/logs:/home/nacos/conf/logs \-d nacos/nacos-server

 docker exec -it 容器名称 /bin/bash   进入 容器

因为我使用的是本机安装虚拟机的方式,想让docker中的nacos 连接到本机mysql 需要指定

--network host参数将容器连接到宿主机的网络,

docker run --network host -d -e MODE=standalone -v /data/nacos/logs:/home/nacos/logs -v /data/nacos/conf:/home/nacos/conf -p 8848:8848 --name nacos --restart=always  nacos/nacos-server:v2.2.3

需要注意,当使用nacos配置文件使用root账户时, mysql库中的user表, root 用户host是否设置了% 否则nacos无法连接

可能会出现以下报错

message from server: "Host '192.168.38.52' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
Access denied for user ‘root‘@ ‘*.*.*.*‘ (using password: YES)
Nacos启动报错java.lang.IllegalStateException: No DataSource set

nacos配置数据库

我是通过在虚拟机中的docker 安装nacos 访问本机的mysql数据

docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)_第77张图片

 搭建集群nacos

准备nacos三个服务端

 添加多数据库

修改application.properties 配置文件  添加多数据库

spring.datasource.platform=mysql


### Connect URL of DB:  当一个数据挂了后,会切换到另外一个数据库
db.num=1
db.url.0=jdbc:mysql://192.168.38.52:3306/nacos?rewriteBatchedStatements=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
db.user.0=root
db.password.0=yraicm

db.num=2
db.url.1=jdbc:mysql://192.168.88.79:3306/nacos?rewriteBatchedStatements=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
db.user.1=root
db.password.1=Attendance@2022*

修改cluster.conf文件配置集群节点

分别启动nacos节点    nacos默认启动是集群方式

 遇到问题 :

nacos 服务端配置多数据源时, 添加配置时, 另外一个数据源没有数据

需要通过mysql的主从同步来实现

当没有做主从时, nacos多数据库源,只适合当一个数据源挂掉后,进行切换

启动命令配置集群

这命令只会在虚拟机访问

docker run \--name nacos8850 -itd \--privileged=true \--restart=always \-p 8850:8850 \-e MODE=cluster \-e PREFER_HOST_MODE=ip \-e NACOS_SERVER_IP=192.168.16.128 \-e NACOS_SERVERS=192.168.16.128:8850,192.168.16.128:8860,192.168.16.128:8870 \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=192.168.38.52 \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=yraicm \-e MYSQL_SERVICE_DB_NAME=nacos \-e TIME_ZONE='Asia/Shanghai' \-e JVM_XMS=512m \-e JVM_XMX=512m \nacos/nacos-server:v2.2.3

本机电脑访问 需要\--network host 将容器连接到宿主机的网络,

docker run \--network host  \--name nacos8850 -itd \--privileged=true \--restart=always \-p 8850:8850 \-e MODE=cluster \-e PREFER_HOST_MODE=ip \-e NACOS_SERVER_IP=192.168.16.128 \-e NACOS_SERVERS=192.168.16.128:8850,192.168.16.128:8860,192.168.16.128:8870 \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=192.168.38.52 \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=yraicm \-e MYSQL_SERVICE_DB_NAME=nacos \-e TIME_ZONE='Asia/Shanghai' \-e JVM_XMS=512m \-e JVM_XMX=512m \nacos/nacos-server:v2.2.3
 


 

你可能感兴趣的:(mysql,java,docker)