项目部署和DevOps
传统的开发模式
在传统的开发模式中,开发的整个过程是按部就班就行:
但是这种模式存在很大的弊端:
1、工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开发人员等待测试反馈bug,也会处于等待状态。
2、线上bug的隐患:项目准备交付时,突然出现了bug,所有人员需要加班、等待问题的处理;
DevOps开发模式
DevOps是Development和Operations两个词的结合,将开发和运维结合起来的模式:
持续集成和持续交付
伴随着DevOps一起出现的两个词就是持续集成和持续交付(部署):
- CI是Continuous Integration(持续集成)
- CD是两种翻译:Continuous Delivery(持续交付)或Continuous Deployment(持续部署)
自动化部署流程
===================
购买云服务器
云服务器我们可以有很多的选择:阿里云、腾讯云、华为云、亚马逊云等,模式都是差不多的。
云服务器基本都是用虚拟主机技术,简单说就是一台台式机,里面有CPU、内存、硬盘,安装一个虚拟化的系统,可以虚拟出多个windows系统(或Linux等其他的),给这个系统特定的CPU算力、内存、硬盘,多个用户可以访问属于自己的系统,不会影响别人的。
这台台式机性能不够了,就往里面直接加CPU内存硬盘就可以了,就可以不断虚拟出这些系统。
甚至多台台式机组合起来,共享CPU算力内存和硬盘,最大化利用。
这些虚拟出来的单个系统,就是云服务器ECS实例。一个系统就是1个实例。
购买云服务器其实是购买一个实例。
基础配置
包年包月:买一段时间的云服务器,期间内无限使用,一般这样会比按量付费跟划算(相同时间内)
按量付费:就是按小时或者流量计费,适合短期内测试使用,比如我就用2个小时,比包年包月更便宜,但是你买一年肯定没有包年便宜。
服务器所在地区,看你想哪个地区访问你的服务器快点,就选哪个地区,国内环境都差不多。
规格,就是选:
多少核的CPU:越多核性能越好越贵。
多大内存:越大越贵,部署的项目运行时会占内存,项目越大占得越多;用户访问你的项目,会消耗一定的内存提供计算,因此用户量越多,需要的内存越高。
哪些型号:规格族、实例规格,就是用的CPU型号会不一样,性能偏向不一样,处理器频率不一样,有的CPU偏向计算
内网带宽:同个地区的2台服务器相互访问时,最高能提供的速度
镜像,就是安装什么系统,比如Windows Server、Linux、CentOS等
Windows Server 是我们用的Windows 的服务器版,带服务器管理的很多软件,操作更接近windows的操作习惯,更容易上手。
CentOS等Linux,和Windows的操作方式不一样,有一定的门槛,但性能更好,也更稳定,而且可以用很多工具直接批量安装开发所需的软件,而Windows 要一个一个手动安装。
就是硬盘,你要多大的硬盘,但操作系统本身会占用空间
快照,就是每隔一段时间100%备份你的系统,然后保存起来,你可以随时把系统还原到你备份的这个状态,包括里面安装的软件、数据库等,就像拍照一样,给你的系统拍个照。
但快照一般都是要额外收费的,而且按你系统所使用的大小收费,持续收费。
网络和安全组
让你选择网络,这里一般是指一个公网IP,只要你一直购买这台云服务器,这个IP就暂时属于你,不会变的。你可以直接通过这个IP连上服务器。
一般我们从移动、联通、电信购买的网络,你的IP地址是动态给你分配的,一般2-3天可能会变一次。
带宽,就是我们直接访问服务器的速度,一般我们从移动、联通、电信购买的网络大部分都是100M,而云服务器提供的带宽都比较低,而且很贵!
我们访问服务器的速度,是取决于两者的最低速度。
安全组,就是你的云服务器打算对外开放哪些端口号,比如http网页是80端口,https是443,想连上云服务器的MySQL数据库一般是3306端口等等。
入方向,就是你访问服务器端口,哪些端口是不允许访问,哪些是允许访问,一般只开放你允许访问的,比如网页就是80,和你部署的测试服务器的端口
出方向,就是服务器返回给你数据,一般是全部都可以出,你只需要设置好入方向即可。
源:指哪些ip地址可以访问这个端口,0.0.0.0表示不限制
登录凭证,就是你想怎么样远程连接服务器,一般通过账号密码的方式
买完后一般可以在实例里面看到自己的云服务器,可以控制开关机、查看运行信息等等
搭建服务器环境
1、jenkins自动化部署
安装Java环境
Windows:运行,输入mstsc,远程连接,然后访问Java官网,下载安装包,安装
Linux系:
通过命令控制台,输入下面,远程连接云服务器(Linux系的系统一般没有UI界面,只能打命令)
ssl 云服务器账号@IP地址
Jenkins本身是依赖Java的,所以我们需要先安装Java环境:
# 1、用dnf这个CentOS 8.0以上版本自带的工具,搜索工具里面库有没有Java
dnf search java-1.8
# 2、一般能搜索到这个,安装 java-1.8.0-openjdk.x86_64
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、用wget工具,下载jenkins,到目录/etc/yum.repos.d/jenkins.repo
wget –O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
# 2、导入GPG密钥以确保您的软件合法,否则可能系统不允许你随随便便安装其他东西
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
# 或者
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
编辑一下文件/etc/yum.repos.d/jenkins.repo,可以通过vim编辑,去掉baseurl后面redhat-stable中的-stable,保存
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1
安装Jenkins
dnf install jenkins # --nogpgcheck(可以不加)
启动Jenkins的服务
Windows:
Linux系:
# 启动
systemctl start jenkins
# 查看jenkins的状态
systemctl status jenkins
# 设置jenkins开机启动
systemctl enable jenkins
Jenkins有友好的图形化界面,默认使用8080端口提供服务,所以你的云服务器,需要把8080端口加入到安全组中,
然后用我们自己的电脑,访问
这个界面告诉你,jenkins藏了一个密码在服务器上,地址已经给你了,你通过获取这个文件,拿到里面的密码,填在这里
就会进入安装插件,可以安装推荐的插件。
3.1.3. Jenkins用户
我们后面会访问centos中的某些文件夹,默认Jenkins使用的用户是 jenkins
,可能会没有访问权限,所以我们需要修改一下它的用户:
修改文件的路径:/etc/sysconfig/jenkins
之后需要重启一下Jenkins:
systemctl restart jenkins
3.1.4. Jenkins配置
打开浏览器,输入:http://8.134.60.235:8080/
- 注意:你输入自己的IP地址
获取输入管理员密码:
- 在下面的地址中
cat /var/lib/jenkins/secrets/initialAdminPassword
可以安装推荐的插件:
3.1.5. Jenkins任务
新建任务:
配置项目和保留策略:
源码管理:
构建触发器:
这里的触发器规则是这样的:
- 定时字符串从左往右分别是:分 时 日 月 周
#每半小时构建一次OR每半小时检查一次远程代码分支,有更新则构建
H/30 * * * *
#每两小时构建一次OR每两小时检查一次远程代码分支,有更新则构建
H H/2 * * *
#每天凌晨两点定时构建
H 2 * * *
#每月15号执行构建
H H 15 * *
#工作日,上午9点整执行
H 9 * * 1-5
#每周1,3,5,从8:30开始,截止19:30,每4小时30分构建一次
H/30 8-20/4 * * 1,3,5
构建环境:
注意:我们需要搭建Node的环境
- 第一步:配置Node的环境;
- 第二步:安装Node的插件;
第一步:配置Node的环境
第二步:安装Node的插件
- 这里因为我已经安装过了,所以没有搜索到;
构建执行的任务:
- 查看Node的版本等是否有问题;
- 执行
npm install
安装项目的依赖; - 移除原来mall_cms文件的所有内容;
- 将打包的dist文件夹内容移动到mall_cms文件夹;
pwd
node -v
npm -v
npm install
npm run build
pwd
echo '构建成功'
ls
# 删除/root/mall_cms文件夹里所有的内容
rm -rf /root/mall_cms/*
cp -rf ./dist/* /root/mall_cms/
2、nginx安装和配置
查看:https://www.yuque.com/yejielin/mypn47/ey4viu
3.2.1. 安装nginx
后续我们部署会使用nginx,所以需要先安装一下nginx:
dnf install nginx
启动nginx:
systemctl start nginx
systemctl status nginx
systemctl enable nginx
3.2.2. 配置nginx
我们这里主要配置nginx的用户和默认访问目录:
配置用户:
通过Linux命令创建文件夹和文件:
mkdir /root/mall_cms
cd /root/mall_cms
touch index.html
vi index.html
配置访问目录: