部署地址: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服务器的更多相关文章

  1. Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...

  2. nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    nginx+uWSGI+django+virtualenv+supervisor发布web服务器   导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...

  3. Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...

  4. 云服务器部署Python项目(nginx+uwsgi+mysql+项目)

    python项目部署到云服务器 关注公众号"轻松学编程"了解更多. 一.硬件准备 云服务器,系统ubuntu_16_04 . 注意:要在安全组中开放Http的80端口. 二.软件准 ...

  5. Python3 flask nginx uwsgi 环境搭建

    配置项目的时候一般使用虚拟环境,是各个项目的环境独立起来,更多方便管理.至于如何使用搜索即可,并不难 1.安装python3 yum -y install zlib-devel bzip2-devel ...

  6. 12,nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  7. nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...

  8. 08 nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    一.为什么要用nginx,uwsgi? 1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx, 2nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静 ...

  9. 三 nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    https://www.cnblogs.com/pyyu/p/9481344.html?tdsourcetag=s_pcqq_aiomsg 一 uwsgi安装 1.安装uwsgi,进入到一个虚拟机环境 ...

随机推荐

  1. Javascript中NaN、null和undefinded的区别

    var a1; var a2 = true; var a3 = 1; var a4 = "Hello"; var a5 = new Object(); var a6 = null; ...

  2. AJAX中使用post,get接收发送数据的区别

    如何发起请求 xhr.send(); 备注: 如果是get方式,send()命令中不用写任何参数 传递的数据可以写在url中,服务器用$_GEET["参数名"]接收 如果是post ...

  3. Jimmychoo商城系统总结

    一.需求 1.游戏模块 ①在进入H5之前,首先有一个动态的探照灯的动效,然后由"淡出"效果到H5首页. ②在点击"开始游戏"之后会有一段动画演示游戏内容,然后滑 ...

  4. Python通过跳板机链接MySQL的一种方法

  5. JavaScript系列-----对象基于哈希存储(<Key,Value>之Value篇) (3)

    JavaScript系列-----Objectj基于哈希存储<Key,Value>之Value 1.问题提出 在JavaScript系列-----Object之基于Hash<Key, ...

  6. 通过geotools读写shp文件

    依赖jar包 读取shp public static void main(String[] path) { DbaseFileReader reader = null; try { reader = ...

  7. 项目实战3—Keepalived 实现高可用

    实现基于Keepalived高可用集群网站架构 环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端 ...

  8. Excel、Exchange 和 C# (摘要)

    Excel.Exchange 和 C#Eric GunnersonMicrosoft Corporation 2003年4月21日 摘要:Eric Gunnerson 将向您介绍如何使用 Outloo ...

  9. C#中一些默认的预定义属性

    C#中一些默认的预定义属性,见下表: 预定义的属性 有效目标 说明 AttributeUsage Class 指定另一个属性类的有效使用方式 CLSCompliant 全部 指出程序元素是否与CLS兼 ...

  10. c# 小小备忘录

    一.简述 备忘录,相信大家生活中都使用过,比如记笔记.手机备忘录等等,这些都是记录自己灵感时所想.定期内想做的事情,好像跑题了,说说我的备忘录吧,我的备忘录功能上也就是增删改查的操作,另加到时提醒.语 ...