Run a Flask 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 Flask application on Fly.io.
Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications.
Spinning up a flask app is fun!
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 Flask server on Fly.io is to use our Flask template:
git clone git@github.com:fly-apps/hello-flask-poetry.git flask-app
cd flask-app
fly launch --generate-name
Deploy a Flask 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 flask-app
cd flask-app
poetry shell
To run this app we will need 2 dependencies:
- flask: the framework
- gunicorn: the server
poetry add flask gunicorn
Now let’s create a basic app in app.py
:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_fly():
return "hello from fly.io"
To check that everything is working, we can use the included flask cli tool:
flask run
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
Note that flask run
command works since our file is named app.py
. It also works if your file is named wsgi.py
, so you don’t have to use --app
to tell Flask where your app is. More details here.
If your file is saved as hello.py
instead of app.py
, you would need to use the --app
option to point to Flask where your app is:
flask --app hello run
If you open http://127.0.0.1:5000/ in your web browser, it should display hello from fly.io
.
And with that you can deploy the app!
fly launch
Scanning source code
Detected a Flask 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.