How to install FastAPI on unmanaged servers

This article demonstrates how to install and run FastAPI on an unmanaged server. FastAPI is a Python-based web framework for building APIs (Application Programming Interfaces).

Because FastAPI is asynchronous, it requires the Asynchronous Server Gateway Interface (ASGI) instead of the Web Server Gateway Interface (WSGI). Because our managed hosting solutions use Passenger and WSGI to manage Python applications, you can only install and run FastAPI on an unmanaged hosting account.

Installing FastAPI

To install FastAPI, you first create a virtual environment for Python. After you activate the virtual environment, you can use the pip installer to install FastAPI.

To do this, follow these steps:

  1. Log in to your server using SSH.
  2. If you are running Ubuntu on your server, as the root user, type the following command:
    apt install curl python3.8-venv
    If you are running another distribution that already has curl and Python 3 virtual environment support installed, you do not need to install any additional packages. If your distribution does not have these packages installed, consult its documentation on how to do so.
  3. As a regular (non-root) user, type the following commands:

    cd ~
    python3 -m venv fastapi-test
    cd fastapi-test
    source bin/activate
  4. The virtual environment is now created and activated. To update pip, type the following command:

    pip install --upgrade pip
  5. To install FastAPI, type the following commands:

    pip install fastapi
    pip install "uvicorn[standard]"
  6. FastAPI is now installed. To determine which version is installed, type the following command:

    pip show fastapi

Running an example application

FastAPI is now installed, and you can create and configure FastAPI applications. The following example shows how to do this.

  1. Use a text editor to create a file named
  2. Copy and paste the following code into the file:
    from typing import Union
    from fastapi import FastAPI
    app = FastAPI()
    def read_root():
        return {"Hello": "World"}
    def read_item(item_id: int, q: Union[str, None] = None):
        return {"item_id": item_id, "q": q}
  3. To start the development web server, type the following command::

    uvicorn main:app --reload
  4. In another terminal window, type the following command:

    curl localhost:8000/items/5?q=my_query

    You should see the following JSON response:


    You now have a basic, functioning web API created using FastAPI.

More Information

For more information about FastAPI, please visit

Did you find this article helpful? Then you'll love our support. Experience the A2 Hosting difference today and get a pre-secured, pre-optimized website. Check out our web hosting plans today.

We use cookies to personalize the website for you and to analyze the use of our website. You consent to this by clicking on "I consent" or by continuing your use of this website. Further information about cookies can be found in our Privacy Policy.