Jenkins+Gitee+Docker+Ruoyi项目前后端分离部署

news2024/12/25 16:10:07

前言

描述:本文主要是用来记录 如何用标题上的技术,部署到云服务器上通过ip正常访问。

一、总览

1.1、Docker做的事

  • 拉取 mysql 镜像
  • 拉取 redis 镜像
  • 拉取 jdk 镜像
  • 拉取 nginx 镜像

解释说明:前端项目的打包文件放在 nginx容器运行。后端的jar包放在jdk容器运行。另外两个是后端项目需要用到的数据库。

1.2、Jenkins做的事

解释说明:去 Gitee仓库拉取源代码,自动化构建、打包、部署到云服务器上运行。

二、Docker 实战

2.1 拉取 mysql 镜像

命令如下所示:

# 拉取镜像
docker pull mysql:8.0
# 启动命令
docker run -p 3306:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=000000 -d mysql:8.0

通过远程连接工具,测试mysql是否创建成功,然后创建数据库,导入数据表。

需要在后端的 ruoyi-admin模块的某个配置文件内,修改相关配置,包括url、端口号、账户、密码。

2.2 拉取 redis 镜像

命令如下所示:

# 拉取镜像
docker pull redis
2.2.1 配置文件

(1)创建目录

mkdir -p /docker/redis 
mkdir -p /docker/redis/data 
touch /docker/redis/redis.conf 
touch /docker/redis/redis.bash

(2)编辑配置文件 vim /docker/redis/redis.conf

# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no

# 指定Redis监听端口,默认端口为6379
port 6379

# 绑定的主机地址,不要绑定容器的本地127.0.0.1地址,因为这样就无法在容器外部访问
bind 0.0.0.0

#需要密码则打开
requirepass 000000

# 持久化
appendonly yes

(3)编辑bash文件 - vi /docker/redis/redis.bash

docker run -p 6379:6379 --name redis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf 

(4)开放执行权限

chmod 777 /docker/redis/redis.bash

(5)修改代码配置文件
需要在后端的 ruoyi-admin模块的某个配置文件内,修改相关配置,包括url、端口号、账户、密码。

2.3 拉取 jdk 镜像

# 拉取 jdk 镜像
docker pull kdvolder/jdk8

(2)前提:需要把jar包放在 /root/ruoyi-admin/target目录下(可自定义->配合启动命令即可)

(3)编辑bash文件 - vi /docker/ruoyi-admin/ruoyi-admin.bash

docker stop ruoyi-admin;docker rm ruoyi-admin;docker run -d --restart=always -v /root/ruoyi-admin/target:/jar -v /home/ruoyi/logs:/home/ruoyi/logs -p 8080:8080 --name ruoyi-admin kdvolder/jdk8 /usr/bin/java -jar -Duser.timezone=GMT+08 /jar/ruoyi-admin.jar

(4)开放执行权限

chmod 777 /docker/ruoyi-admin/ruoyi-admin.bash

(5)执行命令

/docker/ruoyi-admin/ruoyi-admin.bash

2.4 拉取 nginx 镜像

# 拉取镜像
docker pull nginx

(2)创建bash文件- vi /docker/ruoyi-ui/ruoyi-ui.bash

