基于CentOS的Docker + Nginx + Gitee + Jenkins部署总结

一、部署环境概述

本文阐述在CentOS系统上运用PowerShell命令部署Docker、Nginx、Gitee(文中未详细提及Gitee相关配置,可根据实际情况与其他代码托管平台类比)和Jenkins,实现前端自动化部署的流程,包含从系统环境准备到项目配置与部署的完整步骤。

二、CentOS系统准备

(一)服务器配置

  • 选用CentOS系统,配置为2核CPU、2GB内存、40GB SSD云硬盘系统盘。

(二)安装必要软件(部分)

可以参考手工部署Docker(CentOS 7.5)

  1. 安装Docker
  • 可能需要管理员权限,若提示权限不足,在命令前添加 sudo
# 安装yum-utils包,为后续安装做准备
yum install -y yum-utils
# 添加Docker稳定仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum缓存
yum makecache fast
# 安装Docker
yum install docker-ce
# 安装后检查docker相关rpm源文件
rpm -qa |grep docker
# 启动docker
systemctl start docker
# 查看docker状态
systemctl status docker
# 开机自启动
systemctl enable docker

安装及启动成功

2. 配置镜像加速器

  1. 登录容器镜像服务控制台。
  2. 在左侧导航栏选择“镜像资源 > 镜像中心”。
  3. 单击“镜像加速器”,在弹框中找到“加速器地址”,单击,将加速器地址复制到剪切板。

4. 登录弹性云服务器。

5. 创建并编辑/etc/docker/daemon.json文件(如果文件不存在,则创建)。vi /etc/docker/daemon.json

6. 在该文件内添加如下内容:

{"registry-mirrors": ["加速器地址"]
}

7. 按Esc键退出编辑模式,并输入**:wq**保存后退出。

8. 重启Docker使配置生效。systemctl restart docker

9. 执行以下命令,当Registry Mirrors字段的地址为加速器的地址时,说明加速器已经配置成功。docker info

3. 安装Docker Compose

  • 下载安装:
curl -SL https://bmshare.oss-cn-beijing.aliyuncs.com/docker/docker-compose/v2.29.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
- 设置`/usr/local/bin/docker-compose`为可执行文件:
sudo chmod +x /usr/local/bin/docker-compose
- 检查安装成功:
docker-compose -v

显示docker-compose的版本号,表示已经成功安装

4. 安装Git(用于与代码仓库交互)

  • 查看可安装版本:
yum list git --showduplicates | sort -r
- 安装:
yum install -y git
- 检查安装成功:
git --version
- 配置密钥(可选操作,用于拉取代码库代码):
ssh-keygen -t rsa -C "root"

按提示一路回车生成id_rsa(私钥)和id_rsa_pub(公钥)如:

三、安装Nginx

  1. 使用docker拉取nginx镜像:
docker pull nginx

2. 创建相关目录:

mkdir /docker 
mkdir /docker/compose 
mkdir /docker/nginx 
mkdir /docker/nginx/conf 
mkdir /docker/html 
mkdir /docker/html/dev 
mkdir /docker/html/release 
mkdir /docker/html/pro

创建docker-compose.ymlnginx.conf配置文件

cd /docker/compose
touch docker-compose.ymlcd /docker/nginx/conf
touch nginx.conf

3. 配置nginx.conf文件(示例配置,可根据实际需求修改):

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;gzip on;#dev环境server {listen 8001;server_name localhost;# access_log logs/dev.access.log main;location / {root /usr/share/nginx/html/dev/dist;# root /home/html/dev/dist;index index.html;try_files $uri $uri/ /index.html;}}#sit环境server {listen 8002;server_name localhost;# access_log logs/sit.access.log main;location / {root /usr/share/nginx/html/sit/dist;# root /home/html/dev/dist;index index.html;try_files $uri $uri/ /index.html;}}# include /etc/nginx/conf.d/*.conf;
}

在服务器控制台安全组配置添加Nginx相关端口(如8080对应后面要安装的jenkins,8001对应dev环境,8002对应sit环境)。可通过云服务提供商的管理界面进行端口配置操作。

4. 编写docker-compose.yml文件(示例,可根据实际需求调整):

