DEV Community

Ruben Voß
Ruben Voß

Posted on

7. Gunicorn als service - Django in Produktion Teil 7

Vorwort

Mit gunicorn meine_app.wsgi kannst du seit der letzten Folge deinen Appserver starten. Das ganze wäre aber etwas unpraktisch, wenn du immer eine Shell-Sitzung mit deinem Gunicorn offen haben müsstest, um deine Webapp laufen zu lassen. Außerdem, was passiert wenn die App crasht? Was passiert falls du gerade kein Internet hast, oder wenn du mal deinen Server neu starten willst? Da jedes mal den gleichen Befehl wieder einzugeben macht keinen Sinn. Deswegen gibt es .service Dateien, die dafür sorgen dass dein Gunicorn automatisch beim Neustart / Anschalten deines Servers gestartet wird.

Installation von gunicorn.service

Lege entweder eine Datei an, oder verlinke von deiner Repo aus:

sudo ln -s /srv/www/meine_repo/services/gunicorn.service /etc/systemd/system/gunicorn.service
# oder:
sudo touch /etc/systemd/system/gunicorn.service
Enter fullscreen mode Exit fullscreen mode

Diese kannst du mit folgendem Inhalt füllen:

[Unit]
Description=Gunicorn service that serves meine_app
After=network.target

[Service]
# Hier kannst du das richtige environment laden
Environment="ENV_NAME=production"

# Nutze am besten nicht root, sondern einen eigens erstellten nutzer, z.B. meine_app_gunicorn
User=root
Group=root

# Deine .wsgi - Datei ist in deinem django-Projektverzeichnis
# Hier wird dein Start-Befehl ausgeführt
WorkingDirectory=/srv/www/meine_repository/mein_projekt

# Das hier Startet deine django App
ExecStart=/srv/www/meine_repository/venv/bin/gunicorn --log-file /var/log/gunicorn --workers 1 --bind 127.0.0.1:8000 meine_app.wsgi

ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Jetzt musst du nur noch den service anmachen:

# Lade deine neue Konfiguration
sudo systemctl daemon-reload
# Schalte gunicorn ein, sodass der Service automatisch bei einem reboot angeht
sudo systemctl enable gunicorn
# Starte gunicorn
sudo systemctl start gunicorn

# Jetzt sollte hier ein grünes 'started' und 'enabled' rauskommen:
sudo systemctl status gunicorn
Enter fullscreen mode Exit fullscreen mode

PS: probiere doch mal ein reboot aus, danach sollte dein gunicorn auch wieder laufen.

Viel Spaß beim Coden,
Dein Ruben

Mein Blog

Top comments (0)