前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目部署(一)

项目部署(一)

作者头像
小闫同学啊
发布2019-07-18 13:02:23
1.7K0
发布2019-07-18 13:02:23
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共: 6280字 8图 预计阅读时间: 16分钟

每日分享

Victory is in having done your best. If you’ve done your best, you’ve won.

胜利就是尽力而为。 如果你做得最好,你就赢了。

小闫语录

成功的意义不在终点的那一刻,而是这一路上的经历。尽你所能,无怨无悔,虽未到达终点,但是属于你自己的胜利之门却已打开。不求最好,因为没有绝对的最好,我们能做的就是尽力而为,多年以后的回想,尽是释然。

项目部署(一)

1.传统项目生命周期

调研阶段-->设计阶段-->开发阶段-->测试阶段-->运营阶段

关键点:阶段间有前后关系依赖;阶段间项目的推进是由文档来主导的;理想化的生命周期和开发模型。

1.1调研阶段

做市场调研,通过广告投放、数据挖掘数据清洗、爬虫等方式,找到市场上大众的兴趣点,做出迎合大众的项目方案。提供给领导一份可行的方案报告。

1.2设计阶段

将方案可视化,同各部门的负责人共同讨论,研究出产品的需求文档与项目里程表。

1.3开发阶段

基于产品需求文档的功能进行开发,运维团队搭建开发相关环境,后端开发人员进行开发,其他部门参与,保证阶段项目正常运行。

1.4测试阶段

为了保证项目功能完善,由测试团队为主,运维和开发人员为辅,共同完成测试。不断的找bug,由开发人员改bug,反反复复,直至项目功能符合要求。保证产品的阶段功能质量。

1.5运营阶段

为了完成项目部署和项目的运行维护,由运维团队为主,开发、产品团队为辅共同参与完成此阶段。当项目终止,功能迭代等时候,此阶段就结束了。在这一阶段分为前置部署和实际部署阶段。

2.新型项目周期

设计-->开发-->修改测试-->预生产运营阶段-->正式发布-->功能迭代-->运营监控-->设计-->开发......(一直循环)

最重要的就是团队直接的协作和沟通。 四个圈串在一起代表子功能的完整周期。 单个圈代表岗位的工作内容。

2.1关键点

2.1.1软件组织

一个产品被拆分成了非常多的子功能。每个子功能都在不断的进行上面的循环,一个子功能接一个子功能,保证整个团队所有阶段人员都在开发当中。使得项目的开发更加高效。

2.1.2团队组织

最重要的是高效的协作和沟通,每个阶段没有明确的界限,在出现问题,或需求不明的时候,随时与上一阶段的人员进行沟通。共同保证项目每个子功能以及项目整体有效的运作下去。

3项目部署

3.1部署方案设计

1.分析项目的产品需求文档,获取项目主旨,定好部署方案的方向。梳理网站的目标架构。

2.分析项目开发文档,按照功能边界,设计部署的节点。Nginx的静态服务器等、Nginx+Django共同的动态业务服务器、redis、MySQL、FastDFS这些每个步骤都是一个节点。根据部署节点,去互联网上根据业务需求梳理各种解决方案。

大公司的一些方案会给小公司提供很好的解决方法,我们可以去借鉴,站在巨人的肩膀上。

3.整合上面梳理的解决方案,结合步骤2确定的结点,确定初版部署方案 。但是此方案还是很粗糙。

4.根据实际的公司业务情况,对初版部署方案进行优化调整。

3.2部署环境

个人开发环境:在自己的电脑上开发被分配的项目功能子模块,因为我们团队中每个人的电脑无论是系统,或者编译器等环境都不同,所以我们只完成领导安排的具体内容即可。

公司开发环境:我们使用公司内部的服务器(环境与线上的服务器环境就完全一致了)进行项目子模块间的功能联调,完成项目阶段的开发和调试。

公司开发环境一定要和线上环境一致

项目测试开发环境:项目产品质量保证。

项目预发布环境:项目产品质量保证,是项目上线前的最后一次测试。

项目线上环境:部署加维护。

每个环境之间彼此隔离。 每个环境下的部署方案都是一样的。

注意:我们重点关注在于个人开发环境以及公司开发环境。

4.Nginx快速入门

重点在Nginx配置结构和访问原理。在此基础上进行相关的应用。

4.1简介

Nginx(发音同 engine x)是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电 子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛 索耶夫)所开发,最初供俄国大型网站Rambler.ru及搜寻引擎Rambler使用

我们可以使用Nginx来做我们的web服务、反向代理服务器,这也是最常见的功能。他还可以做缓存服务器、邮件服务器。

4.2特点

