Django + Nginx + Gunicorn 部署

Django + Nginx + Gunicorn 部署

一、前期准备

1、版本

  • Ubuntu 18
  • python 3.6.5
  • Django 1.11.12
  • Nginx 1.14.0
  • Gunicorn 19.9.0
  • gevent 1.4.0

2、安装(服务器)

1、安装nginx

sudo apt install nginx

2、安装python3(已经安装请忽略)

# ubuntu 18 自带的就是3.6.5 其它Ubuntu版本的请使用命令安装
sudo apt update
sudo apt install python3.6

3、安装pip(已经安装请忽略)

sudo apt-get install python3-pip

4、安装虚拟环境

sudo pip install virtualenv

二、Django项目

1、修改相关配置

1、关闭debug,修改hosts

#在Django的settings配置文件中将DEBUG,ALLOWED_HOSTS

DEBUG = False

#设置允许访问的ip地址,*代表所有,也可以写具体的ip地址
ALLOWED_HOSTS = [ '*' ]

2、修改数据连接,如图所示
在这里插入图片描述
3、将静态资源打包
在这里插入图片描述
使用命令 collectstatic
在这里插入图片描述
4、导出项目所依赖的库到项目根目录

pip freeze > requirements.txt

2、项目上传

1、注意

最好将本地项目复制一份,然后将项目下的虚拟环境删除

2、在windows下可以使用图形化界面工具WinScp或者Xshel

scp -r 本地项目根目录绝对路径 服务器用户名@服务器ip地址:上传服务器的目录

3、linux或者mac使用命令

scp -r 本地项目根目录绝对路径 服务器用户名@服务器ip地址:上传服务器的目录
例如:scp /home/xxx/work/PycharmProjects/DjangoDeployExample [email protected]:/home/www/django

3、连接远程服务器创建虚拟环境

1、说明

由于python兼容性的问题,不建议在全局环境中部署,而且一个服务器有可能部署多个项目,所以推荐在虚拟环境中部署
连接远程服务器
ssh 用户名@IP地址 -p 端口号(默认80)

2、安装虚拟环境

扫描二维码关注公众号,回复: 6637133 查看本文章
sudo pip install virtualenv

3、创建虚拟环境

# 在项目的根目录(建议),也可以在其他地方均可
cd /home/www/django

# 创建虚拟环境,名字随意
virtualenv venv

4、激活虚拟环境

source .venv/bin/activate

4、导入虚拟环境

使用pip

pip install -r requirement.txt

三、Gunicorn

1、安装

1、在项目的虚拟环境安装gunicorn

# 如果下载速度过慢使用国内源
pip3 install gunicorn -i https://pypi.douban.com/simple

2、在项目的虚拟环境中安装gevent

# 基于协程的库,提高并发量
pip3 install gevent -i https://pypi.douban.com/simple

2、通过Gunicorn启动项目

2.1、命令启动(不推荐)

1、命令

# 常见的参数
gunicorn -w 10 -k 'gevent' -b 0.0.0.0:9000 DjangoDeployExample.wsgi:application --reload -t 500 -D --access-logfile logs/gunicorn.log

2、参数说明
在这里插入图片描述
在这里插入图片描述

2.2、通过配置文件启动(常用)

1、创建gunicorn.conf文件

# 并行工作进程数
workers = 4
# 指定每个进程的线程数
threads = 2
# 监听内网端口8000
bind = '192.168.58.44:8000'
# 设置守护进程(linux有效)
daemon = 'true'
# 工作模式协程
worker_class = 'gevent'
# 设置最大并发量
worker_connections = 2000
# 设置进程文件目录
pidfile = '/home/xxx/work/DjangoDeployExample/product/gunicorn//gunicorn.pid'
# 设置访问日志和错误信息日志路径
accesslog = '/home/xxx/work/DjangoDeployExample/product/gunicorn/logs/gunicorn_acess.log'
errorlog = '/home/xxx/work/DjangoDeployExample/product/gunicorn/logs/gunicorn_error.log'
# 设置日志记录水平
loglevel = 'error'

2、启动

gunicorn -c gunicorn.conf DjangoDeployExample.wsgi:application

3、注意

注意用户权限问题,比如pid文件 访问日志 errorlog 如果权限不够可以给目录授权一下

四、nginx

1、说明

本教程是通过命令安装,一般默认安装在/etc/nginx/,下载安装包的安装的可以根据自己的目录来配置,具体的一些细节这里不介绍,具体请自行查询

注意:在系统的命令窗口中使用,上面都是在虚拟环境下使用

2、命令介绍

1、查看nginx是否启动

ps aux|grep nginx

在这里插入图片描述
2、检查nginx配置文件是否有错

# -t 测试     nginx的配置文件
sudo nginx -t xxx/xxx/nginx.conf

3、通过配置文件启动

sudo nginx -c xxx/xxx/nginx.conf

4、关闭nginx

nginx -s stop
# 其它方式
sudo pkill -9 nginx 

3、反向代理

1、nginx.conf配置文件
不建议直接修改nginx的配置文件,最好复制一份通过指定配置文件启动

# 用户  用户名    用户组
user  zhangwei  zhangwei;
#设置值和CPU核心数一致
worker_processes auto;
# 全局错误日志 (注意权限)
error_log  /home/xxx/work/PycharmProjects/DjangoDeployExample/product/nginx/logs/error.log;
# pid文件所在目录 (注意权限)
pid  /home/xxx/work/PycharmProjects/DjangoDeployExample/product/nginx//nginx.pid;
# events块配置
events {
  # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
  use epoll;
  # 单个work进程允许的最大连接数,默认为512
  worker_connections 65535;
}
# http块配置
http {
    # 文件扩展名与文件类型映射表。设定mime类型(邮件支持类型),类型由mime.types文件定义
    # 
    include /etc/nginx/mime.types;
    #默认文件类型,默认为text/plain
    default_type application/octet-stream;
    # http模块的的访问日志
    access_log  /home/zhangwei/work/PycharmProjects/DjangoDeployExample/product/nginx/logs/access.log;
    # #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    #(sendfile系统调用不需要将数据拷贝或者映射到应用程序地址空间中去)
    sendfile  on;
    # 连接超时时间,默认为75s,可以在http,server,location块
    keepalive_timeout  65;
    server {
        listen       80;
        #  有域名的话绑定域名,没域名写ip地址
        server_name  www.hello.com;
        # 全局错误的界面
        error_page  404  /404.html;
        # 反向代理的路径(和upstream绑定),location后面设置映射的路径
        location / { 
           # 注意代理的ip地址一定要和gunicorn里的端口一致
           proxy_pass http://192.168.58.44: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  /home/xxx/work/PycharmProjects/DjangoDeployExample/static;
            # 过期30天,静态文件不怎么更新,过期可以设大一点,
             # 如果频繁更新,则可以设置得小一点。
            expires 30d;
        }
     # 多媒体资源等文件 路径
        location /media {
            alias /home/xxx/work/PycharmProjects/DjangoDeployExample/media/;
            # 过期30天,静态文件不怎么更新,过期可以设大一点,
            # 如果频繁更新,则可以设置得小一点。
            expires 30d;
        }
    }
}

2、本案例直接将nginx放在工程下

sudo nginx -c xxx/xxx/nginx.conf

3、注意

  • 一定要注意文件的权限问题日志 pid文件的权限问题
  • 代理的ip地址一定要和gunicorn里的端口一致
  • mime.types注意引入的路径,因为不是修改默认的nginx配置文件

猜你喜欢

转载自blog.csdn.net/qq_38953577/article/details/90672037
今日推荐