美文网首页编程
Django uwsgi nginx 应用部署

Django uwsgi nginx 应用部署

作者: 叶同学 | 来源:发表于2017-01-19 20:50 被阅读487次

    Django+uwsgi+nginx 搭建web应用是一种常见的模式,此文档主要记录如何操作。

    参考文档:Setting up Django and your web server with uWSGI and nginx

    代码地址:https://github.com/xander-ye/my_website.git

    部署环境:CentOS 


    步骤:


    1.安装uwsgi和nginx

    pip install uwsgi

    yum install nginx

    2. nginx相关设置

    安装好的nginx需要简单的修改配置。/etc/nginx/nginx.conf 中有两个地方:

    一是,nginx一般默认安装后,其用户为 user  nginx,我们需要修改为 user root;

    二是,在include 地方在添加一条记录,include /etc/nginx/sites-enabled/*;这样的话待会我们项目的nginx配置直接链接到此文件夹下面即可。

    3.在项目中创建三个配置文件

    uwsgi_params文件直接拷贝教程里面的就好,nginx/uwsgi根据自己的情况修改。

    创建链接,将应用的nginx配置链接到sites-enabled目录

    ln -s /root/my_website_server/my_website/mysite/mysite_nginx.conf  /ect/nginx/sites-enable/

    重启nginx

    4.运行试试看

    cd  到mysite_uwsgi.ini文件所在的文件夹,运行 uwsgi --ini mysite_uwsgi.ini

    It works!

    浏览器访问正常!

    补充

    这样运行的话等我们关闭窗口程序便立刻终止,而且日志输出到终端也不妥。

    针对这两点我们可以使用Linux的nohup命令和输出重定向功能

    在我们执行的命令前加上nohup,那么将要执行的命令便会在后台运行。

    输出重定向

    正确输出 覆盖 :命令>文件

    正确输出 追加:命令>>文件

    错误命令 2> 文件

    错误命令 2> 文件

    正确输出和错误输出都覆盖到文件:命令&> 文件

    追加:命令&>>文件

    正确输出追加到文件1,错误输出追加到文件2:

    命令>>文件1  2>>文件2

    我们的运行命令变成:

    nohup uwsgi --ini mysite_uwsgi.ini > /root/my_website_server/mysite.log

    脚本化

    在root目录下面创建一个文件夹bin,在bin下面创建文件start_mysite

    添加可执行权限:chmod 755 start_mysite

    如果直接在终端输入命令,结果定是command not found.

    输入 准确的命令路径即可    . /start_mysite


    为了让命令直接输入也可运行,需要再进行一些操作,如下:

    需要了解的知识:

    Linux环境变量PATH,实际上就是记录的一个字符串,当你在终端输入命令的时候,Linux会去查找PATH里面记录的路径,依次搜索里面所记录的文件目录下是否包含我们输入的命令,如果能搜到就运行,否则就是我们常见的提示:command not found

    所以我们要做的就是把我们刚刚创建的bin目录添加到PATH中。

    问题又来了,如何添加呢?

    在用户登录Linux的时候,它是有配置文件需要去读取的:

    /etc/profile   这是系统配置文件,不建议修改;

    ~/.bash_profile  或者 ~/bash_login 还有 ~/.proflie 这三个才是用户配置文件,当用户登录的时候,依次读取。一旦读取到前面任何一个文件便终止后面文件的读取。

    所以,我们在~/.bash_profile中修改即可。

    export 的作用是将PATH设定为全局变量。

    文档保存之后还不行,因为我们刚刚提到,此文档只会在用户登录的时候才会去读取,我们刚刚进行的操作事实上还未生效,登出再登入?当然可以,更方便的是,我们也可以使用命令让修改立即生效:

    source ~/.bash_profile

    至此,你已经可以直接运行start_mysite来启动应用了。

    有可能遇到的问题


    uwsgi invalid request block size: 21327 (max 4096)...skip

    You just need to increase the buffer size in uWSGI settings.

    buffer-size=32768


    跨域:https://github.com/ottoyiu/django-cors-headers#configuration

    pip install django-cors-headers

    INSTALLED_APPS=(

    ...

    'corsheaders',

    ...

    )

    MIDDLEWARE=[#Or MIDDLEWARE_CLASSES on Django < 1.10

    ...

    'corsheaders.middleware.CorsMiddleware',

    'django.middleware.common.CommonMiddleware',

    ...

    ]

    CORS_ORIGIN_ALLOW_ALL=True

    这是直接修改Django让应用允许跨域,另外还有一个方法是修改nginx配置,让nginx传过来的请求在Django看来似乎并没有跨域。


    执行:uwsgi --socket mysite.sock --wsgi-filetest.py出现错误:

    (13: Permission denied)nginx error log(/var/log/nginx/error.log)

    查看nginx配置:  /etc/nginx/nginx.conf

    其中的 user 多半是 nobody  ,或者是nginx ,改成 root


    我的博客 http://yeli.studio

    微信公众号

    相关文章

      网友评论

        本文标题:Django uwsgi nginx 应用部署

        本文链接:https://www.haomeiwen.com/subject/khaibttx.html