cp -rf /root/nginx/* /mydata/nginx/html;docker stop ruoyi-ui;docker rm ruoyi-ui;docker run -d --privileged=true --name ruoyi-ui -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf -p 80:80 nginx

解释:为什么要先复制一下文件,因为Jenkins那边构建好了,传送文件过来就是/root目录下,所以本人给它复制到我规定的目录下。

(3)创建配置文件

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;
		charset utf-8;

		location / {
            root   /usr/share/nginx/html;
	        try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
    	error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

解释:需要注意 root /usr/share/nginx/html;配置,需要对应启动命令里面容器内部存放的实际路径。本人因为设置成外部路径,然后通过ip访问遇到500 Internal Server Error的错误。

二、Jenkins 实战

实验环境:Windows 安装的 Jenkins 安装包

启动命令:在安装包所在目录下:java -jar jenkins.war 启动,通过端口号访问。具体的使用方法不在此文赘述。

描述:本次实验中没有用到流水线,通过安装插件,后端创建 maven 的项目 ,前端创建 freeStyle project。
在这里插入图片描述

2.1 安装的插件如下所示:

  • Maven Integration plugin
    • 描述:主要是后端构建用到
  • Publish Over SSH
    • 描述:推送文件到远程服务器
  • NodeJS Plugin
    • 描述:主要是前端构建需要用到

(1)安装完Publish Over SSH插件后,需要在 Manage Jenkins-> Jenkins下面配置远程服务器的信息

(2)安装完 NodeJS Plugin 以后,需要在 Manage Jenkins->Tools 配置 windows实际安装的 node路径即可。(顺便把 Maven 的安装路径也配置一下)

2.2 构建后端

构建一个 maven 项目即可。

2.2.1 填写源码仓库信息


解释:第二个框指的是 gitee 上面的仓库地址。

2.2.2 Post Steps设置

(1)勾选 SSH 设置

(2)填写包路径配置信息

描述:

  • 第一个配置是选择jenkins系统配置的ssh服务器
  • 第二个指 后端项目打包后的路径和文件
  • 第三个指 远程服务器 执行的命令

(3)保存以后,构建即可。

声明:如果构建失败,有可能是配置出问题,这个需要自己排查了。本文主要记录个大概思路,也许会漏掉一些细节,导致最后实验失败。

(4)如果构建成功,检查云服务器的docker容器是否启动。浏览器访问路径ip:port,即可。

2.3 构建前端

(1)创建一个 freestyle project 项目。

(2)配置源码管理,如上面后端所示:

(3)构建环境,勾选Provide Node & npm bin/ folder to PATH,需要安装上面的插件,才会有这个选项
(4)Build Steps:由于我是windows环境,这里需要新增 Execute Windows batch command,在方框下输入构建命令 npm install --registry=https://registry.npmmirror.com & npm run build:stage,如下图所示:

(5)构建后操作:配置ssh服务器以及相关命令
需要新增勾选 Send build artifacts over SSH,配置信息如下图所示:

解释:主要是告诉它,构建后的目录是什么,需要过滤掉 dist目录,以及最后存放在远程服务器的nginx目录下,最后发送完文件后,执行 bash脚本命令。

(6)保存后,点击Build Now即可。测试路径是IP:Port即可,前端一般是默认80端口,用ip访问即可。
当很重要的是在前端代码里面,需要把ip改成后端实际服务的ip。
提示:更改文件是 .env.staging文件的 VUE_APP_BASE_API = 'IP:Port'

总结

整个构建过程大概就是这样。全部完成以后,就可以通过jenkins完成一整套的流程了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时间在情绪周期视角来看也是不存在的

在交易软件里我们会发现有交易周期,分钟级别,小时级别,天,周,月,年等。对于超短线而言这些周期没有任何意义,换言之时间这个东西不是一个维度,所以你去用时间选出来的股票那代表什么…

以“窖主节”之名,泸州老窖邀你赴一场“浓烈”的约会

“永远不要低估一颗浓烈的心。” 最近,在河北秦皇岛海边沙滩上,一座“双手碰杯”的艺术装置吸引了不少来自天南海北的游客打卡拍照。原来,这是泸州老窖“窖主节”秦皇岛站的活动主题打卡点。 9月15日—17日,为期三天的泸州老窖“…

【VisualStudio】NuGet包管理器下载缓存packages文件夹过大怎么清理

使用Visual Studio 开发工具时间长了,会发现整个项目的总大小越来越大,默认是存放在电脑系统盘里的,随着Windows11系统常常更新重启,导致系统盘闲置空间越来越小,该怎么办呢。 描述问题 整个解决方案项目会越变越大&…

MURD560-ASEMI超快恢复二极管MURD560

编辑:ll MURD560-ASEMI超快恢复二极管MURD560 型号:MURD560 品牌:ASEMI 封装:TO-252 正向电流:5A 反向电压:600V 引线数量:3 芯片个数:1 芯片尺寸:74MIL 漏电流…

Spring Cloud Alibaba Ribbon负载均衡器

文章目录 Ribbon 负载均衡器环境搭建1.依赖2.配置3.修改其默认的负载均衡策略3.1 验证 4.创建自定义的Rule4.1 MyRule()4.2 在配置config类中配置 5.饥饿加载6.我只想访问不想被别的访问 Ribbon 负载均衡器 背景 Ribbon 是一个用于客户端负载均衡的开源…

云原生容器平台——新华资产数字化转型加速器

新华资产管理股份有限公司(以下简称“新华资产”)于2006年5月经中国保险监督管理委员会批准、7月3日正式挂牌成立,是国内首批专业保险资产管理机构。2020年上半年,公司管理的资产规模突破万亿元人民币,投资收益水平居行…

Gin学习记录4——Controller和中间件

一. Controller 用不同的Controller可以实现业务的分类,不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装,直接将ctrl的代码写入到一个文件里然后调用: package adminimport ("net/http""git…

天猫健康“小补点”掀起养生新趋势,燕窝、自在水搭着喝双倍补

长时间对着电脑、一坐就是一天、想运动却挤不出时间……这几乎是大部分职场人的常态。为了守护健康,许多职场人开始探索便捷、有效的养生方式。 顺应这一需求,天猫健康发起“带薪养生小补点”活动,携手新加坡健康品牌余仁生、元气森林旗下品…

爬虫 — Scrapy 框架(二)

目录 一、Scrapy 核心文件1、spider2、Request3、构造 post 请求4、response 二、案例三、Scrapy 下载中间件1、执行顺序2、使用方法3、Download Middlewares 默认方法4、代理 IP4.1、工作原理4.2、分类4.3、查看 IP 地址4.4、常用代理 四、Scrapy 爬虫中间件五、Scrapy 下载图…

基础课-解析几何

1.平面直角坐标系 两点A(x1,y1)与B(x2,y2)之间的距离: 2.两点斜率公式 3.点到直线的距离 平行线之间的距离 4.平面直线方程的几种形式 点斜式 点P(x0,y0),斜率为k的直线方程:y-y0k(x-x0) 5.圆

会员管理系统H5-01会员开卡

我们前边7篇文章讲解的是PC端的功能,还需要为商家提供一套移动端的后台管理程序。在微搭中,移动端的后台程序我们可以使用H5进行开发,开发完毕后可以启用登录,这样管理员就可以在手机上进行操作。 01 创建应用 登录微搭后台&…

企业选择预测性维护解决方案的常见问题和PreMaint的策略

预测性维护技术在现代制造业中扮演着越来越重要的角色,有助于提高设备可靠性、降低维护成本并最大程度地减少停机时间。然而,一些企业在选择预测性维护解决方案时仍存在一些常见问题和误解。在这篇文章中,我们将探讨一些常见问题,…

Python与数据分析--Matplotlib-1

目录 1.Matplotlib库函数导入 2.简单尝试绘图 3.绘制多条折线图 4.绘制多种颜色风格曲线 5.图片内容文本操作实例 6.图例设置实例 7.坐标轴设置实例 1.Matplotlib库函数导入 #导入matplotlib库 import matplotlib as mpl import matplotlib.pyplot as plt #平常一般用第…

手把手教你前端 NodeJs 常用技术和第三方库使用详细教程(每周更新中)

dotenv 加载环境变量 dotenv是一个用于在Node.js项目中加载环境变量的库。它允许你将环境变量存储在一个名为.env的文件中,并在你的应用程序中轻松访问这些变量。 dotenv 官方网站:https://www.dotenv.org/docs 要使用dotenv,你需要首先在你…

(2023,微调节,多纵横比训练,细化模型)SDXL:用于高分辨率图像合成的改进的潜在扩散模型

SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 公众号:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. 改进稳定扩散 2.1 架构与规模 …

Python基础数据结构入门必读指南

更多资料获取 作者主页:涛哥聊Python 个人网站:涛哥聊Python 大家好,我是涛哥,今天为大家分享的是Python中常见的数据结构。 1.数组 含义:数组是一种有序的数据结构,其中的元素可以按照索引来访问。数组…

DMNet复现(二)之模型篇:Density map guided object detection in aerial image

以前用Swin Transformer Tiny训练了40epoch的,官方用的Faster RCNN,这里先用Swin Transformer Tiny进行测试。 模型训练 采用基于MMDetection的框架Swin Transformer Tiny进行训练,训练方法可参考官方教程。 融合检测 Global Image 检测 …

无涯教程-JavaScript - SEC函数

描述 SEC函数返回Angular的割线。 语法 SEC (number)争论 Argument描述Required/OptionalNumberNumber is the angle in radians for which you want the secant.Required Notes 数字的绝对值必须小于2 ^ 27 如果Angular为度,则将Angular乘以PI()/180或使用RADIANS函数将…

彻底学会Unity中UGUI中UI元素自适应问题

彻底学会Unity中UGUI中UI元素自适应问题 包会的简单版教程 狂飙模式: 经过自我进化学习,终于参悟。看完这个教程,你也可以! 1.扫盲UGUI的理解: Unity3d 中的UI都是画在画布上的。就像画一幅画,首先我们需…

iPhone NFC 设置教程(门禁卡/公交卡/校园卡等等)

苹果手机如何开启NFC功能呢?相信不少小伙伴都对iPhone手机里的NFC用法都不太了解。尽管小米、华为、荣耀、一加、oppo、vivo等安卓手机的NFC使用已经满大街了,不仅功能齐全而且快捷安全,但是这一功能在苹果手机上还很鸡肋,因为它对…