Django 部署:Ubuntu+Nginx+Gunicorn (超赞)

先占个位,回头再写~~ 超赞。。


强势回归。。2014-7-21

首先,引用一下 gunicorn: http://gunicorn.org/

1. 修改 nginx 配置

server {
    listen 80;
    server_name example.org;
    access_log  /var/log/nginx/example.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 下面这段可以直接让 nginx 处理静态文件,效率更高
    location /static/ {
        root /data/isaced; #Django项目所在目录
    }
}

【后注】后来发现 /static/ 一段可能有问题,之前好像上面这一段没事,我再 stackoverflow 记录了这个问题,注意 /static/ 一段后面就不要具体到 /static/ 文件夹了。

直接参考 gunicorn 官网的 deployment 一节,关键是 location / 这一节,其他的根据实际的配置,自行脑补。

然后重启一下 nginx,现在相当于 nginx 只是一个反向代理的傀儡,直接代理本地的 8000 端口。

我当时测试了一下,直接用:

python3 manage.py runserver

启动测试环境的服务(仅对本地服务 8000 端口),然后通过外网访问 nginx 的服务地址,也可以正常打开了,不过我们的目标是切换到高性能的生产环境。

2. 安装 gunicorn

apt-get install python3-pip
pip3 install gunicorn

装完之后直接在 shell 输入 gunicorn 命令可以看到已经注册了,并且在 python3 下面 import gunicorn 也不会报错。

3. 把 gunicorn 加入 INSTALLED_APPS 设置

INSTALLED_APPS = (
    # ...
    'gunicorn',
)

4. 启动 gunicorn

假设你的 manage.py 路径为 ~/django/myproject/manage.py

执行:

gunicorn --chdir ~/django/myproject/ myproject.wsgi:application

即可启动 gunicorn。

另请参见:

http://www.tuicool.com/articles/aiami2 http://www.isaced.com/post-248.html


下面说明一下主要的参数:

  • -b/–bind: 绑定的端口,默认 127.0.0.1:8000
  • -c: Gunicorn 的配置文件路径
  • -w/–workers: worker 数,默认 1(等于主机的线程数即可)
  • –reload: 代码变更时重启服务,默认 False
  • –worker-class: 网络模型,可选 gevent 等

不过这里就不多说了,后台启动一下 Gunicorn,并且加入到 /etc/init.d/rc.local 中:

nohup gunicorn --chdir ~/django/myproject/ myproject.wsgi:application &

【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/07/django-deploy-gunicorn.html【Django 部署:Ubuntu+Nginx+Gunicorn (超赞)】

《Django 部署:Ubuntu+Nginx+Gunicorn (超赞)》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注