项目部署和DevOps

传统的开发模式

在传统的开发模式中,开发的整个过程是按部就班就行:

image.png

但是这种模式存在很大的弊端:

1、工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开发人员等待测试反馈bug,也会处于等待状态。
2、线上bug的隐患:项目准备交付时,突然出现了bug,所有人员需要加班、等待问题的处理;

DevOps开发模式

DevOps是Development和Operations两个词的结合,将开发和运维结合起来的模式:

项目 - 项目打包和自动化部署 - 图2

image.png

持续集成和持续交付

伴随着DevOps一起出现的两个词就是持续集成和持续交付(部署):

  • CI是Continuous Integration(持续集成)

image.png

  • CD是两种翻译:Continuous Delivery(持续交付)或Continuous Deployment(持续部署)

image.png

项目 - 项目打包和自动化部署 - 图6

自动化部署流程

image.png

===================

购买云服务器

云服务器我们可以有很多的选择:阿里云、腾讯云、华为云、亚马逊云等,模式都是差不多的。

云服务器基本都是用虚拟主机技术,简单说就是一台台式机,里面有CPU、内存、硬盘,安装一个虚拟化的系统,可以虚拟出多个windows系统(或Linux等其他的),给这个系统特定的CPU算力、内存、硬盘,多个用户可以访问属于自己的系统,不会影响别人的。

这台台式机性能不够了,就往里面直接加CPU内存硬盘就可以了,就可以不断虚拟出这些系统。

甚至多台台式机组合起来,共享CPU算力内存和硬盘,最大化利用。

这些虚拟出来的单个系统,就是云服务器ECS实例。一个系统就是1个实例。


购买云服务器其实是购买一个实例。

基础配置

image.png
包年包月:买一段时间的云服务器,期间内无限使用,一般这样会比按量付费跟划算(相同时间内)
按量付费:就是按小时或者流量计费,适合短期内测试使用,比如我就用2个小时,比包年包月更便宜,但是你买一年肯定没有包年便宜。

image.png
服务器所在地区,看你想哪个地区访问你的服务器快点,就选哪个地区,国内环境都差不多。

image.png
规格,就是选:
多少核的CPU:越多核性能越好越贵。

多大内存:越大越贵,部署的项目运行时会占内存,项目越大占得越多;用户访问你的项目,会消耗一定的内存提供计算,因此用户量越多,需要的内存越高。

哪些型号:规格族、实例规格,就是用的CPU型号会不一样,性能偏向不一样,处理器频率不一样,有的CPU偏向计算

内网带宽:同个地区的2台服务器相互访问时,最高能提供的速度

image.png
镜像,就是安装什么系统,比如Windows Server、Linux、CentOS等

Windows Server 是我们用的Windows 的服务器版,带服务器管理的很多软件,操作更接近windows的操作习惯,更容易上手。

CentOS等Linux,和Windows的操作方式不一样,有一定的门槛,但性能更好,也更稳定,而且可以用很多工具直接批量安装开发所需的软件,而Windows 要一个一个手动安装。

image.png
就是硬盘,你要多大的硬盘,但操作系统本身会占用空间

image.png
快照,就是每隔一段时间100%备份你的系统,然后保存起来,你可以随时把系统还原到你备份的这个状态,包括里面安装的软件、数据库等,就像拍照一样,给你的系统拍个照。

但快照一般都是要额外收费的,而且按你系统所使用的大小收费,持续收费。

网络和安全组

image.png
让你选择网络,这里一般是指一个公网IP,只要你一直购买这台云服务器,这个IP就暂时属于你,不会变的。你可以直接通过这个IP连上服务器。

一般我们从移动、联通、电信购买的网络,你的IP地址是动态给你分配的,一般2-3天可能会变一次。

image.png
带宽,就是我们直接访问服务器的速度,一般我们从移动、联通、电信购买的网络大部分都是100M,而云服务器提供的带宽都比较低,而且很贵!
我们访问服务器的速度,是取决于两者的最低速度。

image.png
安全组,就是你的云服务器打算对外开放哪些端口号,比如http网页是80端口,https是443,想连上云服务器的MySQL数据库一般是3306端口等等。
入方向,就是你访问服务器端口,哪些端口是不允许访问,哪些是允许访问,一般只开放你允许访问的,比如网页就是80,和你部署的测试服务器的端口
出方向,就是服务器返回给你数据,一般是全部都可以出,你只需要设置好入方向即可。

源:指哪些ip地址可以访问这个端口,0.0.0.0表示不限制
image.png

image.png
登录凭证,就是你想怎么样远程连接服务器,一般通过账号密码的方式

image.png
买完后一般可以在实例里面看到自己的云服务器,可以控制开关机、查看运行信息等等

搭建服务器环境

1、jenkins自动化部署

安装Java环境

Windows:运行,输入mstsc,远程连接,然后访问Java官网,下载安装包,安装

Linux系:
通过命令控制台,输入下面,远程连接云服务器(Linux系的系统一般没有UI界面,只能打命令)

  1. ssl 云服务器账号@IP地址

Jenkins本身是依赖Java的,所以我们需要先安装Java环境:

  1. # 1、用dnf这个CentOS 8.0以上版本自带的工具,搜索工具里面库有没有Java
  2. dnf search java-1.8
  3. # 2、一般能搜索到这个,安装 java-1.8.0-openjdk.x86_64
  4. dnf install java-1.8.0-openjdk.x86_64

