Deze pagina gaat over het gebruik van Supervisor om je Python-applicaties continu draaiende te houden op Linux. In deze gids leggen we stap voor stap uit wat Supervisor is, waarom het zo’n waardevol hulpmiddel is, en hoe je het eenvoudig kunt inzetten in je projecten.
Doel #
Supervisor is een lichtgewicht process control system dat speciaal is ontworpen voor het betrouwbaar beheren van processen. Voor Python-applicaties betekent dit dat je niet alleen automatisch herstart wanneer er een crash optreedt, maar dat je ook eenvoudig meerdere processen kunt beheren. Dit zorgt voor een stabiele en altijd beschikbare applicatie, wat cruciaal is in productieomgevingen.
Voordelen #
- Automatische herstart bij crashes:
Met Supervisor hoef je je geen zorgen te maken over onverwachte stops. Zodra je applicatie faalt, start Supervisor deze direct opnieuw op. Dit minimaliseert downtime en zorgt voor een naadloze gebruikerservaring. - Eenvoudige configuratie en beheer van meerdere processen:
De configuratiebestanden van Supervisor zijn overzichtelijk en intuïtief. Je kunt met slechts enkele regels instellen hoe en wanneer jouw Python-scripts moeten worden uitgevoerd. Dit maakt het beheer van meerdere processen eenvoudig en efficiënt.
Voorbeeld: Een eenvoudige Supervisor-configuratie #
Hieronder vind je een voorbeeldconfiguratie die je als basis kunt gebruiken voor je Python-applicatie:
[program:myscript]
command=/usr/bin/python3 /path/to/your/script.py
autostart=true
autorestart=true
stderr_logfile=/var/log/myscript.err.log
stdout_logfile=/var/log/myscript.out.log
PythonUitleg van de configuratie:
- command: Het pad naar de Python-interpreter gevolgd door de locatie van jouw script.
- autostart: Zorgt ervoor dat het script automatisch gestart wordt zodra Supervisor wordt opgestart.
- autorestart: Stelt Supervisor in staat om het script automatisch opnieuw te starten als het onverwacht stopt.
- stderr_logfile & stdout_logfile: Logbestanden waarin respectievelijk foutmeldingen en standaarduitvoer worden opgeslagen, wat het debuggen vergemakkelijkt.
Installatie van Python & Supervisor #
Welkom op deze pagina waar we stap voor stap uitleggen hoe je Python en Supervisor installeert op een Linux-systeem. Deze gids helpt je een solide basis op te zetten voor het beheren en automatisch herstarten van je Python-applicaties. Laten we aan de slag gaan!
1. Installatie van Python #
Voor de meeste moderne Linux-distributies is Python 3 standaard beschikbaar. Toch kan het handig zijn om zeker te weten dat je de juiste versie en bijbehorende tools hebt.
Voorbeeldstappen op Debian/Ubuntu:
sudo apt-get update
sudo apt-get install python3 python3-pip
PythonDeze commando’s zorgen ervoor dat zowel Python 3 als pip geïnstalleerd zijn. Pip is essentieel voor het installeren en beheren van Python-pakketten.
2. Installatie van Supervisor #
Supervisor is een krachtige tool voor het beheren van processen. Het biedt de mogelijkheid om jouw Python-applicatie automatisch opnieuw op te starten bij een crash en het eenvoudig beheren van meerdere processen.
Stappen om Supervisor te installeren: #
- Update je pakketlijsten:
Begin met het updaten van je pakketbronnen:
sudo apt-get update
Python- Installeer Supervisor:
Installeer vervolgens Supervisor met:
sudo apt-get install supervisor
PythonDeze commando’s downloaden en installeren Supervisor op je systeem, zodat je meteen aan de slag kunt met het beheren van je applicaties.
3. Controle van de Installatie #
Na de installatie is het belangrijk om te bevestigen dat alles correct is geïnstalleerd.
Controleer de Supervisor-versie:
Voer in de terminal het volgende commando uit:
supervisord --version
PythonBest Practices #
- Systeemonderhoud:
Houd je systeem up-to-date met:
sudo apt-get update && sudo apt-get upgrade
PythonDit helpt om beveiligingsproblemen te voorkomen en zorgt voor een stabiele omgeving.
- Lees de Officiële Documentatie:
Zowel Python als Supervisor hebben uitgebreide documentatie. Deze bronnen kunnen nuttig zijn bij het oplossen van specifieke problemen of bij het opzetten van geavanceerde configuraties. - Test je Installatie:
Maak na de installatie een eenvoudige Supervisor-configuratie en start een klein testscript om zeker te zijn dat alles naar behoren werkt.
Configuratie van Supervisor voor je Python-applicatie #
Welkom! In deze sectie laten we zien hoe je Supervisor configureert om je Python-applicatie soepel en betrouwbaar te draaien op Linux. We behandelen onder andere het opzetten van een configuratiebestand, het binnenhalen van je project met Git en het instellen van log management.
1. Opzetten van een configuratiebestand #
Voordat je begint, is het belangrijk om je project op de server te halen. Dit doe je bijvoorbeeld met Git:
cd /opt
git clone https://github.com/jouw-gebruikersnaam/jouw-project.git
PythonPlaats vervolgens het Supervisor-configuratiebestand in de map /etc/supervisor/conf.d/
. Dit zorgt ervoor dat Supervisor de configuratie automatisch oppikt.
2. Voorbeeldconfiguratie voor je applicatie #
Maak een nieuw bestand, bijvoorbeeld /etc/supervisor/conf.d/myapp.conf
, en voeg de volgende inhoud toe:
[program:myapp]
command=/usr/bin/python3 /opt/jouw-project/app.py
directory=/opt/jouw-project
autostart=true
autorestart=true
numprocs=1
stdout_logfile=/var/log/myapp.out.log
stderr_logfile=/var/log/myapp.err.log
PythonUitleg van de configuratie:
- command: Geeft het pad naar de Python-interpreter en je script aan. Zorg ervoor dat dit pad klopt voor jouw omgeving.
- directory: Dit is de werkdirectory waarin je applicatie draait. Hierdoor worden relatieve paden correct geïnterpreteerd.
- autostart: Met deze optie wordt je applicatie automatisch gestart wanneer Supervisor opstart.
- autorestart: Als je applicatie onverwacht stopt, zorgt deze instelling ervoor dat Supervisor de applicatie automatisch herstart.
- numprocs: Hiermee kun je aangeven hoeveel instanties (of workers) je wilt draaien. Stel dit in op het aantal processen dat je nodig hebt.
- stdout_logfile en stderr_logfile: Deze opties zorgen ervoor dat de standaard uitvoer en foutmeldingen in aparte logbestanden worden weggeschreven, zodat je makkelijk kunt debuggen.
3. Log Management #
Logbestanden zijn essentieel voor het monitoren en oplossen van problemen. Hieronder enkele tips om je logbeheer optimaal in te richten:
- Logbestanden configureren:
Doorstdout_logfile
enstderr_logfile
in te stellen, zorg je voor een duidelijk overzicht van de normale output en eventuele foutmeldingen. - Logrotatie:
Grote logbestanden kunnen snel groeien. Het is daarom handig om een tool zoalslogrotate
in te stellen. Hieronder een voorbeeldconfiguratie:
/var/log/myapp*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 root adm
}
PythonDeze configuratie roteert je logbestanden dagelijks, houdt de logs van de afgelopen 7 dagen bij en comprimeert oudere logs automatisch. Dit voorkomt dat de logbestanden te groot worden en zorgt voor overzichtelijkheid.
Inzet en Monitoring #
Nu je Supervisor hebt geconfigureerd om je Python-applicatie te beheren, is het tijd om te leren hoe je de service inzet en monitort. Dit helpt je om ervoor te zorgen dat je applicatie altijd draait zoals bedoeld en dat eventuele problemen snel worden opgespoord en opgelost.
Starten en Beheren #
Supervisor maakt het beheer van je processen bijzonder eenvoudig. Hieronder vind je een aantal commando’s en tips om de service te starten, de status te controleren en indien nodig herstarten:
- Supervisor starten:
Hoewel Supervisor vaak automatisch opstart na installatie, kun je het handmatig starten met:
sudo service supervisor start
Python- Status controleren:
Met het volgende commando krijg je een overzicht van alle processen die door Supervisor worden beheerd:
supervisorctl status
PythonHier zie je per applicatie of deze actief is (RUNNING) of niet. Dit overzicht helpt je om in één oogopslag te zien of alles naar behoren functioneert.
- Applicatie herstarten:
Mocht je wijzigingen hebben doorgevoerd of een probleem willen verhelpen, dan kun je een specifieke applicatie herstarten:
supervisorctl restart myapp
PythonHierbij wordt ‘myapp’ (de naam die je in je configuratie hebt opgegeven) opnieuw opgestart, wat handig is bij updates of wanneer je een probleem hebt opgelost.
Troubleshooting #
Ondanks een goed ingerichte setup kunnen er altijd incidentele problemen optreden. Gelukkig biedt Supervisor uitgebreide mogelijkheden om snel inzicht te krijgen in wat er misgaat en hoe je het kunt verhelpen.
- Logbestanden analyseren:
Supervisor schrijft zowel de standaard output als foutmeldingen weg in de logbestanden die je hebt ingesteld (stdout_logfile
enstderr_logfile
). Om snel een idee te krijgen van wat er speelt, kun je bijvoorbeeld de foutlogs in real-time bekijken:
tail -f /var/log/myapp.err.log
PythonDit commando toont continu de laatste regels van het foutlogbestand, zodat je direct kunt zien of er fouten optreden.
- Veelvoorkomende problemen en oplossingen:
- Applicatie crasht regelmatig:
Controleer de foutlogs op aanwijzingen. Vaak wijzen resourceproblemen (zoals onvoldoende geheugen) of specifieke codefouten hierop. Het kan helpen om de applicatie tijdelijk in een debugging-modus te draaien voor meer gedetailleerde informatie. - Configuratiefouten:
Kleine typefouten of onjuiste paden in je Supervisor-configuratie kunnen ervoor zorgen dat je applicatie niet opstart. Dubbelcheck je configuratiebestand en zorg dat alle instellingen correct zijn. - Netwerk- of verbindingsproblemen:
Als je applicatie afhankelijk is van externe services of databases, controleer dan of de netwerkverbindingen en firewall-instellingen goed zijn geconfigureerd. - Te frequente herstarts:
Als een applicatie te vaak crasht en herstart, kan dit wijzen op een structureel probleem in de code. In dat geval is het verstandig om de applicatie grondig te testen en de logs te analyseren om de oorzaak te achterhalen.
- Applicatie crasht regelmatig:
Best Practices en Onderhoud #
Het onderhouden van je Python-applicatie is net zo belangrijk als het initiële opzetten ervan. In deze sectie bespreken we een aantal best practices voor updates, beveiliging en monitoring zodat je systeem betrouwbaar en veilig blijft draaien.
Updates en Wijzigingen #
Wanneer je wijzigingen aanbrengt in je configuratie of de applicatie zelf, is het cruciaal om deze updates door te voeren zonder downtime. Supervisor biedt handige commando’s om je configuratie her te lezen en toe te passen:
- Configuratie aanpassen:
Werk eerst je configuratiebestand bij, bijvoorbeeld/etc/supervisor/conf.d/myapp.conf
. - Herlezen van de configuratie:
Voer het volgende commando uit om Supervisor te laten weten dat er wijzigingen zijn:
sudo supervisorctl reread
PythonDit commando zorgt ervoor dat Supervisor de nieuwe of gewijzigde configuratiebestanden oppikt.
- Updaten van de processen:
Na het herlezen, pas je de wijzigingen toe met:
sudo supervisorctl update
PythonHierdoor worden de processen die in de gewijzigde configuratie zijn opgenomen, zonder downtime geüpdatet. Zo blijft je systeem altijd operationeel tijdens de updates.
Beveiliging #
Een goed beveiligde omgeving is essentieel voor de betrouwbaarheid van je applicatie. Hier zijn enkele belangrijke overwegingen:
- Gebruikersrechten:
Zorg ervoor dat je applicatie niet als root draait. Maak bij voorkeur een specifieke gebruiker aan voor je applicatie en geef deze alleen de benodigde rechten. Dit beperkt de schade als er iets misgaat. - Firewall gebruiken:
Probeer alle porten dicht te zetten die je niet gebruikt. Kijk bijvoorbeeld naar de ubuntu firewall om deze te benutten of een netwerk of cloud variant als je meer dan alleen een host based firewall wilt toepassen. - Toegang tot logbestanden:
Logbestanden bevatten vaak waardevolle informatie over de werking van je applicatie. Beperk de lees- en schrijfrechten tot alleen die gebruikers die deze informatie echt nodig hebben. Je kunt de toegangsrechten instellen met:
sudo chown myappuser:myappgroup /var/log/myapp*.log
sudo chmod 640 /var/log/myapp*.log
PythonHiermee voorkom je dat onbevoegden gevoelige informatie in de logbestanden inzien.
Monitoring Tools #
Naast de ingebouwde mogelijkheden van Supervisor is het vaak nuttig om je applicatie te koppelen aan externe monitoring tools. Dit geeft je extra zekerheid dat je applicatie soepel draait:
- Externe monitoring:
Denk bijvoorbeeld aan tools als Prometheus, Grafana of Nagios. Deze tools kunnen de status van je applicatie en server bewaken en je direct alarmeren als er iets misgaat. - Integratie met Supervisor:
Je kunt een eenvoudige monitoring setup combineren met Supervisor door regelmatig de status op te vragen metsupervisorctl status
. Eventuele afwijkingen kun je dan via je monitoring systeem laten melden. - Log aggregatie en analyse:
Overweeg ook om log management tools zoals ELK (Elasticsearch, Logstash, Kibana) te gebruiken. Hiermee kun je de logs van je applicatie centraal verzamelen en analyseren. Dit maakt het identificeren en oplossen van problemen nog sneller en efficiënter.