Flask web应用

一、介绍

  最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构。下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python应用。然后使用Nginx作为前端反向代理,设置uWSGI应用网关处理web应用程序。

二、条件

1)         环境要求

  • Server OS:最小化安装 Centos 6.8
  • Nginx :反向代理
  • Python2.6~2.7:开发语言
  • Flask/uWSGI:框架
  • Pip:python包管理工具
  • iptables&selinux:开放用到的端口,关闭selinux。

2)         安装必备的开发工具以及环境

更新系统:

  1. [root@hcloud ~]# yum update -y
  2. [root@hcloud ~]# yum groupinstall "Development tools" -y

更新完成后,记得重启系统,然后安装工具:

  1. [root@hcloud ~]# yum install wget vim telnet python-devel zlib-devel openssl-devel bzip-devel -y
  2.  
  3. [root@hcloud ~]# yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libxml2 libxml2-devel python-setuptools zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake
  4. -y

3)         安装python 包管理工具-pip

  1. [root@hcloud ~]# wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py

或者参考此网站

4)         安装uWSGI与Flask

下载软件

  1. [root@hcloud ~]# mkdir soft
  2. [root@hcloud ~]# cd soft
  3. [root@hcloud soft]# wget https://pypi.python.org/packages/0c/1c/44849e293e367a157f1ad863cee02b4b865840543254d8fae3ecdebdbdb9/uwsgi-2.0.12.tar.gz
  4. [root@hcloud soft]# wget https://pypi.python.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz

如果下载该软件比较慢,可以在/etc/reslov.conf dns中添加一个8.8.8.8 ,很快的哦。

安装软件(开发要求固定版本,如果不介意版本的话,可以直接使用pip install packge 即可安装,相当于linux中的yum)

  1. [root@hcloud soft]# tar -xf Flask-0.10.1.tar.gz
  2. [root@hcloud ~]# cd Flask-0.10.1
  3. [root@hcloud Flask-0.10.1]# python setup.py install
  4.  
  5. [root@hcloud soft]# tar -xf uwsgi-2.0.12.tar.gz
  6. [root@hcloud soft]# cd uwsgi-2.0.12
  7. [root@hcloud uwsgi-2.0.12]# python setup.py install

5)         创建一个测试应用

创建一个Web应用程序存放的文件夹

  1. [root@hcloud ~]# mkdir -pv /usr/local/webtest
  2. [root@hcloud ~]# cd /usr/local/webtest

创建一个python 脚本,内容如下:

  1. [root@hcloud webtest]# cat myproject.py
  2. from flask import Flask
  3. application = Flask(__name__)
  4.  
  5. @application.route("/")
  6. def hello():
  7. return "<h1 style='color:blue'>Hello Flask!</h1>"
  8.  
  9. if __name__ == "__main__":
  10. application.run(host='0.0.0.0')

创建WSGI入口点文件,名字为:wsgi.py,内容如下

  1. [root@hcloud webtest]# cat wsgi.py
  2. from myproject import application
  3.  
  4. if __name__ == "__main__":
  5. application.run()

6)         配置uWSGI服务器网关服务运行方式,运行端口等。

上述两个python脚本文件创建完成后,uwsgi命令启动,运行在8000端口上,指定协议http,运行时会出现一些警告,暂时可以忽略,是因为当前是root账户运行的uwsgi,后面从配置文件启动时会配置普通用户nginx即可。

  1. [root@hcloud webtest]# uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi
  2. 验证下,看下监听端口
  3. [root@hcloud webtest]# netstat -aultnp | grep 8000
  4. tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 7181/uwsgi
  5. tcp 0 0 192.168.30.58:8000 192.168.30.65:48164 TIME_WAIT -

可以打开浏览器访问测试一下:http://192.168.30.58:8000

7)         创建uWSGI配置文件

以.ini格式为uwsgi启动配置文件(还有xml,json,等多种格式),这样就不用在命令行输入一大堆命令了,用uwsgi命令启动,后面可以创建uwsgi启动脚本,加入到系统服务

在项目的目录中,创建uwsgi.ini:

  1. [root@hcloud webtest]# cat uwsgi.ini
  2. [uwsgi]
  3. uid = nginx
  4. gid = nginx
  5. socket = 127.0.0.1:8000
  6. master = true
  7. vhost = true
  8. workers = 8
  9. reload-mercy = 10
  10. vacuum = true
  11. max-requests = 10000
  12. limit-as = 1024
  13. buffer-sizi = 3000
  14. pidfile = /var/run/uwsgi.pid
  15. daemonize = /var/log/uwsgi/uwsgi.log
  16. chdir = /usr/local/webtest
  17. module = wsgi
  18. chmod-socket = 660
  19. enable-threads = true

保存并退出。配置文件参考:http://heipark.iteye.com/blog/1847421

大致的解释下:

uid 、gid :以哪个用户、组启动服务

socket:监听的ip及端口

master: 启动主进程

workes:服务器启动的进程数

reload-mercy:平滑的重启

pidfile :启动时的pid 文件。

daemonize :启动日志

module :web应用的入口模块名称

enable-threads : 启用线程模式

8)         创建开机系统启动脚本文件,名字为uwsgid。

 uwsgid

创建完成后,赋予执行权限,加入开机启动

  1. [root@hcloud ~]# chmod +x /etc/init.d/uwsgid
  2. [root@hcloud ~]# chkconfig --add uwsgid
    [root@hcloud ~]# chkconfig --level 2345 uwsgid on