version: '3'networks:frontend:external: trueservices:                                      # 容器docker_jenkins:user: root                                 # root权限restart: always                            # 重启方式image: jenkins/jenkins:lts                 # 使用的镜像container_name: jenkins                    # 容器名称environment:- TZ=Asia/Shanghai- "JENKINS_OPTS=--prefix=/jenkins_home" ## 自定义 jenkins 访问前缀(上下文context)ports:                                     # 对外暴露的端口定义- 8080:8080- 50000:50000volumes:                                   # 卷挂载路径- /docker/jenkins_home/:/var/jenkins_home     # 挂载到容器内的jenkins_home目录- /usr/local/bin/docker-compose:/usr/local/bin/docker-composedocker_nginx_dev:                            # nginx-dev环境restart: alwaysimage: nginxcontainer_name: nginx_devports:- 8001:8001volumes:- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /docker/html:/usr/share/nginx/html- /docker/nginx/logs:/var/log/nginxdocker_nginx_sit:                            # nginx-sit环境restart: alwaysimage: nginxcontainer_name: nginx_sitports:- 8002:8002volumes:- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /docker/html:/usr/share/nginx/html- /docker/nginx/logs:/var/log/nginx

配置说明:
docker_jenkins 是一个定义的服务名称。

user: root 指定了 Jenkins 容器使用 root 权限。

restart: always 表示容器总是在退出时重启。

image: jenkins/jenkins:lts 指定了 Jenkins 镜像及其版本。

container_name: jenkins 是容器的名称。

ports 定义了容器内外端口的映射。

volumes 定义了主机文件系统路径与容器内路径的挂载关系。

image: nginx指定了 Nginx 镜像。

container_name: nginx_dev 是容器的名称。

四、安装Jenkins

  1. 拉取Jenkins镜像:
docker pull jenkins/jenkins:lts

  1. 启动Jenkins容器:
  • 若使用docker-compose方式,进入cd /docker/compose/目录(有docker-compose.yml文件的目录),执行:
-启动jenkins和nginx
docker-compose up -d
- 查看运行状态:
docker-compose ps -a

  1. 获取Jenkins初始密码:
cat /docker/jenkins_home/secrets/initialAdminPassword

2. 访问Jenkins页面并登录:浏览器访问服务器地址:8080/jenkins_home,输入初始密码登录。

3. 选择安装推荐的插件

我们选择安装推荐插件

插件安装中

4. 创建一个jenkins账号

后面就一直确定操作

jenkins安装成功

五、Jenkins自动化部署配置

(一)设置中文

找到简体中文语言包插件,但是我安装以后没有效果,先装了再说

安装完成后,重启Jenkins(可在浏览器输入服务器地址:8080/jenkins_home/restart)。

(二)安装Publish Over SSH、NodeJS

  1. Publish Over SSH、NodeJS插件安装

同样的方式这里不再具体操作,【Dashboard】——>【Manage Jenkins】——>【Plugins】——>【Available plugins】,搜索Publish Over SSHNodeJS,安装后重启。

Publish Over SSH插件

NodeJs插件

2. Publish Over SSH配置远程服务器(采用密码验证)

- 找到Publish Over SSH,点击新增

- 在新增面板中输入信息,点击高级,输入密码、服务器端口,点击Test Configuration Success进行测试,显示success则成功,先点击应用,再保存

填完以后点击测试配置Test Configuration,如果向上图所示success就说明配置没有问题

3. NodeJS配置

- 【Dashboard】->【Mange Jenkins】->【Tools】->【NodeJS安装】。

- 点击新增NodeJS,配置安装NodeJS的基本信息(自定义别名、选择安装版本),先点击应用保存

(三)添加凭据

  1. 【Dashboard】->【Manage Jenkins】->【Credentials】,点击添加凭证

点击添加凭证

新增凭证内容

(四)创建Job

  1. 首页右边视图中,点击Create a job或者New Item。

  1. 输入项目名称(如测试项目),选择构建一个自由风格的软件项目,点击确定

2. 配置项目信息(如源码管理中的仓库地址、凭据,构建触发器等),先应用后保存,返回首页,打开项目,点击立即构建,查看控制台输出,确保基础构建成功。

这里git地址项报错,说明下面选择的凭证不对应,我们可以调整凭证信息,直到没有报错

构建成功

(五)Gitee webHooks配置(类比GitHub,Gitee操作可能略有不同)

  1. 安装gitee插件

  1. 在Gitee项目中找到类似Webhooks的设置选项。

2. 设置payload URL,进入当前项目的Build Triggers 选中途中选中的选项,可以看到后面生成的url,这个就是可以填入Gitee的WebHooks的payload URL

