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