Je Python applicatie wordt gestart in een container met daarin de Python virtual environment. Deze container is gebaseerd op de door jou gekozen versie van Python. De container heeft maximaal de beschikking over 8 CPU cores en 10GB RAM geheugen.

De container maakt gebruik van de data die je op ons bestandssysteem hebt opgeslagen. Op het bestandssysteem staat dus je Python-applicatie. Je kunt deze bestanden via FTP plaatsen, wijzigen en verwijderen. Dat gaat buiten de container om. Je kunt dus niet rechtstreeks met de container communiceren.

Link naar deze kopApache als proxy

Jouw website bestaat uit een set hostnamen (zoals example.org of www.example.org), voorzien van een SSL-certificaat. Deze set hostnamen wordt door onze Apache servers herkend en requests van websitebezoekers worden door Apache aangenomen.

Om je applicatie aan de buitenwereld beschikbaar te maken, laten wij Apache specifieke requests naar je container routeren. Welke URL’s precies naar je applicatie gestuurd moeten worden, kun je via MyVevida instellen bij het beheer van de applicatie. Zie Applicaties aanmaken en beheren.

Omdat Apache alle binnenkomende requests doorverbindt naar de door jou ingestelde applicaties, kun je binnen een website verschillende applicaties hebben, zolang elk maar een unieke URL heeft.

Link naar deze kopDe uWSGI applicatie

De schakel tussen Apache en jouw Python code wordt gevormd door uWSGI. uWSGI is een manier om te communiceren tussen de webserver en de container waarbinnen je applicatie actief is. Vanwege de manier waarop ons systeem is ingericht, is een aantal zaken nodig om de applicatie goed te starten.

Link naar deze koprequirements.txt

In de hoofdmap van je applicatie kun je een bestand plaatsen met de naam requirements.txt. Deze beschrijft de dependencies van jouw applicatie. Een eenvoudig voorbeeld daarvan voor een Django site ziet er zo uit:

Django
mysqlclient

Eventueel kun je hieraan specifieke versievereisten toevoegen. Als je bijvoorbeeld versie 2 of hoger van Django wilt, gebruik je:

Django>2

Als je geen specifiek wensen invult, krijg je de nieuwste versie van het gekozen pakket op het moment van het aanmaken van de virtuele omgeving.

Zodra de container gestart wordt, worden deze requirements voor je geïnstalleerd met pip. De log van de installatie wordt weggeschreven naar pip.log. Wanneer later de container opnieuw start en requirements.txt nieuwer is dan de geïnstalleerde requirements, dan wordt de installatie opnieuw uitgevoerd.

De container start automatisch zodra er voor het eerst een request binnenkomt. Bezoek dus na het aanmaken van je applicatie direct zelf de URL, aangezien de installatie enige tijd kan nemen. Je kunt de container geforceerd herstarten door in MyVevida bij de applicatie op “Herstart applicatie” te klikken.

Link naar deze kopwsgi.py

Ons systeem verwacht een bestand met de naam wsgi.py in de map van je applicatie op het bestandssysteem. In die wsgi.py definieer je de applicatie. Een voorbeeld hiervan is de applicatie waarmee een nieuw pakket Python Hosting wordt opgeleverd, die een statische HTML pagina serveert.

Link naar deze kopEen eenvoudig voorbeeld

Het meest simpele voorbeeld van een werkende Python-applicatie is natuurlijk Hello World. Om dit voor elkaar te krijgen, is geen requirements.txt nodig. Het enige wat moet bestaan is het bestand wsgi.py, met daarin de volgende drie regels code:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return 'Hello World\n'.encode('UTF-8')

In deze code zie je het volgende:

  1. Er wordt een applicatie gedefinieerd als functie die door uWSGI kan worden aangeroepen. Let op de naam ‘application’ en de twee parameters die gedefinieerd zijn voor deze functie.
  2. Omdat het een hele simpele applicatie is, moeten we zelf een paar HTTP headers zetten. We serveren een return-code 200 (HTTP-jargon voor ‘alles is in orde’) en vertellen de browser dat we HTML gaan terugsturen.
  3. Vervolgens sturen we een UTF-8 gecodeerde string terug met daarin de tekst Hello World. (NB, dit is ondanks punt 2, geen geldige HTML, maar het werkt wel).

Wat vind jij van dit antwoord?

Bedankt voor je feedback!

Er is een fout opgetreden. Probeer het later opnieuw.