Nginx的特点,最重要的就是高并发量,高效的处理相关业务。它相比于其他web来说,内存消耗较少。它还简单稳定,简单在于其配置简单,还能持续运行不出问题。它还有值得注意的一点,那就是模块化程度高,这也就回答了为什么内存消耗少和稳定。其他的一些特点就是低成本和支持多系统等。但是它并不是全是优点,其善于处理静态文件,对于动态页面相对于其他重量级的web软件能力就差了一些了。

4.3扩展内容-多路I/O转接服务器三种模型的简单对比

原贴见https://www.cnblogs.com/rainbow1122/p/7881561.html,文章有详细的代码及解释。

4.3.1select

select能监听的文件描述符个数是有限的,这是受到了FD_SETSIZE的限制,一般是1024。文件描述符是一个非负的整数,我们在打开本地的文件或者新建一个文件时,内核都会返回一个文件描述符。在读写文件的时候,用文件描述符来指定带待读写的文件。基于1024的限制,我们视情况进行选择。客户端少的时候,选用此模型;客户端链接过多的时候,select因为采用的是轮询的模型,这样会降低服务器的响应效率,我们就该考虑换一种模型了。

4.3.2poll

poll模型和select其实没有多大的区别。poll在管理多个描述符的时候采用的也是轮询,根据描述符的状态进行相关处理。它也并不是和select完全一致,它没有最大文件描述符数量的限制,你是不是想这样使用就放心了?但是根据测试,文件描述符数量过大时,它的性能也会下降。

poll和select有一个共同的缺点,那就是包含大量的文件描述符的数组在用户态和内核的地址空间之间来回的被复制,它不管这些文件描述符是否就绪,在文件描述符数量不断上升的时候,它的开销是呈现线性增长的。

4.3.3epoll

epoll是select和poll的增强版本。当程序在大量并发连接中,只有少量活跃的情况下,epoll可以有效的提高系统CPU的使用率。因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。目前epell是linux大规模并发网络程序中的热门首选模型。

epoll是将就绪的文件描述符放在了一个队列中。不用像poll一样整个遍历了。 epoll除了提供select/poll那种IO事件的电平触发(Level Triggered)外,还提供了边沿触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epollwait/epollepollwait/epoll_pwait的调用,提高应用程序效率。

4.4软件安装

代码语言:javascript
复制
sudo apt-get install -y build-essential libssl-dev libtool libpcre3 libpcre3-dev make openssl zlib1g-dev
apt-get install nginx -y

注意:如果软件安装过程中,由于远程仓库安全限制方面的原因导致无法安装成功,使用 --allow-unauthenticated 参数

4.5服务启动命令

代码语言:javascript
复制
systemctl start|stop|restart|reload nginx        ***
nginx -t                     检查配置文件          ***
nginx -s stop|reload         停止|重载
nginx                        启动

4.6其他命令

查看服务的端口信息:

代码语言:javascript
复制
netstat -tnulp

4.7目录结构

前提:使用apt-get命令安装的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 。

4.8配置文件

默认文件:/etc/nginx/nginx.conf

其他目录:/etc/nginx/conf.d

重点关注conf.d因为sites-available是新版本新加的。

文件结构:

代码语言:javascript
复制
全局配置段
http配置段
    server配置段  # 项目或者应用的网站
        location配置段  # 网站里面的文件url
4.8.1url格式
代码语言:javascript
复制
协议:// 网站地址:端口 (/)路径地址 ? 参数
4.8.2Nginx访问原理

浏览器拆分url地址获取相关的请求。分为地址、端口和路径关键字。其中每个请求的目的是根据地址找服务器,根据端口找服务器上面的应用,路径关键字用于location匹配。

4.9配置详解

4.9.1全局配置段

user指的是worker_processes的用户。

worker_processes进行增大并发连接数的处理,跟cpu保持一致,比如8核就是8个。默认值是auto。

pid进程号

events定义事件相关的属性。

worker_connections 一个进程允许处理的最大连接数,默认是768

use定义使用的内核模型,比如select/poll/epoll

4.9.2http配置段

sendfile 文件传输模式

gzip gzip压缩输出模式

tcp_nodelay 防止网络阻塞

tcp_nopush 防止网络阻塞

keepalive_timeout 长连接超时时间,单位是s

include将相关的配置文件内容导入到当前文件中。

4.9.3server配置段

Nginx的配置文件中要以封号;结尾,而且括号在英文状态下输入。

配置详解

代码语言:javascript
复制
格式:
    server {
        listen 端口;
        server name 主机名;
        root 项目代码目录;
        index 项目首页;
        return 指定状态码返回值;
    }
