在 systemd 服务中使用 DotEnv 运行 Daphne

时间:2021-04-05 20:26:57

标签: django systemd daphne

我正在使用一个 .env 文件,其中包含我的 Django 应用程序的配置。我有一个运行 Daphne 的 systemd 服务(类似于下面的内容)

[Unit]
Description=WebSocket Daphne Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/django/myproject/src
ExecStart=/home/django/myproject/venv/bin/python /home/django/myproject/venv/bin/daphne -e ssl:8001:privateKey=/etc/letsencrypt/live/myproject.com/privkey.pem:certKey=/etc/letsencrypt/live/myproject.com/fullchain.pem myproject.asgi:application  
Restart=on-failure

[Install]
WantedBy=multi-user.target

此外,我通过类似的机制使用 gunicorn,该机制非常有效。但是,Daphne 没有。

当我通过 systemctl start daphne.service 运行它时,它告诉我 Django 设置配置不正确所以,我尝试像这样设置 dotenv 文件中的 asgi.py

dotenv.load_dotenv( os.path.join(os.path.dirname(__file__), '.env' ))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.dev')

if os.getenv('DJANGO_SETTINGS_MODULE`):
    os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE')

但这只是给了我同样的错误。任何想法如何解决这一问题?我检查了这个 response,但在 daphne.service 中设置环境变量似乎很荒谬/多余。

1 个答案:

答案 0 :(得分:1)

问题似乎是您为 ExecStart 行指定的路径

你有:

ExecStart=/home/django/myproject/venv/bin/python ...

应该是

ExecStart=/home/django/myproject/venv/bin/daphne ...

https://build.vsupalov.com/django-systemd-crashcourse/

相关问题