• [阿里云部署] 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地址 : 服务器上的目录,需要输入服务器的用户密码

    接下来先从阿里云进入服务器控制台

    1. 更新apt-get
    
    sudo apt-get update
    sudo apt-get upgrade
    
    2. 安装SSH
    
    sudo apt-get install ss

    阿里云提供的控制台比较简陋,我们可以在本地使用SSH命令远程连接服务器,本地的Terminal用起来更方便,ssh命令: ssh 用户名@IP地址,需要输入服务器的用户密码

    连接成功后开始配置环境,先从MySQL开始

    1. 安装
    
    sudo apt-get install mysql-server
    
    2. 配置
    
    2.1 数据库初始化:
    
    sudo mysql_install_db
    
    2.2 运行数据库Mysql安全配置向导(根据提示操作即可)
    
    sudo mysql_secure_installation

     然后安装pip、env

    1.安装python-dev包
    
    sudo apt-get install python-dev
    
    2.安装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

  • 相关阅读:
    VS2010、SQL Server 2008和SQL Server 2012安装详解
    IIS服务寄宿
    C#中错误:不包含适合于入 口点的静态“Main”方法 的解决方法
    硬件的一些性能指标
    SATA SAS SSD 硬盘介绍和评测
    mysql数据库锁定机制
    mysql日志设置优化
    MySQL硬件瓶颈分析
    可扩展性设计之数据切分
    硬件环境对系统性能的影响
  • 原文地址:https://www.cnblogs.com/xiaozhaoqi/p/7282807.html
Copyright © 2020-2023  润新知