超详细实战Docker+Jenkins部署生产环境前后分离项目

这篇具有很好参考价值的文章主要介绍了超详细实战Docker+Jenkins部署生产环境前后分离项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境: 本文的所有服务都部署在阿里云ECS服务器(2H4G)上面, 前后端分离项目使用gitee上面的开源项目若依(ruoyi-vue)为例, 从零开始教学

1、先停止服务器, 再重装系统, 用最干净的系统从头教学, 保证大家环境一样
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

2、系统选择Centos最新版本, 然后开始安装, 等待安装完成
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器3、安装完成后用远程工具连接到阿里云服务器, 开始安装docker
  cat /etc/centos-release
  yum update
  yum install -y -q yum-utils
  # 添加源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  # 安装
  yum install -y  docker-ce

 4、验证docker安装完成
  docker version

jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

 5、启动docker, 设置开机启动
  systemctl start docker
  systemctl enable dockerjenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

    Docker开启远程访问 

需修改Docker的配置,开启远程访问权限:
打开文件:vim /lib/systemd/system/docker.service
注释:# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
新增:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
更新配置: systemctl daemon-reload
重新启动:systemctl restart docker
可操作远程docker与构建上传docker镜像(代替原来maven docker插件) tcp连接需要开放服务器2375端口 ssh需要使用上方的SSH连接配置 建议使用SSH连接

6、安装docker-compose, 添加可执行权限, 验证
  

sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

  sudo chmod +x /usr/local/bin/docker-compose
  docker-compose --versionjenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

7、编写docker-compose.yml, 安装若依项目的基础环境
  在根目录下创建 docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:8.0.29
    container_name: mysql
    restart: always
    ports:
      - 3306:3306
    privileged: true
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    volumes:
      - /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
      - /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件挂载
      - /mydata/mysql/log:/var/log/mysql #日志文件挂载
  redis:
    image: redis:7
    container_name: redis
    restart: always
    command: redis-server --requirepass 123456 --appendonly yes
    volumes:
      - /mydata/redis/data:/data #数据文件挂载
      - /etc/localtime:/etc/localtime
    ports:
      - 6379:6379
  jenkins:
    image: jenkinsci/blueocean
    container_name: jenkins
    restart: always
    user: root
    ports:
    - 8080:8080
    - 50000:50000
    volumes:
    - /mydata/jenkins_home:/var/jenkins_home
    - /etc/localtime:/etc/localtime:ro
    - /var/run/docker.sock:/var/run/docker.sock

8、因为若依项目编译需要用到maven, 所以导一份maven的seeting文件到jenkins_home目录
  mkdir -p /mydata/jenkins_home/appconfig/maven
  将settings.xml文件放到上面的目录中

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <pluginGroups>
  </pluginGroups>
  <proxies>
  </proxies>
  <servers>
  </servers>
  <mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <localRepository>/root/.m2</localRepository>
  <profiles>
	<profile>
		<id>jdk-1.8</id>
		<activation>
			<jdk>1.8</jdk>
		</activation>
		<properties>
			<maven.compiler.source>1.8</maven.compiler.source>
			<maven.compiler.target>1.8</maven.compiler.target>
			<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>
	</profile>
  </profiles>
</settings>

9、启动docker-compose
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器
10、查看容器启动状态
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器11、环境准备完毕, 现在开始配置jenkins
  在阿里云服务器的安全组中添加3306 6379 8080端口, 8888后端项目, 8889前端项目
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

  在浏览器访问jenkinsjenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器
12、查看管理员密码
    docker logs jenkins
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

13、安装推荐的插件
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

  失败一个无所谓, 继续
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

 14、创建管理员用户
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器 15、使用我们创建的账号登录jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

   安装插件Docker Pipeline, 后面构建流水线需要
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

16、现在开始准备前后端分离的项目, 以RuoYi-Vue为例进行部署, 下载zip包jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

17、解压, 然后将ruoyi-ui剪切出来放在外面, 形成前后端分离的两个项目
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器 18、在RuoYi-Vue-master项目中编写Dockerfile和Jenkinsfile两个文件, Dockerfile是将jar包生成镜像, Jenkinsfile是执行流水线的脚本
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

# FROM java:8
FROM anapsix/alpine-java:8_server-jre_unlimited
# 将当前目录下的jar包复制到docker容器的/目录下
COPY *.jar /app.jar
# 运行过程中创建一个xx.jar文件
RUN touch /app.jar

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
ENV PARAMS="--spring.profiles.active=prod"

# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]
pipeline{
    agent any
    environment {
      IMAGE_NAME = "ruoyi-admin"
      WS = "${WORKSPACE}"
    }

    //定义流水线的加工流程
    stages {
        //流水线的所有阶段
        stage('1.环境检查'){
            steps {
               sh 'pwd && ls -alh'
               sh 'printenv'
               sh 'docker version'
               sh 'java -version'
               sh 'git --version'
            }
        }

        stage('2.编译'){
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '-v maven-repository:/root/.m2'
                 }
            }
            steps {
               sh 'pwd && ls -alh'
               sh 'mvn -v'
               sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true'
            }
        }

        stage('3.打包'){
            steps {
               sh 'pwd && ls -alh'
               sh 'echo ${WS}'
               // sh 'mv ${WS}/${IMAGE_NAME}/target/*.jar ${WS}/${IMAGE_NAME}.jar && pwd && ls -alh && docker build -t ${IMAGE_NAME} .'
               sh 'docker build -t ${IMAGE_NAME} -f Dockerfile ${WS}/${IMAGE_NAME}/target/'
            }
        }

        stage('4.部署'){
            // 删除容器和虚悬镜像
            steps {
               sh 'pwd && ls -alh'
               sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true'
               sh 'docker run -d -p 8888:8080 --name ${IMAGE_NAME} -v /mydata/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}'
            }
        }
    }
}

19、新增配置文件, 使用我们刚才创建的mysql和redis
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