安装Jenkins

Windows: https://www.jenkins.io/zh/download/

Linux系:
因为Jenkins本身是没有在dnf的软件仓库包中的,所以我们需要连接Jenkins仓库:

  • wget是Linux中下载文件的一个工具,-O表示输出到某个文件夹并且命名为什么文件;
  • rpm:全称为The RPM Package Manage,是Linux下一个软件包管理器;
  1. # 1、用wget工具,下载jenkins,到目录/etc/yum.repos.d/jenkins.repo
  2. wget O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
  3. # 2、导入GPG密钥以确保您的软件合法,否则可能系统不允许你随随便便安装其他东西
  4. rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
  5. # 或者
  6. rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

编辑一下文件/etc/yum.repos.d/jenkins.repo,可以通过vim编辑,去掉baseurl后面redhat-stable中的-stable,保存

  1. [jenkins]
  2. name=Jenkins-stable
  3. baseurl=http://pkg.jenkins.io/redhat
  4. gpgcheck=1

安装Jenkins

  1. dnf install jenkins # --nogpgcheck(可以不加)

启动Jenkins的服务

Windows:

Linux系:

  1. # 启动
  2. systemctl start jenkins
  3. # 查看jenkins的状态
  4. systemctl status jenkins
  5. # 设置jenkins开机启动
  6. systemctl enable jenkins

Jenkins有友好的图形化界面,默认使用8080端口提供服务,所以你的云服务器,需要把8080端口加入到安全组中,

项目 - 项目打包和自动化部署 - 图20

然后用我们自己的电脑,访问
image.png
这个界面告诉你,jenkins藏了一个密码在服务器上,地址已经给你了,你通过获取这个文件,拿到里面的密码,填在这里

就会进入安装插件,可以安装推荐的插件。
image.png

image.png

image.png

3.1.3. Jenkins用户

我们后面会访问centos中的某些文件夹,默认Jenkins使用的用户是 jenkins,可能会没有访问权限,所以我们需要修改一下它的用户:

修改文件的路径:/etc/sysconfig/jenkins

项目 - 项目打包和自动化部署 - 图25

之后需要重启一下Jenkins:

  1. systemctl restart jenkins

3.1.4. Jenkins配置

打开浏览器,输入:http://8.134.60.235:8080/

  • 注意:你输入自己的IP地址

获取输入管理员密码:

  • 在下面的地址中 cat /var/lib/jenkins/secrets/initialAdminPassword

image-20201203173047824

可以安装推荐的插件:

项目 - 项目打包和自动化部署 - 图27

3.1.5. Jenkins任务

新建任务:

项目 - 项目打包和自动化部署 - 图28

项目 - 项目打包和自动化部署 - 图29

配置项目和保留策略:

项目 - 项目打包和自动化部署 - 图30

源码管理:

项目 - 项目打包和自动化部署 - 图31

构建触发器:

这里的触发器规则是这样的:

  • 定时字符串从左往右分别是:分 时 日 月 周
  1. #每半小时构建一次OR每半小时检查一次远程代码分支,有更新则构建
  2. H/30 * * * *
  3. #每两小时构建一次OR每两小时检查一次远程代码分支,有更新则构建
  4. H H/2 * * *
  5. #每天凌晨两点定时构建
  6. H 2 * * *
  7. #每月15号执行构建
  8. H H 15 * *
  9. #工作日,上午9点整执行
  10. H 9 * * 1-5
  11. #每周1,3,5,从8:30开始,截止19:30,每4小时30分构建一次
  12. H/30 8-20/4 * * 1,3,5

项目 - 项目打包和自动化部署 - 图32

构建环境:

注意:我们需要搭建Node的环境

  • 第一步:配置Node的环境;
  • 第二步:安装Node的插件;

项目 - 项目打包和自动化部署 - 图33

第一步:配置Node的环境

项目 - 项目打包和自动化部署 - 图34

第二步:安装Node的插件

  • 这里因为我已经安装过了,所以没有搜索到;

项目 - 项目打包和自动化部署 - 图35

构建执行的任务:

  • 查看Node的版本等是否有问题;
  • 执行 npm install 安装项目的依赖;
  • 移除原来mall_cms文件的所有内容;
  • 将打包的dist文件夹内容移动到mall_cms文件夹;
  1. pwd
  2. node -v
  3. npm -v
  4. npm install
  5. npm run build
  6. pwd
  7. echo '构建成功'
  8. ls
  9. # 删除/root/mall_cms文件夹里所有的内容
  10. rm -rf /root/mall_cms/*
  11. cp -rf ./dist/* /root/mall_cms/

项目 - 项目打包和自动化部署 - 图36

2、nginx安装和配置

查看:https://www.yuque.com/yejielin/mypn47/ey4viu

3.2.1. 安装nginx

后续我们部署会使用nginx,所以需要先安装一下nginx:

  1. dnf install nginx

启动nginx:

  1. systemctl start nginx
  2. systemctl status nginx
  3. systemctl enable nginx

3.2.2. 配置nginx

我们这里主要配置nginx的用户和默认访问目录:

配置用户:

项目 - 项目打包和自动化部署 - 图37

通过Linux命令创建文件夹和文件:

  1. mkdir /root/mall_cms
  2. cd /root/mall_cms
  3. touch index.html
  4. vi index.html

配置访问目录:

项目 - 项目打包和自动化部署 - 图38