Framework Frankfurt, Alemanha

Faça deploy de Django na Nodion

A Nodion reconhece o Django pelo manage.py e pela presença do Django nas suas dependências. O buildpack de Python instala-as, executa o collectstatic e arranca o Gunicorn no módulo WSGI do seu projeto. Com uma linha release: num Procfile, as migrações são executadas antes de cada nova versão entrar em produção, e a aplicação e a respetiva base de dados PostgreSQL são executadas em Frankfurt.

Fazer deploy na Nodion ›

a partir de 1 EUR / mês

Até 15 € de crédito de boas-vindas no registo

Detetado por
manage.py e Django nas suas dependências
Arranque
gunicorn <projeto>.wsgi, 3 workers
Python
de 3.10 a 3.15, por omissão 3.13
Região
EU Central (Frankfurt)

Faça deploy de Django passo a passo

  1. Adicione o Gunicorn, o WhiteNoise e um driver de base de dados A Nodion arranca o Gunicorn, mas não o instala, por isso tem de estar nas suas dependências. O Gunicorn não serve ficheiros estáticos; é o WhiteNoise que serve o que o collectstatic escreve. Fixe a versão de Python em .python-version, porque um intervalo como requires-python = ">=3.10" escolhe a versão mais recente. requirements.txt
    Django>=5.2
    gunicorn
    whitenoise
    dj-database-url
    psycopg[binary]
  2. Leia as definições a partir do ambiente O collectstatic é executado durante o build, onde só existem as variáveis marcadas com Build, por isso as definições têm de poder ser importadas sem os segredos de runtime. O Django só verifica a SECRET_KEY quando é usada. Adicione o WhiteNoise logo a seguir ao SecurityMiddleware. 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. Responda ao health check antes da verificação do host O health check da Nodion chama cada instância pelo seu endereço interno, que não está em ALLOWED_HOSTS, por isso o Django responderia 400 e a release nunca entraria em produção. Coloque um pequeno middleware em primeiro lugar em MIDDLEWARE e defina /healthz como caminho do health check nas definições da aplicação. 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. Execute as migrações em cada deploy Uma linha release: num Procfile é executada uma vez por build, depois do build e antes de a nova versão arrancar. Se falhar, o deploy é interrompido e a versão em execução continua online. Procfile
    release: python manage.py migrate --noinput
  5. Crie a aplicação e a base de dados Crie uma aplicação a partir do seu repositório na região EU Central, depois uma base de dados PostgreSQL na mesma região, e associe-a no separador Environment: chega como DATABASE_URL no deploy seguinte. Defina DJANGO_SECRET_KEY como segredo e DJANGO_ALLOWED_HOSTS com o hostname da sua aplicação e os seus próprios domínios, e depois faça push.

A ter em conta

  • Celery e outros workersAdicione worker: celery -A myproject worker ao Procfile, juntamente com uma linha explícita web: gunicorn myproject.wsgi --bind 0.0.0.0:$PORT; sem uma linha web:, a primeira entrada do Procfile que não seja release: passa a ser o comando por omissão. Depois, no separador Processes, adicione um processo chamado worker sem porta. O Valkey na mesma região fornece-lhe REDIS_URL como broker.
  • ASGIO comando de arranque por omissão usa WSGI. Para Channels ou views assíncronas, defina a sua própria linha web:, por exemplo com workers Uvicorn, e ponha o servidor a escutar em 0.0.0.0:$PORT.
  • Ficheiros de dependênciasrequirements.txt, poetry.lock e Pipfile.lock são instalados tal como estão. Um Pipfile sem o respetivo lockfile não instala nada.

