[阿里云部署] 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,进入到一个虚拟机环境 ...
随机推荐
- 类的封装(property)
封装 封装程序的主要原因:保护隐私:而封装方法的主要原因是:隔离复杂的执行过程 property的特性 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执 ...
- Apache常用配置
Apache配置文件:conf/httpd.conf.(注意:表示路径时使用‘/’而不使用‘\’,注释使用‘#’) 1. ServerRoot:服务器根目录,也就是Apache的安装目录,其他的目录配 ...
- LeetCode 18. 4Sum (四数之和)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- 利用python深度学习算法来绘图
可以画画啊!可以画画啊!可以画画啊! 对,有趣的事情需要讲三遍. 事情是这样的,通过python的深度学习算法包去训练计算机模仿世界名画的风格,然后应用到另一幅画中,不多说直接上图! 这个是世界名画& ...
- 如何用java创建一个jdbc程序
第一个jdbc程序 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和 ...
- 1087: [SCOI2005]互不侵犯King
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4276 Solved: 2471[Submit][ ...
- Linux系统安装_Centos6.9
第1章 虚拟机安装 1.1 镜像下载 1.1.1 新版本下载 http://mirrors.aliyun.com #阿里云官方镜像站点 1.1.2 旧版本下载 http://vault.cento ...
- 学习笔记TF059:自然语言处理、智能聊天机器人
自然语言处理,语音处理.文本处理.语音识别(speech recognition),让计算机能够"听懂"人类语音,语音的文字信息"提取". 日本富国生命保险公司 ...
- Maven合并多个war包的工程需要用到的插件
<build> <finalName>WebSite</finalName> <plugins> <!-- 配置war包合并的插件 --> ...
- MQTT——订阅报文
我们已经把相关的连接报文搞定了.笔者想来想去还是决定先讲解一下订阅报文(SUBSCRIBE ).如果传统的通信方式是客户端和服务端之间一般就直接传输信息.但是MQTT的通信方式是通过发布/订阅的方式进 ...