获取payload URL

这个就是webhooks里面需要的WebHook 密码/签名密钥

现在请求历史都是报错的

我push了一次代码,发现可以触发jenkins自动构建

成功触发构建

(六)构建环境

在Jenkins中将Node.js和npm的bin文件夹添加到PATH中(具体操作根据Jenkins版本和项目需求而定)。

(七)Build Steps

  1. 源码管理中的Build Steps模块,选择Execute NodeJS script

2. 选择已配置的node版本,这个node版本是在上面我们已经配置过的,如果需要其他版本可通过上面操作新增NodeJs即可。

3. 配置完成后,建议立即构建项目。

(八)shell命令

  1. 选择增加构建步骤,在下拉框选中执行shell

输入查看版本信息和环境变量的指令:

#!/bin/bash
node -v
npm -v
echo $PATH

构建日志打印,出现了node、npm的版本号

构建查看输出后,执行安装依赖、打包、处理压缩文件的脚本(根据项目需求可能需调整,如取消某些依赖安装命令的注释):

#!/bin/bash
node -v
npm -v
npm install
# npm i esbuild-linux-64@0.13.4 -D (根据项目需求决定是否取消注释)
echo "依赖安装成功"
npm run build
echo "打包成功"
rm -rf dist.tar
tar -zcvf dist.tar./dist
echo $PATH

先应用后保存,立即构建

(九)自动部署到对应环境项目目录

上面打包到了Jenkins中的workspace中,但是我们设置的项目环境路径跟这个不同,比如开发环境项目目录是/docker/html/dev/dist/,所以需要打包后,把dist文件内容推送到/docker/html/dev/dist/目录下。

  1. 选择增加构建步骤,选择Send files or execute commands over SSH

  1. 填写参数:
  • Source filesdist.tar(相对于项目workspace目录)。
  • Remove prefix:无需设置(本案例为根目录操作)。
  • Remote directory/docker/html/dev(这个文件路径前面已经提前建好了)。
  • Exec command:解压、删除等操作命令(如上述脚本中的cd /docker/html/dev; rm -rf dist/; tar zxvf dist.tar; rm dist.tar)。

2. 再次立即构建,打开服务器地址:8001(上面nginx设置的dev环境下端口号是8001)查看部署项目。

请注意,在实际操作中,部分步骤可能需要根据具体的软件版本、服务器环境和项目需求进行适当调整。同时,对于涉及到与云服务提供商(如安全组配置)、代码托管平台(如Gitee的Webhooks设置)以及Jenkins插件接口的操作,可能需要进一步参考相关平台的文档和接口说明来确保准确配置。


以上内容参考以下文章:

手工部署Docker(CentOS 7.5)

Docker + Jenkins + Nginx实现前端自动化部署

云部署:阿里云Jenkins+ Gitee构建自动化部署

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

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

相关文章

OpenCV调整图像亮度和对比度

【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、基本方法---线性变换 // 亮度和对比度调整 cv::Mat adjustBrightnessContrast(const cv::Mat& src, double alpha, int beta) {cv::Mat dst;src.convertTo(dst, -1, alpha, beta);return dst; }// 使用…

《机器学习》——逻辑回归(下采样)

文章目录 什么是下采样?为什么在逻辑回归中要使用下采样?使用下采样和不使用下采样的区别实例1、实例内容2、实例步骤 什么是下采样? 下采样(Down - Sampling)是一种数据处理技术,主要用于处理数据集中不同…

Python实现接口签名调用

目录: 1、第三方接口签名调用2、调用结果 1、第三方接口签名调用 import json import requests import hashlib import time import hmac access_key xxxxxxxxxxxxxxx secret_key xxxxxxxxxxxxxxx # 应用信息 def _wps4_sig(method, url, date, body): print(body)if bod…

什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系

我不知道有多少人和我一样,没学习过.netCore,想要学习,但是版本号太多就蒙了,不知道学什么了,这里解释下各个版本的关系 我们一般开始学习微软的时候,都是开始学习的.netframework,常用的就是4…

对比式机器学习揭示了跨物种共享和特异性的脑功能结构|文献速递-视觉大模型医疗图像应用

Title 题目 Contrastive machine learning reveals species -shared and -specific brain functional architecture 对比式机器学习揭示了跨物种共享和特异性的脑功能结构 01 文献速递介绍 猕猴被广泛作为人类的动物模型,用于研究大脑和行为的关键方面&#xf…

