Logo

dev-resources.site

for different kinds of informations.

Deploy a containerised Fast API application in Digital Ocean

Published at
12/6/2022
Categories
docker
digitalocean
production
devops
Author
ndrohith
Author
8 person written this
ndrohith
open
Deploy a containerised Fast API application in Digital Ocean

In this blog, I will explain to you how to develop a FastAPI application, containerize it, and deploy it in Digital Ocean. Now let's start by creating a basic FastAPI application.

1. Creating FastAPI application

Create a folder called fast-api-ocean in your specified directory. Inside the directory create api.py file which contains the fastapi code. To avoid any CORS problems when using the API, we will additionally integrate CORS Middleware.



from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware 
import uvicorn 

app = FastAPI() 

origins = ['*']

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
) 

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

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


Enter fullscreen mode Exit fullscreen mode

When our script is complete, we will test to see if the FastAPI is working.



python3 api.py


Enter fullscreen mode Exit fullscreen mode

After running the following command point to the http://localhost:8000/ such that you find the message "Hello from Fastapi" displayed. On routing to http://localhost:8000/docs a swagger UI will be provided which helps to test your endpoints.

2. Creating requirements.txt

Now we create a requirements.txt such that we can install all of our packages at ease. You can either add them manually in requirements.txt file or else follow the command pip freeze > requirements.txt



fastapi
uvicorn


Enter fullscreen mode Exit fullscreen mode

3. Creating a docker file

Let's now create a dockerfile which is used to build Docker Images. It is a simple text file that consists of a set of instructions or commands that is executed by an automated build process in steps from top to bottom.



FROM python:3.10

WORKDIR /src

ADD ./ /src

RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 8000 

CMD ["python", "api.py"]


Enter fullscreen mode Exit fullscreen mode

Now our dockerfile is ready and we can create our image by using the following command.



docker build -t fast-ocean .


Enter fullscreen mode Exit fullscreen mode

Once the image has been created, use the following command to execute it as a container. Now point to http://0.0.0.0:8000/ such that you can find your application running there.



docker run -p 8000:8000 fast-ocean


Enter fullscreen mode Exit fullscreen mode

You can run the container in detached mode (in the background) by adding a tag -d



docker run -d -p 8000:8000 fast-ocean


Enter fullscreen mode Exit fullscreen mode

4. Creating Digital Ocean droplet

Sign in to your digital ocean account. Now on the top section click on Create and select Droplets .I have opted Banglore server region.

droplet

Now choose an image for the server. I am going with Ubuntu 22.10 x64 image.

server image

You can select any of the CPU options. I chose 1GB RAM with 25GB NVMe SSD.

CPU Options

In Authentication Method I have selected SSH Key .

Auth

You can go with other options based on your droplet customization.

options

Now click on Create Droplet such that your droplet will be created. You can find your droplets in the Droplets section.

5. Accessing Droplet via SSH

You can access your droplet either by clicking on theConsole which is present on the top right corner. The other best and simple way is to access the droplet in you local machine using SSH. Copy the ipv4 address of your droplet.

You can access your droplet by executing the following command in your terminal. Here I am accessing as a root user.



ssh [email protected]


Enter fullscreen mode Exit fullscreen mode

Once you access your droplet type update all the packages.



apt-get update


Enter fullscreen mode Exit fullscreen mode

6. Installing Docker in Digital Ocean Droplet

You can install docker in your droplet either by using snap or apt in your droplet terminal.



snap install docker
    # (or)
apt  install docker.io


Enter fullscreen mode Exit fullscreen mode

Once your docker installation is done you can verify it by using the version command.



docker --version


Enter fullscreen mode Exit fullscreen mode

7. Copy files via SCP

Now we need to copy the folder which contains our code file such as api.py , requirements.txt and dockerfile from our local machine to the remote server. This can be achieved with the help of SCP. Open your terminal in your local-machine and navigate to your folder and execute the SCP command.



scp -r fast-api-ocean [email protected]:/root


Enter fullscreen mode Exit fullscreen mode

Here I am copying my fast-api-ocean folder to the root of the remote server. Once copying is done you can navigate to /root/fast-api-ocean path and find you files.

8. Building a docker image and running it in detached mode

As we installed docker in our Digital Ocean droplet now we can build the image with the help of the Dockerfile present in the fast-api-ocean folder.



docker build -t fast-ocean-droplet .


Enter fullscreen mode Exit fullscreen mode

Now let's run the container in detached mode.



docker run -d -p 8000:8000 fast-ocean-droplet


Enter fullscreen mode Exit fullscreen mode

Hurray! It's done. Now you can navigate to port 80 of your IP-domain . Here in my case its http://165.22.217.59/ . Now you can find your FastAPI container running in the background in your droplets IP-domain . The Dockerfile can be modified to suit your needs.

I hope you find this blog helpful. Thank You

production Article's
30 articles in total
Favicon
The Making of the Zip Ship Hi-Tech Ultimate Go-Cart Indiegogo Campaign Video
Favicon
Synchronize Files between your servers
Favicon
Dulces Suenos Spanish Pop (Sample Packs)Download
Favicon
PostgreSQL fΓΌr django aufsetzen - django in Produktion (Teil 2)
Favicon
Industrial Juicers: Enhancing Juice Production Capabilities
Favicon
Cloudflare Tunnels VS ngrok
Favicon
In Laravel, always use the env() within config files and nowhere else.
Favicon
How to Set Up Multiple PostgreSQL Instances on a Single Server
Favicon
Use same Dockerfile for Dev & Production
Favicon
Integrating Vite with Flask for Production
Favicon
Everybody Dumps Production At Least Once
Favicon
The Dangers of Using the Same Database for Development and Production
Favicon
Dev Deletes Entire Production Database
Favicon
Mastering Chrome DevTools: Edit production code on-the-fly in your browser ✏️
Favicon
Best way to run Migrations in Production
Favicon
Why should you use a hidden replica set member
Favicon
Software upgrade checklist in production
Favicon
Running CockroachDB on k8s - with tweaks for Production
Favicon
Where engineering and creative production worlds clash!
Favicon
Increasing Product Release Velocity by Debugging and Testing In Production
Favicon
Next.js in Production: Best Practices and Common Pitfalls
Favicon
Deploy a containerised Fast API application in Digital Ocean
Favicon
Production incidents - 7 practical tips to help you through your next incident
Favicon
Fix Page not found error when visiting a route directly in react
Favicon
AWS Amplify - Deploy your application in minutes.
Favicon
Trying Streamyard for various things
Favicon
How to deal with data changing and machine learning models doing worse after training
Favicon
[BTY] Day 10: Real-time machine learning: challenges and solutions - Huyen Chip
Favicon
Installing Gem in Production Rails console
Favicon
Production-Ready Docker Configuration With DigitalOcean Container Registry Part I

Featured ones: