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 updatesudo apt install python3 python3-pip python3-venv -
Maak een projectmap en virtual environment:
mkdir ~/mijn-python-app && cd ~/mijn-python-apppython3 -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.txtpip 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-appsudo 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
