资讯专栏INFORMATION COLUMN

在Mac上使用Nginx和FastCGI部署Flask应用

daryl / 1638人阅读

摘要:最近在学习,本文介绍一下如何部署开发的应用,同时也学习一下的使用,这只是在上的一个实验。应用这里使用的应用就是官方的文档中给出的。安装使用安装会自动安装及其依赖的程序。启动完成后,访问访问时出现了错误,这是因为我们的应用还没有启动。

最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验。

应用

这里使用的应用就是官方的文档中给出的Flaskr。

安装Nginx

使用HomeBrew安装Nginx:

shell$ brew install nginx

HomeBrew会自动安装Nginx及其依赖的程序。在我的电脑上安装的是Nginx 1.6.2,配置文件的路径是/usr/local/etc/nginx/nginx.conf

启动Nginx的命令:

shell$ nginx

Nginx的默认端口是8080,用浏览器打开localhost:8080,显示如下所示的页面说明Nginx已经工作了。

配置Nginx

修改Nginx的配置文件:

server {
    listen 80;
    server_name localhost;
    charset utf-8;

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

重新启动Nginx:

shell$ nginx -s quit
$ sudo nginx

因为使用了80端口,启动Nginx时需要加上sudo

启动完成后,访问localhost

访问时出现了错误,这是因为我们的应用还没有启动。

FastCGI Server

Nginx是一个静态WEB服务器,不能直接运行我们的Python应用,当Nginx接受到请求时,会通过FastCGI转发给我们的应用,应用是运行在FastCGI Server上的,这个server接收Nginx的请求并调用我们的程序,将结果返回给Nginx,Nginx再将结果返回给用户。

我们要使用的FastCGI Server是flup,安装方法:

shell$ pip install flup

在应用目录下创建一个fcgi文件,例如flaskr.fcgi:

Python#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from flaskr import app

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

同时给fcgi文件可执行的权限:

shell$ chmod +x flaskr.fcgi

手动启动server:

shell$ screen
$ ./flaskr.fcgi

使用screen使server在后台运行,或者:

shell$ nohup ./flaskr.fcgi &

再次访问localhost就可以看到我们的应用了。

遇到的问题

第一次运行FastCGI server后,任然无法访问,查看Nginx的日志后发现Nginx服务器没有权限访问socket文件,修改nginx.conf添加user配置:

user wzy;

启动的时候Nginx报错:

nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2

Google一下后发现要加上用户组才行,改成这样:

user wzy wheel;

再次启动Nginx后一切正常了。

Nginx配置项user的使用方法:

Syntax: user user [group];
Default: user nobody nobody;

如果忽略group,Nginx会使用和user名称一样的用户组,例如我设置user wzy,那么Nginx启动的时候会去查找用户组wzy,我的电脑上没有这个用户组,所以Nginx会报错。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37520.html

相关文章

  • Nginx + Flask + Flup:完整演示

    摘要:最近想学点,发现大家一般都是自己编译。安装前,可以用查看各个安装包支持的模块。权衡之后,发现最佳选择为,也就是标准版。需要安装以支持注意启动时,绑定的文件。这个文件后续配置时要用到,它是和通信的桥梁。访问,不出意外即可看到另请参阅 最近想学点 Nginx,发现大家一般都是自己编译。自己编译也不难,但是考虑到 Ubuntu 自带的安装包就已经够用了,所以姑且先用起来再说。 安装 Ngin...

    张迁 评论0 收藏0
  • Nginx + Flask + Flup:完整演示

    摘要:最近想学点,发现大家一般都是自己编译。安装前,可以用查看各个安装包支持的模块。权衡之后,发现最佳选择为,也就是标准版。需要安装以支持注意启动时,绑定的文件。这个文件后续配置时要用到,它是和通信的桥梁。访问,不出意外即可看到另请参阅 最近想学点 Nginx,发现大家一般都是自己编译。自己编译也不难,但是考虑到 Ubuntu 自带的安装包就已经够用了,所以姑且先用起来再说。 安装 Ngin...

    JowayYoung 评论0 收藏0
  • Nginx + Flask + Flup:完整演示

    摘要:最近想学点,发现大家一般都是自己编译。安装前,可以用查看各个安装包支持的模块。权衡之后,发现最佳选择为,也就是标准版。需要安装以支持注意启动时,绑定的文件。这个文件后续配置时要用到,它是和通信的桥梁。访问,不出意外即可看到另请参阅 最近想学点 Nginx,发现大家一般都是自己编译。自己编译也不难,但是考虑到 Ubuntu 自带的安装包就已经够用了,所以姑且先用起来再说。 安装 Ngin...

    hsluoyz 评论0 收藏0
  • FlaskWindows环境下的部署

    摘要:实际上还是单进程阻塞运行的,即使在中配置了也无法实现多线程使用。多线程情况配置启用多线程在中配置两条测试路由先用浏览器访问随即立刻访问可见两次访问是不同的线程处理的,不会出现堵塞的情况。 背景 由于目前在用的Flask项目涉及到一部分依赖Windows的处理,还无法迁移到linux平台,那么在windows环境下,要怎么部署呢? 思路 根据Flask官网介绍,由于Flask内置的服务器...

    ermaoL 评论0 收藏0
  • FlaskWindows环境下的部署

    摘要:实际上还是单进程阻塞运行的,即使在中配置了也无法实现多线程使用。多线程情况配置启用多线程在中配置两条测试路由先用浏览器访问随即立刻访问可见两次访问是不同的线程处理的,不会出现堵塞的情况。 背景 由于目前在用的Flask项目涉及到一部分依赖Windows的处理,还无法迁移到linux平台,那么在windows环境下,要怎么部署呢? 思路 根据Flask官网介绍,由于Flask内置的服务器...

    魏宪会 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<