Container met virtuele omgeving

Je Python applicatie wordt gestart door een container te starten met daarin de Python virtual environment. Deze virtuele omgeving is gebaseerd op de door jou gekozen versie van Python. De omgeving wordt gevuld met alle Python-pakketten die je applicatie nodig heeft. 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 staan dus de Python-pakketten en je Python-applicatie. Je kunt deze bestanden plaatsen, wijzigen en verwijderen. Dat gaat buiten de container om. Je kunt dus niet rechtstreeks met de container communiceren.

Het herstarten van een container kun je via MyVevida forceren door bij de details van de applicatie op de knop herstart te klikken. Dit zorgt ervoor dat de container opnieuw wordt aangemaakt en ook dat eventuele nieuwe code wordt geladen van het bestandssysteem. Ook wordt (indien nodig) de virtuele omgeving opnieuw aangemaakt.

Apache 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 afgehandeld.

Om je applicatie aan de buitenwereld beschikbaar te maken, laten wij Apache specifieke requests naar je container routeren. Welke requests precies naar je container moeten, kun je via MyVevida regelen bij het beheer van de applicatie. Zo kun je via MyVevida bepalen op welke url je applicatie beschikbaar moet zijn.

Omdat Apache alle binnenkomende requests routeert naar door jou gekozen applicaties, kun je binnen 1 website verschillende applicaties hebben.

De 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.

requirements.txt

In de map van je applicatie op het bestandssysteem (bijvoorbeeld /www) plaats je een bestand met de naam requirements.txt. 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. Als je geen requirements hebt voor je applicatie, kun je dit bestand leeglaten.

wsgi.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 je application. Een voorbeeld hiervan is de applicatie waarmee een nieuw pakket Python Hosting wordt opgeleverd, die een statische HTML pagina serveert.

Een 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?

Voor vragen kun je met ons , mailen of bellen (050 211 0100)

Bedankt voor je feedback!

Er is een fout opgetreden. Probeer het later opnieuw.