使用 Gunicorn 和 nginx 部署 Django 项目

Posted

技术标签:

【中文标题】使用 Gunicorn 和 nginx 部署 Django 项目【英文标题】:Deploying Django project with Gunicorn and nginx 【发布时间】:2013-12-08 10:01:36 【问题描述】:

我是 django 新手,我想知道如何使用 nginx 和 gunicorn 设置我的 django 项目。我阅读了本指南:http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ 但它不适用于我的项目。 我认为是由于我的项目的特殊结构,即:

├──icecream
│   ├── settings
│   |    ├── __init.py
│   |    ├── base.py
│   |    ├── local.py
│   |    ├── production.py
│   ├── __init__.py
│   ├── urls.py
│   ├── wsgi.py
├── manage.py

这个布局来自:https://github.com/twoscoops/django-twoscoops-project。 任何人都可以帮助我吗? 谢谢

【问题讨论】:

我使用了一个非常相似的结构,Michał Kurzyński 的指南对我有用。告诉我们到底出了什么问题。 “它不起作用”是什么意思? 似乎无法找到项目的设置。当我数字:(myenv) $ gunicorn_django --bind example.com:8001 根本不起作用 请编辑您的帖子广告,至少向我们展示您的gunicorn_start 文件和错误消息。 我的gunicorn_start 是dpaste.de/xbuQ#L4,10,16 并且错误日志是:dpaste.de/TITD 【参考方案1】:

我这里只总结一下使用 nginx 和 gunicorn 部署 django 应用程序的步骤:

1。安装 nginx 并将其添加到/etc/nginx/sites-enabled/default

server 

  server_name 127.0.0.1 yourhost@example.com;
  access_log /var/log/nginx/domain-access.log;

  location / 
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Forwarded-For  $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;

    # This line is important as it tells nginx to channel all requests to port 8000.
    # We will later run our wsgi application on this port using gunicorn.
    proxy_pass http://127.0.0.1:8000/;
  


2。安装 gunicorn

$ pip install gunicorn

3。使用 gunicorn 和 wsgi.py 文件启动您的 django 项目

$ cd </path/to/djangoproject_subdirectory_with_wsgi.py>

$ gunicorn wsgi -b 127.0.0.1:8000 --pid /tmp/gunicorn.pid --daemon

# --daemon parameter tells gunicorn to run in the background
# So that gunicorn continues to run even if you close your ssh session
# (You cannot remain ssh-ed into your server all the time right!)

请不要使用“wsgi.py”;调用 gunicorn 时,您只需要使用不带“.py”扩展名的 wsgi。这将在后台启动您的 wsgi 应用程序。

4。在浏览器中访问“yourhost@example.com”

现在您的应用程序必须在您的实例上启动并运行。访问:

http://yourhost@example.com/

并查看您的应用程序是否正在运行。不要忘记在上面和之前的nginx配置文件中replce yourhost@example.com

5。 (可选)附加说明

在第 1 步中,如果感到困惑;从/etc/nginx/sites-enabled/default 文件中删除所有现有行并将上述代码放入其中。 (或者删除并新建一个空白文件并添加代码)

如果您使用的是 virtualenv,并且您在第 2 步中的 virtualenv 中执行了pip install gunicorn,则在激活相应的 virtualenv 的情况下运行第 3 步命令。

gunicorn 进程的 pid 存储在 /tmp/gunicorn.pid 中;如果你想杀死现有的 gunicorn 进程并重新启动它。

supervisord 可以结合使用,这有助于自动重启 gunicorn 守护进程,以防它因某种原因而死。这在生产环境中很有用。

【讨论】:

为什么指向8000端口而不是gunicorn创建的unix socket?

以上是关于使用 Gunicorn 和 nginx 部署 Django 项目的主要内容,如果未能解决你的问题,请参考以下文章

django-gunicorn-nginx:502 网关错误

一周掌握Flask框架学习笔记Flask项目部署(使用gunicorn和nginxuWSGI和nginx两种部署方式)

如何使用 Nginx 和 GUnicorn 在单个服务器上部署多个 Django 应用程序?

使用Nginx和Gunicorn部署Django项目

使用Nginx + Gunicorn + Django 方式部署django程序

python flask项目部署上线之Gunicorn和Nginx的准备