Executar uma aplicação Flask ou FastAPI

O Flask corre na hospedagem partilhada sem truques: fala WSGI, e é isso que o Passenger do «Setup Python App» espera. O FastAPI é diferente: fala ASGI, e o Passenger não o fala directamente. Dá para o pôr a funcionar com um adaptador, mas perde-se o que o torna interessante (conexões longas, websockets). Para o aproveitar a sério, o sítio é um VPS. Este artigo mostra os dois caminhos. A criação da aplicação e do ambiente virtual está em Python no cPanel: ambientes virtuais e pip.

Qual escolher para onde

Na hospedagem partilhada (cPanel) Num VPS
Flask Sim, pelo «Setup Python App» (WSGI). Sim, com o gunicorn atrás de um proxy.
FastAPI Só com um adaptador ASGI para WSGI. Sem websockets nem respostas em fluxo. Sim, com o uvicorn atrás de um proxy: é o desenho previsto.
Processos sempre ligados (filas, tarefas) Não: a aplicação só vive enquanto há pedidos. Sim, com o systemd, o Docker ou outro gestor.
Quem instala e mantém Você, na sua conta. Você, no VPS não gerido.

Flask no cPanel

1 Crie a aplicação em «Setup Python App» com uma versão 3.x, a raiz e o endereço que quer. Deixe o ficheiro de arranque passenger_wsgi.py e o ponto de entrada application.
2 Ponha o seu código na raiz da aplicação. Por exemplo, um app.py com app = Flask(__name__).
3 Ligue o Passenger ao Flask: no passenger_wsgi.py escreva só from app import app as applicationO nome application é o que o Passenger procura.
4 Instale as bibliotecas com um requirements.txt e «Run Pip Install», e reinicie.
5 Abra o endereço. Se der erro, o registo do Passenger (campo Passenger log file) diz o que falhou.

FastAPI

No cPanel, com adaptador. Instale o fastapi e o a2wsgi (um adaptador de ASGI para WSGI), e no passenger_wsgi.py:from a2wsgi import ASGIMiddleware
from main import app

application = ASGIMiddleware(app)
Funciona para uma API de pedidos e respostas simples. Não conte com websockets.

Num VPS. Dentro do ambiente virtual do projecto, instale o fastapi e o uvicorn e arranque: uvicorn main:app --host 127.0.0.1 --port 8000O main:app é «o ficheiro main.py, a variável app». Escutando só em 127.0.0.1, quem a mostra ao mundo é o nginx com HTTPS: nginx como proxy inverso. Para a manter de pé depois de fechar a sessão, use o systemd ou o Docker. O mesmo vale para o Flask num VPS, trocando o uvicorn por gunicorn -b 127.0.0.1:8000 app:app.

Nunca deixe o modo de depuração ligado em produção. Em Flask, debug=True (ou FLASK_DEBUG) abre uma consola no navegador que permite correr código no servidor a quem chegar a uma página de erro. E não use o servidor de desenvolvimento (flask run) nem o uvicorn --reload como servidor do público.
Teste com uma rota mínima primeiro: uma que devolve «ok». Se essa responde, o problema está no resto do código ou nas dependências. Segredos e configuração vão em variáveis, não no código: variáveis de ambiente e segredos. Quando o erro é um 5xx sem explicação, veja erro 503 e a família 5xx.

A aplicação abre em local e não no servidor? Diga-nos o domínio e a última linha do registo do Passenger.

Abrir um pedido de suporte

VEJA TAMBÉM

Python no cPanel: ambientes virtuais e pip

Pôr uma aplicação Django a funcionar

Nginx como proxy inverso à frente de um contentor

Servidores VPS

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?