# 数据源配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      # 主库数据源
      master:
        url: jdbc:mysql://xx.xx.xx.xx:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
      # 从库数据源
      slave:
        # 从数据源开关/默认关闭
        enabled: false
        url:
        username:
        password:
      # 初始连接数
      initialSize: 5
      # 最小连接池数量
      minIdle: 10
      # 最大连接池数量
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一个连接在池中最大生存的时间,单位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 配置检测连接是否有效
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        # 设置白名单,不填则允许所有访问
        allow:
        url-pattern: /druid/*
        # 控制台管理用户名和密码
        login-username: ruoyi
        login-password: 123456
      filter:
        stat:
          enabled: true
          # 慢SQL记录
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
  redis:
    # 地址
    host: xx.xx.xx.xx
    password: 123456

20、初始化若依项目的数据库
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

21、在前端项目ruoyi-ui中编写Dockerfile和Jenkinsfile两个文件, 并创建两个环境的nginx的配置文件(前端项目要在nginx中运行), 案例演示两个nginx的配置文件除了名字不同, 里面的内容是一相同
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

FROM nginx:1.22

# 构建参数,在Jenkinsfile中构建镜像时定义
ARG PROFILE

# 将dist文件中的内容复制到 `/usr/share/nginx/html/` 这个目录下面
COPY dist/  /usr/share/nginx/html/

# 用本地配置文件来替换nginx镜像里的默认配置
COPY nginx/nginx-${PROFILE}.conf /etc/nginx/nginx.conf

EXPOSE 80

# 以前台形式持续运行
CMD ["nginx", "-g", "daemon off;"]
pipeline{
    agent any
    environment {
      // 镜像名称
      IMAGE_NAME = "ruoyi-ui"
      // 工作目录
      WS = "${WORKSPACE}"
      // 后台项目镜像名称
      API_IMAGE_NAME = "ruoyi-admin"
      // 自定义的构建参数
      PROFILE = "prod"
    }

    //定义流水线的加工流程
    stages {
        //流水线的所有阶段
        stage('1.环境检查'){
            steps {
               sh 'pwd && ls -alh'
               sh 'printenv'
               sh 'docker version'
               sh 'git --version'
            }
        }

        stage('2.编译'){
            agent {
                docker {
                    image 'node:12-alpine'
                 }
            }
            steps {
               sh 'pwd && ls -alh'
               sh 'node -v'
               sh 'cd ${WS} && npm install --registry=https://registry.npmmirror.com --no-fund && npm run build:prod'
            }
        }

        stage('3.打包'){
            steps {
               sh 'pwd && ls -alh'
               sh 'docker build --build-arg PROFILE=${PROFILE} -t ${IMAGE_NAME} .'
            }
        }

        stage('4.部署'){
            // 删除容器和虚悬镜像
            steps {
               sh 'pwd && ls -alh'
               sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true'
               sh 'docker run -d -p 8889:80 --name ${IMAGE_NAME} --link ruoyi-admin:ruoyi-admin ${IMAGE_NAME}'
            }
        }
    }
}
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

      location / {
            root   /usr/share/nginx/html;
         try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

      location /prod-api/{
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         #访问容器地址
         proxy_pass http://ruoyi-admin:8080/;
         #访问外网地址, 后台容器端口映射8888:8080
         #proxy_pass http://47.114.186.174:8888/;
      }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 22、将前后端两个项目上传到gitee
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

23、下面开始配置jenkins的CICD
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器 jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

24、添加分支源jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

25、 选择发现分支, 根据名称过滤
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

   一个项目可能会有很多分支, 添加过滤之会只会创建master和dev分支的流水线


26、配置完成保存, 开始构建流水线,  这个过程有点慢, 耐心等待SUCCESS再刷新页面
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

27、打开Blue Ocean, 可以看见我们的多分支流水线已经构建成功! 因为ruoyi后端项目我们没有创建其他分支, 所以只有master一个流水线
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器28、手动运行一次
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

29、测试后端项目接口, 后端项目自动构建部署成功!!
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器  30、下面开始部署前端项目, 创建一个dev分支, 测试多分支流水线, 步骤和部署后端项目类似
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

 31、等待初次构建完成
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

 32、打开Blue Ocean, 可以看到有两条流水线
jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

32、构建master的流水线, 访问若依前端首页jenkins 部署ruoyi前后端分离项目,编程,docker,jenkins,容器

33、奥利给! 全部部署成功

如果有问题可以在评论区提问
 文章来源地址https://www.toymoban.com/news/detail-796708.html

到了这里,关于超详细实战Docker+Jenkins部署生产环境前后分离项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ruoyi安装部署(linux环境、前后端不分离版本)

    目录 简介 1 新建目录 2 安装jdk 2.1 jdk下载 2.2 解压并移动文件夹到/data/service目录 2.3 配置环境变量 3 安装maven 3.1 进入官网下载最新的maven 3.2 解压并移动文件夹到/data//service目录 3.3 配置环境变量 3.4 配置本地仓库地址与阿里云镜像 4 安装git 4.1 进入官网下载git 4.2 解压编译安

    2024年02月11日
    浏览(33)
  • 从零实战本地服务器安装 Docker 部署 ThingsBoard PE 专业版(适用于 Postgres + Kafka 企业级生产环境)

    目录 1、准备工作 2、本地服务器Linux Centos7.9系统安装docker 2.1、检查Linux的内核版本 2.2、卸载Docker旧版本(若有需要) 2.3、安装Docker 2.4、安装Docker引擎 2.5、 启动docker和设置开机⾃启动 3、使用 Docker 安装 ThingsBoard PE 3.1、 拉取 ThingsBoard PE 镜像 3.2、获取许可证密钥 3.3、为

    2024年04月22日
    浏览(38)
  • 用docker一键部署前后端分离若依系统

    目录 一、搭建局域网 1.1、介绍前后端项目搭建 1.2、操作 二、安装redis 测试 三、安装Mysql 检查 远程连接  注意:0- 1-工具原因,复制进去记得删除​编辑 工具测试 四、部署后端服务 4.1、创建数据库 4.2、使用Dockerfile自定义镜像 测试 测试 五、前端部署 5.1、nginx部署 分析n

    2024年03月16日
    浏览(35)
  • 【Docker】安装Nginx容器并部署前后端分离项目

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起

    2024年01月23日
    浏览(36)
  • k8s+docker部署前后端分离项目

    目录 环境准备 1、k8s集群 2、harbor远程仓库 部署前后端分离项目 生成vue镜像(所有子节点都需要操作) 1、将前端vue项目打包得到dist.zip 2、创建nginx的配置文件default.conf 3、创建Dockerfile文件 4、生成vue镜像 5、打标签 6、推到harbor仓库 7、查看生成的镜像 生成jar包镜像(所有子

    2023年04月08日
    浏览(28)
  • 【Docker】使用Docker安装Nginx及部署前后端分离项目应用

            Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它是由 伊戈尔·赛索耶夫 为俄罗斯访问量第二的Rambler.ru站点开发的,公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置

    2024年01月22日
    浏览(37)
  • docker+docker-compose+nginx前后端分离项目部署

    安装yum-utils 从国内服务器上下载docker 安装docker 验证是否成功 安装需要的包 安装依赖包 添加 Docker 的官方 GPG 密钥 设置远程仓库 安装 Docker-CE 验证是否成功 国内镜像中心常用的为阿里云与网易云, 选择其中一个加速器进行配置即可 。在本地 Docker 中指定要使用的国内加速器

    2023年04月09日
    浏览(40)
  • 【Docker】Linux中使用Docker安装Nginx部署前后端分离项目应用

    目录 一、概述 1. Nginx介绍 2. Nginx优势 3. Nginx的工作原理 二、容器创建 1. Mysql容器 2. Tomcat容器 3. Nginx容器 每篇一获 Nginx(发音为 \\\"engine x\\\")是一个开源的、高性能的 HTTP 服务器和反向代理服务器。它也可以作为一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 开发的,最

    2024年01月21日
    浏览(39)
  • SpringBoot前后端分离项目,打包、部署到服务器详细图文流程

    1.修改MySQL配置 修改MySQL地址,修改需要部署的数据名,账号和密码 2.修改Redis配置 修改Redis地址,修改需要部署的Redis密码(如果需要的话) 3.修改日志路径和字符集配置 修改logback.xml中日志的保存地址 重新设置日志字符集(防止放到服务器上去之后日志出现乱码) 1.上传前

    2024年02月13日
    浏览(55)
  • 手把手教你通过 Docker 部署前后端分离项目(亲测可用)

    安装Docker 安装Nginx 安装Mysql 部署SpringBoot项目 部署Vue项目 一、安装Docker 1、安装: 2、启动/停止/重启docker服务 3、查看docker版本信息 4、运行helloword,因为不存在此镜像,docker会自动下载运行本镜像 5、查看所有docker镜像 二、安装Nginx 1、拉取Nginx镜像文件 2、查看下载好的镜像

    2023年04月24日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包