第 1 章 部署基础知识
1.1 部署基础
学习目标:
了解 传统项目生命周期的阶段特点
了解 新型项目生命周期的特点
了解 部署方案的一般流程
1.1.1 项目生命周期
世间万物皆有其生命,软件项目也是如此。随着互联 的发展,软件项目的生命周期也发生了很大的变化,为了更好的让大家理解软件项目,项目生命周期有狭义[具体]、广义[缘起/缘灭]之分,我们一般所说的项目生命周期主要指的是狭义的项目生命周期,我们以传统的软件项目为例进行介绍。
传统项目生命周期
对于传统软件项目来说,它主要包含以下五个阶段:
1 调研阶段 2 设计阶段
目的:居安思危 目的:方案可视化
人员:相关人员,侧重于产品经理 人员:产品团队主导,开发、测试、运维参与
节点:多角度思路/方案,最后领导拍板 节点:产品需求文档、项目里程表
3 开发阶段 4 测试阶段
目的:方案运行 目的:保证项目功能完善
人员:开发团队为主,运维团队参与 人员:测试团队为主,运维、开发参与
节点:阶段项目正常运行 节点:项目功能符合要求
5 运营阶段
目的:项目部署+运行维护
人员:运营团队为主、开发/产品团队参与
节点:项目终止、功能迭代等
新型项目生命周期
1.1.2 项目部署
对于一个软件项目的部署来说,我们主要考虑两方面:
部署流程–基于项目功能,设计合理的部署方案;部署项目–结合部署方案,实现顺畅的项目部署
我们在这一节主要关注部署流程,而部署项目相关知识我们在第4章来进行学习。
关于部署流程,主要包含以下两个方面:部署方案、部署环境
部署方案
为了实现顺畅的项目部署,我们一般会在部署操作的时候,按照既定的部署方案有计划的实施下去。那么部署方案是怎么设计出来的呢/p>
1 分析项目的产品需求文档,获取项目的主旨,定好部署方案的方向
2 分析项目开发文档,按照功能边界,设计部署的结点
3 分析边界功能,调研功能软件,合理的取舍,选符合当前业务场景的
4 梳理项目部署涉及到的部署软件实现方案,根据2确定的结点,确定初版部署方案
5 根据项目实际情况,调整优化并确定项目部署方案。
附:初版部署方案如何确定最终项目部署方案,请关注第5章内容。
部署环境
根据我们对项目生命周期的理解,一个项目需要经历多个团队的工作,才能最终形成一个成品,也就是说开发好的项目需要在多个阶段环境中按照我们的部署方案部署项目,而每个阶段的环境都是有特殊作用的,那么接下来我们来学习一下项目发布过程中所涉及到的五个环境:
个人开发环境
工作人员:自己
工作平台:个人笔记本、公司配的电脑
平台特点:环境是自己配的,团队中不同的个人开发环境可以不一样
工作内容:项目的子模块,子功能
完成标准:完成领导安排的内容[项目的功能子模块开发]
公司开发环境
工作人员:开发团队
工作平台:公司内部服务器
平台特点:服务器环境和线上的服务器环境完全一致
工作内容:项目子模块间的功能联调
完成标准:项目阶段开发、调试完成
项目测试环境
工作人员:测试团队
工作平台:公司内部服务器
平台特点:服务器环境和线上的服务器环境完全一致
工作内容:项目功能/非功能/探索等测试
完成标准:项目阶段功能正常运行
项目预发布环境
工作人员:运维团队
工作平台:公司线上服务器组中的一台
平台特点:服务器环境和线上的服务器环境完全一致
工作内容:特殊功能测试(比如支付)、数据压力测试、其他安全测试等
完成标准:项目阶段功能正常运行,最后一道防线
项目线上环境
工作人员:运维团队
工作平台:公司线上服务器组
平台特点:标准线上的服务器环境
工作内容:代码部署和维护
完成标准:项目正常运行
第 2 章 Nginx进阶
2.1 Nginx快速入门
学习目标:
应用 nginx环境部署
记住 nginx配置结构及其访问原理
应用 server配置段常见配置项
应用 location配置格式
了解 location配置规则的优先级
2.1.1 Nginx简介
Nginx(发音同 engine x)是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛索耶夫)所开发,最初供俄国大型 站Rambler.ru及搜寻引擎Rambler使用。
Nginx特点
优点:
高并发量:基于 epoll/kqueue 模型开发,支持高并发量,官方说其支持高达 5w 并发连接数的响应
内存消耗少:善于处理静态文件,相较于其他web(比如:apache),占用更少的内存及资源
简单稳定:配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定
模块化程度高:功能模块插件化设计,可以自由配置相应的功能。
支持Rwrite重写规则:能够根据域名、URL等请求关键点,实现定制化的高质量分发。
低成本:Nginx的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低。
支持多系统:Nginx代码完全用C语言从头写成,可以在各系统上编译并使用。
缺点:
动态处理差:nginx善于处理静态文件,但是处理动态页面相较于Apache之类重量级的web软件能力稍欠缺。
rewrite弱:虽然nginx支持rewrite功能多,但是相较于Apache之类重量级的web软件能力稍欠缺。
2.1.2 Nginx部署
Nginx软件部署
安装Nginx软件
方法一:快
apt-get install -y build-essential libssl-dev libtool libpcre3 libpcre3-dev make openssl zlib1g-dev
apt-get install nginx -y
方法二:定制标准高
编译安装,请关注后续”shell自动化运维”课程
检查效果:
netstat -tnulp | grep nginx
浏览器查看
服务相关命令
systemctl start|stop|reload|… nginx
/etc/init.d/nginx start|stop|reload|…
/usr/sbin/nginx …
nginx -V
nginx服务相关命令
nginx -V
nginx -v
nginx -s stop
nginx -s reload
nginx -t 检查默认配置文件
nginx -t -c file.conf 指定配置文件进行检查
移除相关命令:
查看和nginx相关软件
dpkg –get-selections|grep nginx
移除nginx,包括相关文件
apt-get –purge remove nginx
apt-get –purge remove nginx-common
apt-get –purge remove nginx-core
Nginx配置简介
nginx软件目录:
工作目录:/etc/nginx
执行文件: /usr/sbin/nginx
日志目录:/var/log/nginx
启动文件:/etc/init.d/nginx
web目录:/var/www/html/,首页文件是index.nginx-debian.html
/usr/share/nginx/html/ 首页文件是index.html
nginx配置文件:
默认文件:
/etc/nginx/nginx.conf
其他目录:
/etc/nginx/{sites-available/sites-enabled/conf.d}
文件结构:
全局配置段
http配置段
server配置段 项目或者应用
location配置段 url配置
Nginx访问原理
2.1.3 配置详解
全局配置段
主要是全局性的和服务级别的属性配置,常见的主要有以下几种设置:
user 设置使用用户(worker)
worker_processes 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
error_log nginx的错误日志
pid nginx服务启动时候pid
events 定义事件相关的属性
worker_connections 一个进程允许处理的最大连接数
use 定义使用的内核模型
http配置段
主要配置server通用的一些配置
include mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
sendfile on; # 开启高效文件传输模式。
autoindex on; # 开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; # 防止 络阻塞
tcp_nodelay on; # 防止 络阻塞
keepalive_timeout 120; # 长连接超时时间,单位是秒
gzip on; # 开启gzip压缩输出
Server常见配置属性
常见样式
server {
listen 端口;
server_name 主机名;
…
}
server配置段最重要的属性是listen和server_name。它们都是用于匹配并处理请求的。
listen属性
作用:定义Server监听的ip和port,当ip/port匹配时候才进行下一步匹配
表现形式:
形式 |
描述 |
示例 |
完整示例 |
IP:Port |
地址精确表示样式 |
listen 10.10.10.10:99 |
listen 10.10.10.10:99 |
IP |
自动监听 IP:80地址 |
listen 10.10.10.10 |
listen 10.10.10.10:80 |
Port |
自动监听 全地址:Port |
listen 99或 [::]:99 |
listen 0.0.0.0:99 |
default_server |
自动使用默认的地址 |
listen default_server |
listen localhost:80 |
使用原则:
首先将所有样式补全成IP:Port,然后匹配,匹配Server多,那么接着使用Server_name匹配
server_name属性
作用:定义Server监听的域名,当域名匹配时候才进行下一步操作
表现形式:
格式 |
完整样式 |
前缀正则样式 |
后缀正则样式 |
禁止非法域名或IP |
形式 |
www.example.com |
*.example.com |
www.example.* |
_ |
使用原则:
优先使用完整样式,然后使用前缀正则样式,最后使用后缀正则样式,如果正则样式相同的时候,匹配最长,否则就走非法规则。
非法域名/IP,表示请求到该主机上一个不存在的IP或者域名
root属性
作用:定义Server相应请求的html文件所在路径
表现形式:
root /var/www/html;
index属性
作用:定义响应请求后返回的文件名称或格式
表现形式:
index index.html index.htm index.nginx-debian.html;
return属性
作用:定义响应请求后返回的http状态码
表现形式:
return 444;
location常见配置属性
location主要是根据Server匹配到的请求路径和关键字去响应和处理。
语法:
location optional_modifier location_match { … }
location @name { … }
其中:optional_modifier是匹配条件,location_match是匹配的样式,{}是要执行的操作。匹配条件主要有两种:正则/前缀字符。
匹配规则
正则匹配
类型 |
含义 |
匹配方式 |
优先级 |
样式 |
~|!~ |
普通正则-敏感|不敏感 |
正则符 |
3 |
location ~ .(jpe)$ {} |
~*|!~* |
普通正则-不敏感|敏感 |
正则符 |
3 |
location ~* .(jpe)$ {} |
普通匹配
类型 |
含义 |
匹配方式 |
优先级 |
样式 |
=/路径 |
精确匹配 |
前缀 |
1 |
location = /image {} |
^~ |
优先匹配 |
前缀 |
2 |
location ^~ /page {} |
@ |
内部重定向 |
前缀 |
location @name {} |
|
空 / |
通用匹配 |
前缀 |
4 |
location / {} |
使用原则:
前提:根据请求url,获取uri即除了域名/IP之外的部分,用于location匹配
如果有精确匹配,即 =/路径,找到匹配项后,结束匹配。
location = 路径 {} 或者 location 完整路径 {}
如果有优先匹配,即 ^~,找到匹配项后,结束匹配。
location ^~ 路径
如果有正则匹配,即 ~|!~|~*|!~*,找到匹配项后,不会终止继续匹配,直到找到合适的
location ~* 正则字符 {}
如果匹配到多个,则使用location_match最长的。
匹配示例
常见示例:
location = / { location ~ .(gif|jpg|png|js|css)$ { location !~* .xhtml$ {
#精确规则A #正则规则D #正则规则G
} } }
location = /login { location ~* .png$ { location / {
#精确规则B #正则规则E &
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!