Framework Frankfurt, Duitsland

Deploy Django op Nodion

Nodion herkent Django aan manage.py en Django in je dependencies. Het Python-buildpack installeert ze, voert collectstatic uit en start Gunicorn op de WSGI-module van je project. Met een release:-regel in een Procfile draaien migraties voordat elke nieuwe versie live gaat, en de app en de bijbehorende PostgreSQL-database draaien in Frankfurt.

Op Nodion deployen ›

vanaf 1 EUR / maand

Tot € 15 welkomsttegoed bij registratie

Herkend aan
manage.py en Django in je dependencies
Start
gunicorn <project>.wsgi, 3 workers
Python
3.10 tot en met 3.15, standaard 3.13
Regio
EU Central (Frankfurt)

Django stap voor stap deployen

  1. Voeg Gunicorn, WhiteNoise en een databasedriver toe Nodion start Gunicorn, maar installeert het niet, dus het hoort in je dependencies. Gunicorn serveert geen statische bestanden; WhiteNoise serveert wat collectstatic wegschrijft. Leg de Python-versie vast in .python-version, want een bereik zoals requires-python = ">=3.10" kiest de nieuwste release. requirements.txt
    Django>=5.2
    gunicorn
    whitenoise
    dj-database-url
    psycopg[binary]
  2. Lees de instellingen uit de omgeving collectstatic draait tijdens de build, waar alleen variabelen met de vlag Build bestaan, dus je settings moeten zonder runtime-secrets kunnen worden geïmporteerd. Django controleert SECRET_KEY pas wanneer die wordt gebruikt. Voeg WhiteNoise direct na SecurityMiddleware toe. settings.py
    import os
    import dj_database_url
    
    SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "")
    DEBUG = os.environ.get("DJANGO_DEBUG") == "1"
    ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "").split(",")
    CSRF_TRUSTED_ORIGINS = [f"https://{h}" for h in ALLOWED_HOSTS if h]
    
    DATABASES = {"default": dj_database_url.config(conn_max_age=600)}
    
    STATIC_ROOT = BASE_DIR / "staticfiles"
    # MIDDLEWARE: "whitenoise.middleware.WhiteNoiseMiddleware"
    # right after "django.middleware.security.SecurityMiddleware"
  3. Beantwoord de health check vóór de hostcontrole De health check van Nodion roept elke instantie aan via het interne adres, en dat staat niet in ALLOWED_HOSTS. Django zou dan 400 antwoorden en de release zou nooit live gaan. Zet een kleine middleware bovenaan in MIDDLEWARE en stel in de app-instellingen /healthz in als pad van de health check. health.py
    from django.http import HttpResponse
    
    
    class HealthCheckMiddleware:
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            if request.path == "/healthz":
                return HttpResponse("ok")
            return self.get_response(request)
  4. Draai migraties bij elke deployment Een release:-regel in een Procfile draait één keer per build, na de build en voordat de nieuwe versie start. Mislukt hij, dan stopt de deployment en blijft de draaiende versie live. Procfile
    release: python manage.py migrate --noinput
  5. Maak de app en de database aan Maak een applicatie aan vanuit je repository in de regio EU Central, daarna een PostgreSQL-database in dezelfde regio, en koppel die op het tabblad Environment: bij de volgende deployment komt die binnen als DATABASE_URL. Stel DJANGO_SECRET_KEY in als secret en DJANGO_ALLOWED_HOSTS op de hostname van je app en je eigen domeinen, en push dan.

Goed om te weten

  • Celery en andere workersVoeg worker: celery -A myproject worker toe aan het Procfile, samen met een expliciete regel web: gunicorn myproject.wsgi --bind 0.0.0.0:$PORT; zonder web:-regel wordt de eerste Procfile-regel die geen release: is het standaardcommando. Voeg daarna op het tabblad Processes een proces met de naam worker zonder poort toe. Valkey in dezelfde regio geeft je REDIS_URL als broker.
  • ASGIStandaard wordt je app via WSGI gestart. Voor Channels of async views stel je een eigen web:-regel in, bijvoorbeeld met Uvicorn-workers, en bind je die aan 0.0.0.0:$PORT.
  • Dependency-bestandenrequirements.txt, poetry.lock en Pipfile.lock worden geïnstalleerd zoals ze zijn. Een Pipfile zonder lockbestand installeert niets.