检查下

  1. [root@hcloud ~]# chkconfig --list uwsgid
  2. uwsgid 0:off 1:off 2:on 3:on 4:on 5:on 6:off

启动uwsgid

  1. [root@hcloud ~]# service uwsgid start
  2. Starting uwsgi:
  3. [uWSGI] getting INI configuration from /usr/local/webtest/uwsgi.ini

验证下监听端口(注:这里我们使用127.0.0.1 作监听,是为了后期在使用时,对外只有nginx可以访问web应用):

  1. [root@hcloud ~]# netstat -aultnp | grep :8000
  2. tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 8945/uwsgi

9)         安装Nginx配置代理

先下载安装6.6的epel源

  1. [root@hcloud ~]# wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  2. [root@hcloud ~]# rpm -ivh epel-release-6-8.noarch.rpm

安装nginx

  1. [root@hcloud ~]# yum install nginx -y

安装完成后,修改nginx默认配置文件default.conf,修改之前可以先备份下源文件噢。完整内容如下:

  1. [root@hcloud ~]# cat /etc/nginx/conf.d/default.conf
  2. server {
  3. listen 80;
  4. server_name 192.168.30.58;
  5.  
  6. location / {
  7. include uwsgi_params;
  8. uwsgi_pass 127.0.0.1:8000;
  9. uwsgi_param UWSGI_SCRIPT wsgi;
  10. uwsgi_param UWSGI_CHDIR /usr/local/webtest;
  11. index index.html index.htm;
  12. client_max_body_size 35m;
  13. }
  14. }

以上内容代理了uwsgi的端口,客户端通过访问nginx的80端口,然后nginx在将请求转发到后台flask应用的8000端口上。

启动nginx

  1. [root@hcloud ~]# service nginx start
  2. Starting nginx: [ OK ]

在浏览器内测试访问一下nginx:http://192.168.30.58

Flask web应用的更多相关文章

  1. Flask web开发 请求拦截和预处理

    我们在开发WEB应用时,往往会需要对所有的url请求进行拦截,做些预处理,比如权限处理.日志等统一处理. 本文介绍一下Flask中的处理机制.我们通过一个简单的例子来说明. 1.编写一个简单应用 ru ...

  2. Flask web开发 处理Session

    本文我们在上篇文章<Flask web开发  处理POST请求(登录案例)>的基础上,来讲述Flask对session的支持. 在上面案例上,我们需要修改和新增如下功能 1.登录成功后的 ...

  3. [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题

    ---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...

  4. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  5. Flask Web中文教程

    Flask Web中文教程:http://docs.jinkan.org/docs/flask/

  6. 教程:在 Visual Studio 中开始使用 Flask Web 框架

    教程:在 Visual Studio 中开始使用 Flask Web 框架 Flask 是一种轻量级 Web 应用程序 Python 框架,为 URL 路由和页面呈现提供基础知识. Flask 被称为 ...

  7. 《Flask Web开发实战:入门、进阶与原理解析(李辉著 )》PDF+源代码

    一句话评价: 这可能是市面上(包括国外出版的)你能找到最好的讲Flask的书了 下载:链接: https://pan.baidu.com/s/1ioEfLc7Hc15jFpC-DmEYBA 提取码: ...

  8. 【问题记录】uwsgi部署并启动俩个几乎一样的python flask web app,发现有一个app响应时间非常长

    uwsgi在同一台linux上启动python flask web app(俩个), 发现第一个和第二个的简单性能测试差距非常大,差了将近一倍: 第一个结果: Concurrency Level: 1 ...

  9. Ubuntu16.04采用FastCGI方式部署Flask web框架

    1    部署nginx 1.1    安装nginx服务 root@desktop:~# apt-get install nginx -y 1.2    验证nginx服务是否启动 root@des ...

随机推荐

  1. JS 引用

    var arr1=[1,2,3,4]; var arr2=arr1; arr2.push(5); console.log(arr1);//和arr2一样 console.log(arr1==arr2) ...

  2. C#使用系统的“显示桌面”功能(Shell.Application)

    原文 C#使用系统的“显示桌面”功能(Shell.Application) 在 Windows 系统的 任务栏 上的 快速启动栏 里,通常有一个图标  ,点击这个图标,就会切换到桌面.这个图标实际是一 ...

  3. BZOJ 2463 谁能赢呢? (博弈论)

    题解:简单博弈论 #include <cstdio> int main(){ int n; while(scanf("%d",&n),n!=0) if (n&a ...

  4. VS2010/MFC说明

    此栏目大多数内容转自鸡啄米http://www.jizhuomi.com/ 方便使用对其内容做了少量修改,仅是个人收藏使用,不做其它用途.

  5. Flex XML搜索、匹配

    - <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=" ...

  6. WeasyPrint - Converts HTML + CSS to PDF - WeasyPrint converts HTML/CSS documents to PDF

    WeasyPrint - Converts HTML + CSS to PDF - WeasyPrint converts HTML/CSS documents to PDF WeasyPrint c ...

  7. [cocos2dx笔记011]使用Cocostudio UI编辑器

    本文地址:http://www.cppblog.com/zdhsoft/archive/2014/07/19/207715.html 笔记汇总:http://www.cppblog.com/zdhso ...

  8. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  9. MemberShip使用大全

    比较全面的membership 使用过程 http://www.cnblogs.com/xlb2000/archive/2010/07/31/1788120.html Membership中创建的数据 ...

  10. Python 基础学习20151201

    L = [ ['Apple','Google','Microsoft'], ['Java','Python','Ruby','PHP'], ['Adam','Bart','Lisa'] ] #打印Ap ...