Run a FastAPI app
Getting an application running on Fly.io is essentially working out how to package it as a deployable image. Once packaged, it can be deployed to the Fly.io platform.
In this guide we’ll learn how to deploy a FastAPI application on Fly.io.
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.
Deploying a FastAPI app on Fly.io is… well it’s fast! You can be up and running in less than a minute.
Speedrun
First, install flyctl, the Fly.io CLI, and sign up to Fly.io if you haven’t already.
The fastest way to get a basic Fast Api server on Fly.io is to use our FastAPI template:
git clone git@github.com:fly-apps/hello-fastapi.git fastapi-app
cd fastapi-app
fly launch --generate-name
Deploy a FastAPI app from scratch
For managing our project, we use Poetry. For more information on the initial setup with poetry, refer to setting up a python environment. We can initialize a new project like so:
poetry new fastapi-app
cd fastapi-app
poetry shell
Then we have to add the FastAPI dependency:
poetry add "fastapi[standard]"
Now, let’s create a simple FastAPI app in main.py
:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def hello_fly():
return 'hello from fly.io'
We can then serve the development version of the app using the fastapi
cli tool:
fastapi dev
This will display a ‘hello from fly.io!’ message when you visit the root URL. With the development environment we also get cool features like hot-reloading.
To run in production mode, we can amend the command:
fastapi run
The fastapi
assumes your app is stored in main.py
or app.py
- if this is not the case, you must specify that when running the app:
fastapi run hello/entrypoint.py
And with that you can deploy the app!
fly launch
Scanning source code
Detected a FastAPI app
Warning: This organization has no payment method, turning off high availability
Creating app in [redacted]/[app-name]
We're about to launch your app on Fly.io. Here's what you're getting:
Organization: Your Name (fly launch defaults to the personal org)
Name: [app-name] (derived from your directory name)
Region: Amsterdam, Netherlands (this is the fastest region for you)
App Machines: shared-cpu-1x, 1GB RAM (most apps need about 1GB of RAM)
Postgres: <none> (not requested)
Redis: <none> (not requested)
Sentry: false (not requested)
...
==> Building image
...
==> Building image with Docker
...
Watch your deployment at https://fly.io/apps/[app-name]/monitoring
...
Visit your newly deployed app at https://[app-name].fly.dev/
This will generate a fly.toml
file with the configuration for your app and a Dockerfile that uses multi-stage builds.
Refer to the fly.toml docs for more configuration options.
To deploy a new version of your app, simply run fly deploy
in the project directory.
You can check out the full (yet minimal) example in this GitHub repository for a reference.