Wat Nodion voor je regelt

  • Deploys zonder downtime Push naar je branch en Nodion bouwt een nieuwe release. Het verkeer schakelt over zodra de nieuwe instanties hun health check doorstaan; een mislukte release laat de draaiende versie staan. Apps met een lokaal volume herstarten in plaats daarvan, omdat de schijf bij één instantie hoort.
  • Databases naast de app Managed PostgreSQL, pgvector, MySQL, Valkey en ClickHouse in dezelfde regio. Gekoppelde databases komen binnen als DATABASE_URL, REDIS_URL of CLICKHOUSE_URL.
  • Previews per pull request Zet previews aan en pull requests uit je repository krijgen een eigen app met een eigen URL en nieuwe, lege databases, automatisch of handmatig aangemaakt. Forks en pull requests van bots worden overgeslagen.
  • Workers, cronjobs en schalen Draai workers als extra processen van dezelfde app, plan jobs op het tabblad Cron en schaal elk proces naar maximaal 16 instanties.
  • Releasestap Met buildpacks draait een release:-regel in het Procfile bij elke nieuwe build. Dockerfile-apps, en redeploys of rollbacks naar een eerdere image, gebruiken een releasecommando dat op de app zelf is ingesteld en dat ook voorrang heeft op de Procfile-regel. Bij statische sites draait een releasestap in een image die alleen de gebouwde bestanden bevat.
  • Logs en metrics Build-, release- en runtimelogs plus metrics voor CPU, geheugen, schijf en netwerk van elke instantie in het dashboard.
  • Domeinen en HTTPS Een standaardhostnaam met HTTPS vanaf de eerste deploy; je eigen domeinen krijgen automatisch certificaten.

Verder lezen

Django op Nodion: vragen en antwoorden

Voert Nodion de Django-migraties voor me uit?

Alleen als je daarom vraagt: voeg release: python manage.py migrate --noinput toe aan een Procfile. Die regel draait één keer per build voordat de nieuwe versie start, en een fout stopt de deployment.

Waarom wordt mijn Django-deployment nooit klaar voor gebruik?

Meestal krijgt de health check een 400 door ALLOWED_HOSTS of een 404 op /. Beantwoord een pad zoals /healthz in een middleware die vóór de hostcontrole staat, en stel het in als pad van de health check van de app.

Kan ik Poetry gebruiken in plaats van requirements.txt?

Ja. Met een poetry.lock installeert Nodion Poetry en voert het poetry install --only main uit. Pipenv werkt met een Pipfile.lock.

Waar draait mijn Django-app?

In de regio EU Central in Frankfurt, Duitsland. Build, registry, de app en de bijbehorende databases, volumes, buckets, logs en metrics blijven in die regio, en de API en het control plane van Nodion worden in Duitsland gehost. Nodion GmbH is gevestigd in Stuttgart.

Kan ik Django gebruiken volgens de AVG (GDPR)?

Nodion biedt hiervoor de basis: Nodion GmbH is gevestigd in Stuttgart (Duitsland). Kies je de regio Frankfurt, dan draaien de app, de databases en de volumes in Duitsland. De verwerkersovereenkomst (DPA, art. 28 AVG) sluit je elektronisch af in het dashboard. Of je configuratie aan de AVG voldoet, hangt ook af van hoe je de app instelt en gebruikt.

Wat kost het om Django op Nodion te draaien?

Een appinstantie kost vanaf 1 EUR per maand. De configuratie in het kostenoverzicht kost 3.50 EUR per maand: App 2 EUR, PostgreSQL 1.50 EUR. Prijzen zijn excl. btw en worden per seconde gefactureerd, en je kiest grotere formaten of meer instanties wanneer je ze nodig hebt.

Kan ik een eigen domein gebruiken voor mijn Django-app?

Ja. Elke app krijgt een standaardhostnaam met HTTPS. Voeg je eigen domein toe op het tabblad Domains van de app; het TLS-certificaat wordt automatisch uitgegeven en vernieuwd.

Geef je agent een cloud.

Ontvang tot € 15 welkomsttegoed bij je registratie.

Doorgaan met GitHub

of met e-mail

Blijf op de hoogte.

Productnieuws, geen spam. Je kunt je altijd weer afmelden.