发布于 2015-11-14 15:22:47 | 378 次阅读 | 评论: 0 | 来源: PHPERZ

这里有新鲜出炉的Flask扩展教程,程序狗速度看过来!

Flask 轻量级Python Web开发框架

Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。使用 BSD 授权。


最近想学点Nginx, 发现大家一般都是自己编译. 自己编译也不难, 但是考虑到Ubuntu自带的安装包就已经够用了, 所以姑且先用起来再说.

安装Nginx

Ubuntu提供了四种nginx的安装包, 功能由简到繁依次为: nginx-light, nginx-core, nginx-full, nginx-extras.

安装前, 可以用 aptitude show 查看各个安装包支持的模块. 比如nginx-extras比nginx-full多了perl和lua支持.

权衡之后, 发现最佳选择为nginx-full, 也就是"标准版".

$ sudo apt-get install nginx-full

nginx-full:
     nginx-common (= 1.9.3-1ubuntu1), libc6 (>= 2.14), libexpat1 (>= 2.0.1), libgd3 (>=
     2.1.0~alpha~), libgeoip1, libpam0g (>= 0.99.7.1), libpcre3, libssl1.0.0 (>= 1.0.2~beta3),
     libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25), zlib1g (>= 1:1.2.0)

如果不清楚到底安装了哪些文件, 可以通过 dpkg --listfiles 命令查看:

adam@t450s:~/study/nginx$ dpkg --listfiles nginx-full
/.
/usr
/usr/sbin
/usr/sbin/nginx
/usr/share
/usr/share/doc
/usr/share/doc/nginx-full
/usr/share/doc/nginx-full/copyright
/usr/share/doc/nginx-full/changelog.Debian.gz
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/nginx.8.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/nginx-full

可以顺带安装一下文档:

$ sudo apt-get install nginx-doc

Nginx命令

重启等操作可以通过 /etc/init.d/nginx 执行:

$ sudo /etc/init.d/nginx restart

这是一个shell脚本 (/etc/init.d/目录下都是shell脚本), 有如下命令可用:

configtest    reload        rotate        status        upgrade
force-reload  restart       start         stop

当然, 直接用 /usr/sbin/nginx 也行, 通过 -s 给 nginx 进程发送信号.

用Flask写一个应用

Flask是Python的微型Web框架, 之前在文章里有过介绍, 现在写一个最简单的应用.

在HOME下建一个项目目录:

adam@t450s:~$ mkdir flaskr

在flaskr目录下创建文件app.py, 内容为:

# encoding: utf-8

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

再创建文件flaskr.fcgi, 内容为:

#!/usr/bin/python

from flup.server.fcgi import WSGIServer
from app import app

if __name__ == '__main__':
    WSGIServer(app, bindAddress='/tmp/flaskr-fcgi.sock').run()

这就是FastCGI wrapper. 需要安装Flup以支持FastCGI:

$ sudo pip install flup

注意启动WSGI Server时, 绑定的socket文件. 这个文件后续配置Nginx时要用到, 它是Flup和Nginx通信的桥梁.

为flaskr.fcgi文件添加执行权限, 不加也行, 反正它就是个Python文件.

$ chmod +x flaskr.fcgi

配置Nginx

简单起见, 直接编辑 nginx.conf 文件:

$ sudo vim /etc/nginx/nginx.conf

添加一个 server 配置到 http 模块:

http {
    server {
        listen 80;
        server_name localhost;

        location / {
            try_files $uri @flaskr;
        }
        location @flaskr {
            include fastcgi_params;
            fastcgi_param SCRIPT_NAME "";
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_pass unix:/tmp/flaskr-fcgi.sock;
        }
    }
}

最后一行指定了Nginx和FastCGI通信的socket文件:

fastcgi_pass unix:/tmp/flaskr-fcgi.sock;

运行程序

启动FastCGI wrapper:

adam@t450s:~/flaskr$ ./flaskr.fcgi 

或者:

adam@t450s:~/flaskr$ python flaskr.fcgi 

切换到root用户, 修改socket文件的权限:

adam@t450s:/tmp$ sudo su
[sudo] adam 的密码: 
root@t450s:/tmp# chmod 777 flaskr-fcgi.sock

否则Nginx无权访问这个socket文件. 查看 /var/log/nginx/error.log 的话, 会看到如下错误:

2015/11/09 22:23:21 [crit] 15357#15357: *1 connect() to unix:/tmp/flaskr-fcgi.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/flaskr-fcgi.sock:", host: "localhost"

修改socket文件的权限后, Nginx好像并不需要重启.

访问 http://localhost/, 不出意外即可看到 "Hello World!"



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务