Python-app hosten met Gunicorn en Nginx

(Draai je Django of Flask webapplicaties in een productie-omgeving)

De ingebouwde webservers van Python-frameworks zoals Django en Flask zijn bedoeld voor ontwikkeling. Voor productie gebruik je een WSGI-server zoals Gunicorn, gecombineerd met Nginx als reverse proxy.

1. Voorbereiding: Python en Virtual Environment

  • Installeer Python en tools:
    sudo apt update
    sudo apt install python3 python3-pip python3-venv

  • Maak een projectmap en virtual environment:
    mkdir ~/mijn-python-app && cd ~/mijn-python-app
    python3 -m venv venv

  • Activeer de omgeving:
    source venv/bin/activate


2. Applicatie en Gunicorn installeren

  • Upload je Python-app naar de projectmap

  • Installeer afhankelijkheden en Gunicorn:
    pip install -r requirements.txt
    pip install gunicorn


3. Gunicorn draaien en testen

  • Voor Flask:
    gunicorn --workers 3 -b 127.0.0.1:8000 app:app

  • Voor Django:
    gunicorn --workers 3 -b 127.0.0.1:8000 mijnproject.wsgi

  • Test lokaal:
    curl http://127.0.0.1:8000


4. Een Systemd Service aanmaken

  • Maak een servicebestand aan:
    sudo nano /etc/systemd/system/mijn-app.service

  • Voorbeeldconfiguratie:

    [Unit]
    Description=Gunicorn instance to serve mijn-python-app
    After=network.target

    [Service]
    User=gebruikersnaam
    Group=www-data
    WorkingDirectory=/home/gebruiker/mijn-python-app
    ExecStart=/home/gebruiker/mijn-python-app/venv/bin/gunicorn --workers 3 --bind unix:/home/gebruiker/mijn-python-app/app.sock mijnproject.wsgi:application

    [Install]
    WantedBy=multi-user.target
  • Activeer de service:
    sudo systemctl start mijn-app
    sudo systemctl enable mijn-app


5. Nginx als Reverse Proxy configureren

  • Maak een server block aan:

    server {
      listen 80;
      server_name mijndomein.nl;

      location / {
        proxy_pass http://unix:/home/gebruiker/mijn-python-app/app.sock;
        proxy_set_header Host $host;
      }
    }
  • Vergeet niet een aparte location /static/ toe te voegen voor statische bestanden


Samenvatting

  • Gebruik Gunicorn als WSGI-server voor productie

  • Beheer Gunicorn via systemd voor stabiliteit

  • Gebruik Nginx als reverse proxy voor performance en HTTPS


Tip: Gebruik altijd een venv per project om afhankelijkheden gescheiden te houden.

Hulp nodig? Krijg je een 502 Bad Gateway? Controleer de status van Gunicorn:
sudo systemctl status mijn-app
Bekijk logs met:
sudo journalctl -u mijn-app

Was dit antwoord nuttig? 0 gebruikers vonden dit artikel nuttig (0 Stemmen)

Powered by WHMCompleteSolution