Gunicorn+django部署
部署前提是服务器中要有项目中所需的其他服务,例:mysql数据库,nginx,python解释器等,在其他环境搭好的情况下使用此方式可简单部署一个django项目。
至于安装上面提到的这些,有兴趣可点击前往博客查看或CSDN博客查看
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 中配置静态文件路径