中药和西药的区别

中药和西药的区别 一、定义与来源 (一)中药 中药主要是在中国传统医学理论指导下用于预防、诊断、治疗疾病或调节人体机能的药物。它的来源广泛,包括植物药、动物药、矿物药等。植物药是中药的主要组成部分,例如人参&#xff0…

PostgreSQL学习笔记(一):PostgreSQL介绍和安装

目录 概念 PostgreSQL简介 PostgreSQL的关键特性 1. 标准兼容性 2. 扩展性 3. 数据完整性和可靠性 4. 丰富的数据类型 5. 查询能力 6. 事务和并发控制 7. 扩展和插件 8. 跨平台和多语言支持 9. 高可用性和扩展性 常用场景 安装 Linux apt安装 下载安装包安装 客…

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

ABP框架8——仓储的作用及其基础Demo

一、使用仓储的好处 1.提高CRUD接口复用性2.解耦业务逻辑(BLL)和增删改查(CRUD),换ORM特别方便,不需要改应用层,直接改仓储层3.做复杂查询4.事务支持 二、Demo public class BookRepository …

毕设中所学

1、交叉引用 在毕业设计论文Word中交叉引用参考文献_交叉引用如何标注[1~6]-CSDN博客 另:将标号或其他文字改为上标的快捷键是CtrlShift。 图的交叉引用一样,修改引用类型即可。 2、ENVI安装 ENVI5.6 安装教程,新手入门(超详细…

git 问题解决记录

在用git上传文件到仓库中出现了2个问题 第一个问题: 需要修改git的代理端口与电脑自己的代理服务器设置中的端口和VPN的端口保持一致, 比如我的端口是7897,就设置 git config --global http.proxy http://127.0.0.1:7897 git config --glo…

DATACOM-DHCP-复习-实验

DHCP 概述工作原理DHCP分配机制 配置配置基于全局地址池的DHCP服务器配置DHCP Relay中继验证 实验配置DHCP中继 参考 概述 动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和…

RK3588+麒麟国产系统+FPGA+AI在电力和轨道交通视觉与采集系统的应用

工业视觉识别系统厂家提供的功能主要包括: 这些厂家通过先进的视觉识别技术,实现图像的采集、处理与分析。系统能够自动化地完成质量检测、物料分拣、设备监控等任务,显著提升生产效率和产品质量。同时,系统具备高度的灵活性和可扩…

物联网控制期末复习

第3章 物联网控制系统的过程通道设计 3.1 模拟量输出通道 3.1.1单模拟量输出通道的构成 计算机控制系统的模拟量输出通道将计算机产生的数字控制信号转换为模拟信号(电压或电流)作用于执行机构,以实现对被控对象的控制。 多D/A结构&#…

python3中的生成器

一. 简介 前面简单学习了 python3中的迭代器,本文来学习 python3中生成器。 在 Python 中,生成器(Generator)是一种特殊的迭代器,在 Python 中,生成器(Generator)是一种特殊的迭代…

数据库运维学习选择

在如今国产化浪潮澎湃的 IT 领域,数据库运维宛如一座充满机遇的宝藏,等待着新人去挖掘。如果你像曾经的我一样,非科班出身、毫无基础,别慌,我以多年奋战在一线的经验,为你照亮前行的路。 一、基础奠基&…

2501d,jingo优化

原文 大家好,我重构和优化了一下jin.go这里: 我去掉了vibe.d依赖,因为它又慢又大,而且我无法与2版本交朋友.当仅运行1000个vibe纤程时,不仅应用崩溃,甚至图形系统驱动也崩溃一次,这需要重启笔记本电脑. 当前,我用小栈大小的本地流(4kb)解决. 我真很期待photon的稳定性,以恢复支…

js的一些处理

1.翻转字符串 let str abcdef str str.split().reverse().join() console.log(str) 因此想到了我之前写的截取字符串获取参数跳转,在写一遍 let str nameJack&age18&gender男 let list str.split(&); let obj {} list.forEach((v)>{ …

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

node.js之---集群(Cluster)模块

为什么会有集群&#xff08;Cluster&#xff09;模块&#xff1f; 集群&#xff08;Cluster&#xff09;模块的作用 如何使用集群&#xff08;Cluster&#xff09;模块&#xff1f; 为什么会有集群&#xff08;Cluster&#xff09;模块 Node.js 是基于 单线程事件驱动 模型的…