O que a Nodion gere por si

  • Deploys sem downtime Faça push para o seu branch e a Nodion cria uma nova release. O tráfego só muda quando as novas instâncias passam no health check; se uma release falhar, a que está em execução mantém-se. Em vez disso, as aplicações com um volume local são reiniciadas, porque o disco pertence a uma única instância.
  • Bases de dados junto à aplicação PostgreSQL, pgvector, MySQL, Valkey e ClickHouse geridos, na mesma região. As bases de dados associadas chegam como DATABASE_URL, REDIS_URL ou CLICKHOUSE_URL.
  • Pré-visualizações por pull request Ative as pré-visualizações e cada pull request do seu repositório passa a ter uma aplicação própria, com URL próprio e bases de dados novas e vazias, criada automática ou manualmente. Os forks e os pull requests de bots são ignorados.
  • Workers, cron jobs e escalabilidade Execute workers como processos adicionais da mesma aplicação, agende tarefas no separador Cron e escale cada processo até 16 instâncias.
  • Etapa de release Com buildpacks, uma linha release: do Procfile é executada a cada novo build. As aplicações com Dockerfile, bem como os redeploys ou rollbacks para uma imagem anterior, usam um comando de release definido na própria aplicação, que também tem prioridade sobre a linha do Procfile. Nos sites estáticos, a etapa de release é executada numa imagem que contém apenas os ficheiros gerados pelo build.
  • Logs e métricas Logs de build, release e runtime, além de métricas de CPU, memória, disco e rede de cada instância, no dashboard.
  • Domínios e HTTPS Um hostname atribuído por omissão com HTTPS desde o primeiro deploy; os seus próprios domínios recebem certificados automaticamente.

Para saber mais

Django na Nodion: perguntas e respostas

A Nodion executa as migrações do Django por mim?

Só se o pedir: adicione release: python manage.py migrate --noinput a um Procfile. Esta linha é executada uma vez por build, antes de a nova versão arrancar, e uma falha interrompe o deploy.

Porque é que o meu deploy de Django nunca fica pronto?

Normalmente, o health check recebe um 400 por causa de ALLOWED_HOSTS ou um 404 em /. Responda a um caminho como /healthz num middleware colocado antes da verificação do host e defina-o como caminho do health check da aplicação.

Posso usar o Poetry em vez de requirements.txt?

Sim. Com um poetry.lock, a Nodion instala o Poetry e executa poetry install --only main. O Pipenv funciona com um Pipfile.lock.

Onde corre a minha aplicação Django?

Na região EU Central, em Frankfurt (Alemanha). O build, o registry, a aplicação e as respetivas bases de dados, volumes, buckets, logs e métricas ficam nessa região, e a API e o plano de controlo da Nodion estão alojados na Alemanha. A Nodion GmbH tem sede em Stuttgart.

Posso usar Django em conformidade com o RGPD?

A Nodion cria as condições para isso: a Nodion GmbH tem sede em Stuttgart (Alemanha); na região de Frankfurt, a aplicação, as bases de dados e os volumes são executados na Alemanha. O acordo de tratamento de dados (DPA, art. 28.º do RGPD) é celebrado eletronicamente no dashboard. A conformidade da sua utilização depende também da forma como configura e utiliza a aplicação.

Quanto custa executar Django na Nodion?

Uma instância da aplicação custa a partir de 1 EUR por mês. A configuração apresentada no quadro de custos custa 3.50 EUR por mês: Aplicação 2 EUR, PostgreSQL 1.50 EUR. Os preços não incluem IVA e a faturação é ao segundo. Pode escolher tamanhos maiores ou mais instâncias sempre que precisar.

Posso usar o meu próprio domínio na minha aplicação Django?

Sim. Cada aplicação recebe um hostname atribuído por omissão com HTTPS. Adicione o seu próprio domínio no separador Domains da aplicação; o certificado TLS é emitido e renovado automaticamente.

Dê uma cloud ao seu agente.

Ganhe até 15 € de crédito ao registar-se.

Continuar com o GitHub

ou com e-mail

Fique a par das novidades.

Novidades do produto, sem spam. Pode cancelar a subscrição a qualquer momento.