前文中,我们只是简单地用gunicorn命令行来启动django代码。如果需要进行一些复杂的配置,给命令加参数,显然不是一个理想的方法,为此,我们可以把这些配置参数同一放到一个文件,然后gunicorn启动时,调用该配置文件即可。
1. 直接运行启动django项目
切换到django项目根目录,
执行下列命令,启动django项目,
gunicorn myproject.wsgi
启动后状态如下,
可以看到,直接启动项目后,gunicorn默认侦听 127.0.0.1:8000端口,采用 sync 模式,而且是在前台运行中,如果关闭终端,gunicorn也会关闭。
当然了,可以在启动时加入参数配置,来改变默认行为,不过如果配置的参数过多,很容易出错,因此一般把这些配置放到一起,形成一个配置文件。
2. 带配置文件启动django项目
首先,我们按住【Ctrl + C】,关掉刚刚启动的gunicorn,执行下列命令来,带配置文件启动gunicorn
sudo /usr/local/bin/gunicorn --chdir /var/www/certificate_system/ myproject.wsgi -c /etc/gunicorn/gunicorn.conf
可以简化为【需要切换到项目的根路径,并且给gunicorn命令配置了环境变量】
sudo gunicorn myproject.wsgi -c /etc/gunicorn/gunicorn.conf
启动结果如下
可以看到,执行完上述命令后,控制台没有返回任何消息,不过不同的是,gunicorn没有一直占据着终端,在命令执行完毕后,它释放了终端。
2.1 gunicorn配置文件内容
从上图可以看到,我们新建了一个gunicorn的配置文件【/etc/gunicorn/gunicorn.conf】,注意它所属的用户/组以及读写权限。
配置文件内容如下
daemon = "False"
daemon = "True"
workers = 3
threads = 2
worker_class = "sync"
pidfile = '/run/gunicorn.pid'
bind = "0.0.0.0:8000"
worker_connections = 1024
backlog = 2048
accesslog = "/var/log/gunicorn/access.log"
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
errorlog = "/var/log/gunicorn/error.log"
loglevel = "debug"
user='root'
该配置,我人为地化了四个部分,第一部分是进程相关,第二部分是网络连接相关,第三部分是日志相关,第四部分是用户相关。
第一部分,解释如下:
daemon:
-- 配置gunicorn是在前台运行,还是作为daemon,在后台运行
-- True: 在后台运行,不占用终端; False: 在前台运行,会占用终端
workers:
-- gunicorn是pre-work模型,也就是运行前由master进程产生多个worker进程,
-- 这里配置worker进程的数量
threads:
-- 配置线程数量
worker_class:
-- gunicorn的网络请求是有worker进程处理,而处理网络请求的方式有很多种
-- 在本文中,配置称sync,当然还有其他方式
pidfile:
-- gunicorn进程ID所在的文件,在gunicorn启动时,自动创建
第二部分,解释如下:
bind:
-- gunicorn绑定的socket
-- 可以是本文中的tcp socket,【0.0.0.0:8000】,0.0.0.0:代表接收服务器所有网卡的数据
-- 也可以是unix socket,比如【unix://path/to/some_file.sock】
worker_connections:
-- 单个worker进程处理网络最大请求数
backlog:
-- tcp socket可以接收最大网络请求数
第三部分,解释如下:
accesslog:
-- 访问日志文件的路径,该文件的权限需要修改,否则gunicorn进程无法访问
access_log_format:
-- 访问日志文件的日志格式
errorlog:
-- 错误日志文件的路径,该文件的权限同样需要修改,否则gunicorn进程无法访问
loglevel:
-- 错误日志的级别,
-- 可以是debug, info, warning, error, critical等五种
日志文件的权限,所属的用户和组,如下
wenca@wenca-ubuntu:/var/www/certificate_system/myproject$ ll /var/log/gunicorn/
total 116
drwxr-xr-x 2 root adm 4096 Nov 29 02:28 ./
drwxrwxr-x 13 root syslog 4096 Nov 30 00:06 ../
-rw-rw-r-- 1 www-data adm 534 Nov 30 03:38 access.log
-rw-rw-r-- 1 www-data adm 98922 Nov 30 03:55 error.log
第四部分,解释如下:
user:
-- 以什么用户身份来运行gunicorn进程,
-- 该用户可以读取数据文件、配置文件,读写日志文件、进程ID文件
2.2 修改django配置文件
修改【 ./myproject/settings.py】文件,在【INSTALLED_APPS】部分加入【gunicorn】