我正在按照DigitalOcean上的this指南在服务器上设置Django项目。但是,我对Gunicorn和Nginx并不熟悉,因此遇到了很多问题。
服务器正在运行Ubuntu 18.04,Python 3.6.7,Django 2.1.3,virtualenvwrapper 4.8.4,gunicorn 19.9.0。
运行curl --unix-socket /run/gunicorn.sock localhost
时返回curl: (56) Recv failure: Connection reset by peer
我怀疑这是我处理Django SECRET_KEY
的方式。
我正在使用virtualenvwrapper处理我的虚拟环境并在postactivate
中设置环境变量,并通过以下方式在predeactivate
中取消设置它们:
postactivate
:
if [[ -n $SECRET_KEY ]]
then
export SECRET_KEY_BACKUP=$SECRET_KEY
fi
export SECRET_KEY='my-secret-key'
predeactivate
:
if [[ -n $SECRET_KEY_BACKUP ]]
then
export SECRET_KEY=$SECRET_KEY_BACKUP
unset SECRET_KEY_BACKUP
else
unset SECRET_KEY
很明显,除非激活了虚拟环境,否则变量将不可用。我用settings.py
检索了os.environ.get('SECRET_KEY')
中的变量。
gunicorn如何在虚拟环境中工作?有没有办法让金枪鱼激活环境? 否则,关于SECRET_KEY的最佳做法是什么?
非常感谢!
编辑:添加了变量检索方法。
Edit2:systemd服务文件:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=<name>
Group=www-data
WorkingDirectory=/home/<name>/projects/<projectname>/<appname>
ExecStart=/home/<name>/.virtualenvs/<appname>/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
<appname>.wsgi:application
[Install]
WantedBy=multi-user.target