In this tutorial, we will go over how to create a new blog using FastAPI and scale it with the help of Docker. FastAPI is a modern, fast (high-performance) web framework for building APIs with Python 3.6+ based on standard Python type hints. Docker is a tool designed to make it easier to create, deploy, and run applications by using containers.
Step 1: Setting up FastAPI
To get started, create a new directory for your project and initialize a new Python virtual environment. You can do this by running the following command in your terminal:
mkdir fastapi-blog
cd fastapi-blog
python3 -m venv venv
source venv/bin/activate
Next, install FastAPI and Uvicorn, which is a lightning-fast ASGI server for Python. You can install them using pip:
pip install fastapi uvicorn
Step 2: Creating the FastAPI application
Create a new Python file called main.py and add the following code to create a basic FastAPI application:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
Run the FastAPI application using Uvicorn by running the following command:
uvicorn main:app --reload
You should see a message saying that Uvicorn has started on http://localhost:8000/. Open your browser and navigate to http://localhost:8000/ to see the "Hello, World" message.
Step 3: Adding endpoints for the blog
Next, let’s add some endpoints to our FastAPI application to create a simple blog. Add the following code to your main.py file:
from fastapi import FastAPI
app = FastAPI()
posts = []
@app.post("/posts/")
async def create_post(title: str, content: str):
post = {"title": title, "content": content}
posts.append(post)
return post
@app.get("/posts/")
async def get_posts():
return posts
Now, when you run your FastAPI application and navigate to http://localhost:8000/docs, you should see a Swagger UI documentation page with two endpoints:
- POST /posts/ to create a new post
- GET /posts/ to get all posts
Step 4: Dockerizing the FastAPI application
To scale our FastAPI application using Docker, we need to create a Dockerfile in our project directory. Create a new file called Dockerfile and add the following code:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
COPY ./app /app
Next, create a new directory called app and move your main.py file into this directory. Your project structure should look like this:
fastapi-blog/
app/
main.py
Dockerfile
venv/
Now, build the Docker image by running the following command in your terminal:
docker build -t fastapi-blog .
This command will build a Docker image based on the Dockerfile we created earlier. Finally, run the Docker container by running the following command:
docker run -d --name fastapi-blog -p 8000:80 fastapi-blog
This command will run a Docker container named fastapi-blog and map port 8000 on your host machine to port 80 inside the container. You should now be able to access your FastAPI application running inside Docker by navigating to http://localhost:8000/ in your browser.
Congratulations! You have successfully created a new blog using FastAPI and scaled it with Docker. This setup can be extended further by using a database like PostgreSQL or MySQL, implementing authentication, and adding more features to your blog. Happy coding!
Worst video on youtube 🤢🤮