Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to deploy fastapi app on shared hosting using wsgi server?

in a recent article, https://www.vultr.com/docs/how-to-deploy-fastapi-applications-with-gunicorn-and-nginx-on-ubuntu-20-04/

I read that fastapi "can work with WSGI if needed". I was wondering how?

I did a whole project with fastapi and tried to deploy it on cpanel shared hosting(my option for the moment) ,

in the wsgi.py file I used a2sg library

from main import app
from a2wsgi import ASGIMiddleware
application = ASGIMiddleware(app)

but I get 503 temporary busy, try again when I browse to the page

so, how can I deploy my app , I deployed django with ease but fasapi is an issue as it mainly uses ASGI. is it also possible?

like image 521
Eyuael Bezabeh Avatar asked Aug 12 '26 08:08

Eyuael Bezabeh


2 Answers

I have created this simple repository on github to show how to run under Apachepython a basic webapp based on ASGI (with fastapi) using a WSGI server: danielemaddaluno/pyjel

This is the project:

.
├── app
│   └── app.py
├── requirements.txt
├── setup.sh
└── wsgi.py

The wsgi.py file:

import os, sys

virtenv = os.path.expanduser('~') + '/venv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
    if sys.version.split(' ')[0].split('.')[0] == '3':
        exec(compile(open(virtualenv, "rb").read(), virtualenv, 'exec'), dict(__file__=virtualenv))
    else:
        execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
    pass

sys.path.append(os.path.expanduser('~'))
sys.path.append(os.path.expanduser('~') + '/ROOT/')

from app import app
from a2wsgi import ASGIMiddleware
application = ASGIMiddleware(app.app)

The app.py file:

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

The requirements.txt file:

a2wsgi
uvicorn
fastapi

The setup.sh file:

#!/bin/sh
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
deactivate
like image 89
madx Avatar answered Aug 13 '26 23:08

madx


There are few checks you need to do apart from adding the A2WSGI Middleware.

  1. Adding empty py files named as __init__.py in each directory including root of application

  2. Create new passenger.py file with same code you have given in wsgi.py

  3. Use the above passenger.py file while setting up the python application, also keep wsgi.py as you have prepared already in same directory. (Cpanel->Setup Python App)

  4. Run Uvicorn server with unused port like 60323 etc.

  5. Restart the app from the Python Application Options

like image 43
FlutterFast Avatar answered Aug 13 '26 21:08

FlutterFast



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!