[英]How to deploy a django/gunicorn application as a systemd service?
在过去的几年里,我一直只使用docker来容器化和分发 django 应用程序。 第一次,我被要求设置一些东西,以便它可以用旧的方式部署。 我正在寻找一种方法来几乎达到我习惯的封装和自动化水平,同时避免任何陷阱
所以,应用程序( my_app ):
.whl
pip install
安装在任何客户端的服务器上(它依赖于 Apache 作为反向代理/static 文件服务器和 Postgresql 但这与本次讨论无关)
为了确保该应用程序将保持可用,我考虑将其作为由systemd管理的服务运行。 根据这篇文章,/etc/systemd/system/ /etc/systemd/system/my_app.service
可能看起来像这样
[Unit]
Description=My app service
After=network.target
StartLimitIntervalSec=0[Service]
Type=simple
Restart=always
RestartSec=1
User=centos
ExecStart=gunicorn my_app.wsgi:application --bind 8000
[Install]
WantedBy=multi-user.target
而且,据我所知,我可以为该服务提供环境变量,以供os.environ.get()
在/etc/systemd/system/my_app.service.d/.env
中的某处读取
SECRET_KEY=somthing
SQL_ENGINE=somthing
SQL_DATABASE=somthing
SQL_USER=somthing
SQL_PASSWORD=somthing
SQL_HOST=somthing
SQL_PORT=somthing
DATABASE=somthing
pip install --upgrade my_app
之后重启服务是否足以升级应用程序?gunicorn my_app.wsgi:application
将使用项目使用的正确版本的库? 或者我需要使用virtualenv吗? 如果是这样,应该在ExecStart
中使用source /path/to/the/venv/bin/activate
还是有更简洁的方法来确保ExecStart
在单独的虚拟环境中运行?python manage.py migrate
和python manage.py collectstatic
应该在哪里? 我应该使用 /etc/systemd/system/my_app.service 中的那些吗也许你可以试试,但我也不确定它是否有效。 这是针对第三个问题。
您必须创建一个virtualenv
,在其中安装gunicorn
和django
。
#gunicorn_config.py
command = 'env/bin/gunicorn'
pythonpath = 'env/myproject'
bind = '127.0.0.1:8000'
systemd ExecStart
中填写env/bin/gunicorn -c env/gunicorn_config.py myproject.wsgi
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.