生产中的Django virtualenvwrapper环境变量

时间:2019-02-27 13:02:12

标签: django gunicorn virtualenvwrapper

我正在按照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

0 个答案:

没有答案