Django+nginx+gunicorn部署配置

5 篇文章 0 订阅
4 篇文章 0 订阅

在部署django开发的站点时,通常有两种选择方式,nginx+django+uwsgi或者django+nginx+gunicorn,本文不讨论apache方式,在linux下通常都使用nginx,速度快,还经常做代理服务器,功能强大。。
nginx+django+uwsgi个人觉得uwsgi配置较为麻烦,所以选择了gunicorn,一个开源Python WSGI UNIX的HTTP服务器,据说速度快(配置快、运行快)、简单,默认是同步工作,支持Gevent、Eventlet异步,支持Tornado。有兴趣可以自行查阅官方文档

django+nginx+gunicorn

 

1、环境安装

需要在服务器端安装我们所需要的环境nginx Python gunicorn...
django等站点需要的依赖将不进行介绍

  • nginx

在ubuntu上支持apt-get 直接安装,其他系统请自行搜索安装方式

$ sudo apt-get install nginx
  • gunicorn

gunicorn只是一个Python的库 这里建议使用pip安装,简单方便

$ sudo pip install gunicorn

 

2、环境配置

其实也很简单,要想简单的跑起来只需要更改几个配置文件即可
首先请把你的django站点放在服务器合适的地方

  • django配置

在一些前后端分离项目,可能还需要配置前端静态页面,此时就不能将所有url都转发到django了

在django项目的settings.py添加如下代码:

# 收集app静态文件到项目目录使nginx能访问到
STATIC_ROOT = os.path.join(BASE_DIR, "static")

然后进入项目目录在终端执行:

$ python manage.py collectstatic
  • nginx配置

一般网站都配置在80端口上,域名默认解析到80端口,所以nginx配置文件如下,在更改nginx的配置文件之前建议把默认文件进行备份,以备后续出现问题参照使用
打开nginx配置文件/etc/nginx/sites-enable/default

centos系统应该是/etc/nginx/conf.d/default.conf
进行修改为如下内容:

server {
    listen 80;
    server_name 192.168.84.199;
    server_name_in_redirect off;
    access_log /home/webserver/web/nginx.access.log;
    error_log /home/webserver/web/nginx.error.log;

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

    location /static/ {
        alias /opt/hrms/hrms/static;
    }

核心配置文件就上述那么多,重点使将请求转发到django的服务器上

注:

  • listen是所需要监听的端口
  • server_name是需要绑定的域名,暂时没有域名时,请使用ip
  • access_log是确定正常状态下log文件位置
  • error_log使确定发生错误时log文件位置
  • location / 是当访问到根下的时候,将所有请求转发到127.0.0.1:8000,本文使转发到gunicorn启动的django应用上,中间配置的是需要转发的内容,基本上述内容可以满足大多需求,如需特殊需求请自行查看nginx官方文档
  • location /static/ 配置了静态文件所在的路径,静态文件由nginx处理,动态转发到django,如不配置会出现站点引用的所有js css都找不到
  • gunicorn配置

gunicorn启动一般有两种方式,可以在项目目录下建立gunicorn.conf.py配置文件,也可以在启动gunicorn时直接加上相关命令

需要在项目的settings.py中的INSTALLED_APPS添加gunicorn:

INSTALLED_APPS = [
    ...
    ...
    'gunicorn',  # 部署用
]

gunicorn.conf.py文件

import multiprocessing

bind = "127.0.0.1:8000"   #绑定的ip与端口
workers = 2                #核心数
errorlog = '/home/xxx/xxx/gunicorn.error.log' #发生错误时log的路径
accesslog = '/home/xxx/xxx/gunicorn.access.log' #正常时的log路径
#loglevel = 'debug'   #日志等级
proc_name = 'gunicorn_project'   #进程名

如还需要其他配置,可以自行查看官方文档

       gunicorn启动:

gunicron需要启动后需要长期运行在后台,使用Linux自带的nohup命令
不使用gunicorn配置文件(需进入项目目录)

$ sudo nohup gunicorn 项目名.wsgi:application -b 127.0.0.1:8000&

使用配置文件方式

$ sudo nohup gunicorn 项目名.wsgi:application -c /home/xxx/xxx/gunicorn.conf.py& 

3、启动站点

  • 启动nginx
$ sudo service nginx reload
$ sudo service nginx restart 
//执行一种即可
  • 启动gunicorn
$ sudo nohup gunicorn 项目名.wsgi:application -b 127.0.0.1:8000&

特殊配置

  1. django自带的后台管理也可能出现问题,建议配置一个/admin,所以,最后我的配置nginx文件如下:
server {
    listen 80;
    server_name 192.168.84.199;
    server_name_in_redirect off;
    access_log /home/webserver/web/nginx.access.log;
    error_log /home/webserver/web/nginx.error.log;

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

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

    location /static/ {
        alias /opt/hrms/hrms/;
    }

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值