Gunicorn+django部署

部署前提是服务器中要有项目中所需的其他服务,例:mysql数据库,nginx,python解释器等,在其他环境搭好的情况下使用此方式可简单部署一个django项目。

至于安装上面提到的这些,有兴趣可点击前往博客查看

1、准备工作

  • 创建干净的虚拟环境
  • 执行下载命令下载所需依赖包
  • 测试数据库链接
  • 测试项目运行
  • (其中详细步骤上面博客链接中有,这里不赘述了)

2、下载Gunicorn

# workon进入项目的虚拟环境中下载
# pip install gunicorn 

4、修改配置文件

# 修改settings.py文件的:INSTALLED_APPS
INSTALLED_APPS = [
    ...
    'gunicorn',  # 把gunicorn添加到apps中
]

5、使用Gunicorn命令运行django项目

# 在manage.py 同级目录下执行命令,注:book是项目名
gunicorn book.wsgi -b 127.0.0.1:8000

基本参数列表:

-c        指定一个配置文件(py文件)
-b        与指定的socket进行绑定
-D        以守护进程形式来运行Gunicorn进程
-w        工作的进程数量,后面加数字;[gunicorn -w 2 untitled.wsgi -b 0.0.0.0:8000]
–threads  后面加数字,处理请求的最大线程数
-k        工作进程类型: sync(默认), eventlet, gevent, or tornado, gthread, gaiohttp.
–chdir    后面加路径,跳转到目录下执行
–reload   后面可加参数,默认参数false,开启为true,开启时当代码发生改变,会重新加载修改的代码,并启动程序,(热加载)
-proxy-protocol
–worker-connections
–access-logfile

6、测试运行

# 执行命令curl后查看返回状态,这里未开启守护进程,加载需要再开一个终端执行命令
curl 127.0.0.1:8000

7、运行可能报错

# 如果使用参数 -k gevent 有可能报错,错误大致信息就是缺少gevent或者gevent版本低,pip下载一下就好,或者更换版本
# 同理使用其它 -k 参数也是如此

8、配置脚本文件启动django项目

在manage.py同级目录创建配置文件gunicorn.conf.py

# gunicorn_config.py
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing

bind = '127.0.0.1:8000'      # 绑定ip和端口号
# chdir = '/opt/workspace/bookstore'  # 目录切换
# backlog = 500              # 监听队列
timeout = 60                 # 超时
worker_class = 'gevent' # 使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = multiprocessing.cpu_count() * 2 + 1    # 进程数
threads = 2  # 指定每个进程开启的线程数
loglevel = 'info'  # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
accesslog = "/opt/workspace/bookstore/log/gunicorn_access.log"  # 访问日志文件
errorlog = "/opt/workspace/bookstore/log/gunicorn_error.log"    # 错误日志文件

9、运行命令

# gunicorn.conf.py 是配置文件
# bookstore 是项目名
# gunicorn -c gunicorn.conf.py bookstore.wsgi:application

10、nginx简单部署示例

找到nginx配置文件打开添加站点

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.flag.space, 109.39.89.199;
        location / {
            proxy_pass http://127.0.0.1:8000;
            #root   html;
            #index  index.html index.htm;
        }
        location /static {
            alias /opt/workspace/bookstore/static;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

其中的 location / 中配置项目的url地址

location /static 中配置静态文件路径

原文地址:https://www.cnblogs.com/wylshkjj/p/15567951.html