4.9.4location配置
代码语言:javascript
复制
location optional_modifier location_match { ... }

optional_modifier是匹配条件

location_match是匹配的样式

{}是要执行的操作。

4.9.5匹配
下面的优先级为1

=/路径精确匹配

下面的优先级为2

^~优先匹配

下面的优先级为3

~敏感,也可以使用 !~*

!~不敏感,也可以使用 ~*

不敏感的情况下可以忽略大小写

下面的优先级为4

空/通用匹配

匹配样式

针对的是url里面路径的部分。

4.9.6location 常见动作
代码语言:javascript
复制
http://Ethanyannote.com/other

$uri指的是/other,服务器会先去找other文件,找不到的话将other当成目录,重定向到/other/,去该目录下找默认文件。

location实践1

代码语言:javascript
复制
root@itcast:/etc/nginx/conf.d# cat test.conf 
server{
    listen 99;
    location / {
        root /nihao/nibuhao;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

location实践2: 网站质量页面

代码语言:javascript
复制
root@itcast:/etc/nginx/conf.d# cat /data/backup/status.conf 
server{
    listen 99;
    location /nginx-status {
        stub_status on;
        allow 192.168.8.15;
        deny all;
    }
}

location实践3:上传服务器

代码语言:javascript
复制
root@itcast:/etc/nginx/conf.d# cat upload.conf 
server{
    listen 99;
    location /upload {
        alias /var/www/upload;
        autoindex on;
    }
}

root VS alias

代码语言:javascript
复制
root@itcast:/etc/nginx/conf.d# cat upload.conf 
    server{
    listen 99;
    location /upload {
        #alias /var/www/upload;
        root /var/www;
        autoindex on;
    }
}

其中alias 相当于$uri 直接去alias指定的目录下请求就可以了,是绝对路径。而root 则是到root指定的目录下的$uri/ 去找,是相对路径。

5.Nginx进阶

5.1反向代理&反向代理

5.1.1代理

正向代理:代替公司内网的客户端去互联网上访问。(相亲的时候,自己的照片)

反向代理:代替公司内网的服务器向互联网提供服务。(相亲的时候,媒婆说的女方形象)

正向代理简单的来说,就是公司内部的客户端无法上网,借助一台服务器去访问互联网。而反向代理就是我们借助一个中间人服务器向外部提供服务。

5.1.2区别
从用途上来讲

正向代理-为局域网客户端向外访问Internet服务。可以使用缓冲特性减少网络使用率。

反向代理-为局域网服务器向外提供Internet服务。可以使用负载平衡提高客户访问量。还可以基于高级URL策略和管理技术对服务进行高质量管控。

从安全性来讲

正向代理-必须采取安全措施确保内网客户端通过它访问外部网站。隐藏客户端的身份。

反向代理-对外提供服务是透明的,客户端并不知道自己访问的是一个代理。隐藏服务端的身份 。

关键配置

proxy_pass 代理后的地址;

反向代理示例:

代码语言:javascript
复制
root@itcast:/etc/nginx/conf.d# cat proxy.conf 
server{
    listen 99;
    location / {
        proxy_pass http://192.168.8.15:999/nilaiya/;
    }
}

server {
    listen 999;
    location /nilaiya/ {
        root /ni/laiya;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

关键点:

proxy_pass 后面的地址结尾的"/" 很重要

配置示例:

代码语言:javascript
复制
location /html/ {
    1 proxy_pass http://proxy.com; 
    2 proxy_pass http://proxy.com/;
}
# 请求地址:
http://domain.com/html/test.js

结果:

代码语言:javascript
复制
如果是 1 ,由于地址后面没有 "/", 所以$uri(/html/test.js)作为一个内容和我们的地址拼接在一起
http://proxy.com/html/test.js

如果是 2 ,由于地址后面有 "/", 所以$uri(/html/test.js)中关键字之后的 的内容 (/test.js),和代理的地址拼接在一起
http://proxy.com/test.js

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 项目部署(一)
    • 1.传统项目生命周期
      • 1.1调研阶段
      • 1.2设计阶段
      • 1.3开发阶段
      • 1.4测试阶段
      • 1.5运营阶段
    • 2.新型项目周期
      • 2.1关键点
    • 3项目部署
      • 3.1部署方案设计
      • 3.2部署环境
    • 4.Nginx快速入门
      • 4.1简介
      • 4.2特点
      • 4.3扩展内容-多路I/O转接服务器三种模型的简单对比
      • 4.4软件安装
      • 4.5服务启动命令
      • 4.6其他命令
      • 4.7目录结构
      • 4.8配置文件
      • 4.9配置详解
    • 5.Nginx进阶
      • 5.1反向代理&反向代理
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档