[阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器
部署地址:123.56.7.181 (已失效)
Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器
首先,在部署之前,要知道各个技术都是用来做什么的,以及他们在Web服务器系统中的位置。
参考结构图:
自底向上分析,浏览器从用户输入域名访问网站开始,与网站进行交互操作,到最后离开网页,浏览器一直在发送请求、返回响应。
当浏览器的请求到达Web服务器时,Web服务器接收 HTTP 请求并返回响应。常见的Web服务器有 Nginx,Apache,IIS等,我们在阿里云的Ubuntu环境下搭建Web服务器选择Nginx,选择Nginx的理由?
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝
反向代理是什么?有什么用?
客户端本来可以直接通过HTTP协议访问某网站应用服务器,在中间加上一个Nginx服务器,客户端请求Nginx,Nginx请求应用,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
作用:
1.安全,客户端对Web服务器的访问需要先经过反向代理服务器。这样可以防止外部程序对Web服务器的直接攻击。
2.负载均衡,反向代理服务器可以根据Web服务器的负载情况,动态地把HTTP请求交给不同的Web服务器来处理,前提是要有多个Web服务器。
3.提升Web服务器的IO性能。一个HTTP请求的数据,从客户端传输给服务器,是需要时间的,例如N秒,如果直接传给Web服务器,Web服务器就需要让一个进程阻塞N秒,来接收IO,这样会降低Web服务器的性能。如果使用反向代理服务器,先让反向代理服务器接收完整个HTTP请求,再把请求发给Web服务器,就能提升Web服务器的性能。还有一些静态文件的请求,可以直接交给反向代理来处理,不需要经过Web服务器。
接着就到了WSGI:
WSGI,Python用于Web开发的通信协议;
uWSGI,充当Web服务器或中间件的程序:如果架构是Nginx+uWSGI+Flask,uWSGI是一个中间件;如果架构是uWSGI+Flask,uWSGI是一个服务器;
uwsgi,是uWSGI程序实现的一个自有的协议;
选择uWSGI的理由?
Web协议出现顺序:
CGI -> FCGI -> WSGI -> uwsgi
uwsgi,比FCGI和WSGI都快,主要特征是采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上都优于字符串型协议.
总结一次网站请求响应的流程:
浏览器:用户向我发送了一个请求,我将这个请求转达给Web服务器Nginx。
Nginx:Hey,WSGI,我刚收到了一个请求,我需要你作些准备,然后由Flask来处理这个请求。
WSGI:OK,Nginx。我会设置好环境变量,然后将这个请求传递给Flask处理。
Flask:Thanks WSGI!给我一些时间,我将会把请求的响应返回给你。
WSGI:Alright,那我等你。
Flask:Okay,我完成了,这里是请求的响应结果,请求把结果传递给Nginx。
WSGI:Good job!Nginx,这里是响应结果,已经按照要求给你传递回来了。
Nginx:Cool,我收到了,我把响应结果返回给客户端。
浏览器:接收Nginx返回响应,加载页面,等待用户下一次发送请求
以上部分的参考资料:
http://blog.csdn.net/lihao21/article/details/52304119
http://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html
接下来该部署服务器了,阿里云购买学生ECS服务器,Ubuntu14.04系统(自带了Python2.7)
如果本机是ubuntu,服务器也是ubuntu就方便了,直接用scp命令把本地Flask程序拷贝到服务器上,scp命令:
scp -r 本地目录 用户名@IP地址 : 服务器上的目录,需要输入服务器的用户密码
接下来先从阿里云进入服务器控制台
. 更新apt-get sudo apt-get update
sudo apt-get upgrade . 安装SSH sudo apt-get install ss
阿里云提供的控制台比较简陋,我们可以在本地使用SSH命令远程连接服务器,本地的Terminal用起来更方便,ssh命令: ssh 用户名@IP地址,需要输入服务器的用户密码
连接成功后开始配置环境,先从MySQL开始
. 安装 sudo apt-get install mysql-server . 配置 2.1 数据库初始化: sudo mysql_install_db 2.2 运行数据库Mysql安全配置向导(根据提示操作即可) sudo mysql_secure_installation
然后安装pip、env
.安装python-dev包 sudo apt-get install python-dev .安装pip sudo apt-get install python-pip
3.安装配置VirtualEnv
VirtualEnv可以管理多个开发环境,VirtualEnvWrapper使得VirtualEnv变得更好用
sudo pip install virtualenv virtualenvwrapper
安装完成以后,需要在环境变量中加入一些配置:
echo "export WORKON_HOME=~/Env" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
source ~/.bashrc
然后就可以开始建立一个虚拟环境:
mkvirtualenv first
你会发现,提示符变成(first)user@hostname:~$,表示现在已经进入first的虚拟环境,在此环境下进行的pip等操作,只会在当前环境下生效
退出当前的虚拟环境:
deactivate
安装uWSGI、Nginx
sudo pip install uwsgi
sudo apt-get install nginx
配置uWSGI、Nginx:
uWSGI在项目目录下新建config.ini,配置参数在此填写
Nginx在/etc/nginx/sites-available/default,配置参数在此填写
配置完毕后
sudo service nginx restart
sudo service uwsgi restart
启动后终端处于监控状态,此时打开浏览器访问网站,有
1、Nginx欢迎界面:检查配置文件,是否目录填写错误
2、502错误:看上去是代理服务器的问题,多数情况下一般是Flask程序的问题,服务器运行和本地运行的代码并非完全一样,注意检查启动代码
3、网站主页:虽然这时算是配置成功了,但仍然可能出现若干问题,比如数据库字符集/账户问题,查看服务器上uWSGI监控的日志排除错误。
参考资料:
https://segmentfault.com/a/1190000007262187
http://www.jianshu.com/p/84978157c785
http://www.cnblogs.com/Ray-liang/p/4173923.html?utm_source=tuicool&utm_medium=referral
[阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器的更多相关文章
- Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器
Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器
nginx+uWSGI+django+virtualenv+supervisor发布web服务器 导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...
- Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器
目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...
- 云服务器部署Python项目(nginx+uwsgi+mysql+项目)
python项目部署到云服务器 关注公众号"轻松学编程"了解更多. 一.硬件准备 云服务器,系统ubuntu_16_04 . 注意:要在安全组中开放Http的80端口. 二.软件准 ...
- Python3 flask nginx uwsgi 环境搭建
配置项目的时候一般使用虚拟环境,是各个项目的环境独立起来,更多方便管理.至于如何使用搜索即可,并不难 1.安装python3 yum -y install zlib-devel bzip2-devel ...
- 12,nginx+uWSGI+django+virtualenv+supervisor发布web服务器
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...
- 08 nginx+uWSGI+django+virtualenv+supervisor发布web服务器
一.为什么要用nginx,uwsgi? 1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx, 2nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静 ...
- 三 nginx+uWSGI+django+virtualenv+supervisor发布web服务器
https://www.cnblogs.com/pyyu/p/9481344.html?tdsourcetag=s_pcqq_aiomsg 一 uwsgi安装 1.安装uwsgi,进入到一个虚拟机环境 ...
随机推荐
- 跨域资源共享CORS实现
问题描述: 本地已经实现的restful接口,在地址栏输入url:loaclhost:8080/admins即可得到预期的json字符串,在网页上显示如下: [{"id":1,&q ...
- 前端-如何用gulp快速搭建项目(sass预编译,代码压缩,css前缀,浏览器自动刷新,雪碧图合成)
一:gulp优点: 易于使用 通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理: 插件高质 Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作. 构建快速 利用 Node ...
- R学习笔记 第三篇:数据框
数据框(data.frame)用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同的数据列的数据类型可以相同,也可以不同,但是,每列的长度必须相同.数据框的每列可以有唯一的命名,在已创 ...
- jquery的2.0.3版本源码系列(7):3043行-3183行,deferred延迟对象,对异步的统一管理
目录 part1 deferred延迟对象 part2 when辅助方法 网盘源代码 链接: https://pan.baidu.com/s/1skAj8Jj 密码: izta part1 defe ...
- angular指令中的preLink函数和postLink函数
指令模板选项有complie和link两个字段,两者之间存在如下关系: 当compile字段存在时,link字段将被忽略,compile函数的返回值将作为link字段. 当compile不存在,lin ...
- mybatis 分页问题 (个人认为算是个bug)
问题描述:相同的查寻条件, 分页显示的结果和.net版本的分页结果数量一样,排序不一样, 不同的页有相同的数据.比如:第2面和第3页都有同一条相同的数据. 核心代码: //自己实现 int total ...
- Android 开发笔记___图像视图
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- C# orderby子句
注意:对联接运算的结果进行排序. 请注意,排序在联接之后执行. 虽然可以在联接之前将 orderby 子句用于一个或多个源序列,不过通常不建议这样做. 某些 LINQ 提供程序可能不会在联接之后保留该 ...
- Matrix 矩阵
CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示意图:3D变换则 ...
- form 表单处理
submit相关 当使用 submit 按钮或者 image 或者button type="submit" 来提交表单时,会触发 submit 事件,但是直接javascri ...