Deploy FastAPI to DigitalOcean App Platform

Previously I developed a python FastAPI tool that I developed locally to ingest Google ARI XML messages and produce a price quote here.

Now I want to publish this to get a deployed instance for public use

Using Digital Ocean to turn the above FastAPI into a deployed instance

Create a new project

Create an App

Grant GitHub access to repositories

Setup the repository to deploy

Choose options

In this case go with basic and make sure it as a web service

Skip Environment Variables unless you want to use them

Setup info keep the basics

Double check all your billing settings

And hit Create Resources

Important Caveats

Make sure you have separated your FastAPI routes and application into a separate file. I called mine app.py

That is put the routes and app creation in that file like so

app = FastAPI()

@app.get("/ping", tags=["Test"])
async def ping():
    return f'pong {pendulum.now().to_iso8601_string()}'

Then in your main.py you can have something like this

from app import app

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

To get this to run nicely on DigitalOcean create a Procfile in the root folder that will run after container image is built. Contents of this

web: gunicorn --config gunicorn_config.py app:app

You will also need a gunicorn_confif.py file as well with contents like this

bind = "0.0.0.0:8080"
workers = 2
worker_class = "uvicorn.workers.UvicornWorker"
worker_tmp_dir = "/dev/shm"

And then force a redeploy and you should be up and running.

[googlevr-calculator] [1] [INFO] Starting gunicorn 21.2.0
[googlevr-calculator] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[googlevr-calculator] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
[googlevr-calculator] [14] [INFO] Booting worker with pid: 14
[googlevr-calculator] [15] [INFO] Booting worker with pid: 15
[googlevr-calculator] [14] [INFO] Started server process [14]
[googlevr-calculator] [14] [INFO] Waiting for application startup.
[googlevr-calculator] [14] [INFO] Application startup complete.
[googlevr-calculator] [15] [INFO] Started server process [15]
[googlevr-calculator] [15] [INFO] Waiting for application startup.
[googlevr-calculator] [15] [INFO] Application startup complete.