Simple FastAPI project template with Docker, Alembic, PostgreSQL, Poetry and pre-commit to kickstart your new projects.
Go to the directory where you want to create your project and run:
pip install cookiecutter
cookiecutter https://github.com/Lolomgrofl/fastapi-genesis.git
- Here is an explanation of the directory structure of the template:
βββ .github <- GitHub deployment workflow
β
βββ alembic <- Alembic migrations
β
βββ app <- Source code of the application (the main package)
β βββ daos <- Data Access Objects (DAOs) to interact with the database
β βββ models <- SQLAlchemy models (the database schema)
β βββ routers <- FastAPI routers (endpoints)
β βββ schemas <- Pydantic schemas for request and response models
β βββ services <- Business logic layer (services)
β βββ db.py <- Database initialization and session management code
β βββ main.py <- FastAPI application instance and startup code
β βββ settings.py <- Settings management code (using pydantic settings)
β
βββ scripts <- Scripts to perform various tasks like alembic migrations, etc.
β
βββ static <- Static files like images, documents, etc.
β
βββ tests <- Unit tests, one subdirectory per application module
β
βββ .env <- Environment variables. Should not be committed to VCS
β
βββ .gitignore <- Files and directories to be ignored by git
β
βββ .pre-commit-config.yaml <- Configuration of pre-commit hooks (see https://pre-commit.com/)
β
βββ alembic.ini <- Alembic configuration file
β
βββ docker-compose.yml <- Docker compose configuration file
β
βββ Dockerfile <- Dockerfile for building the image of the application
β
βββ Makefile <- Makefile with useful commands for development and project setup
β
βββ pyproject.toml <- Python dependencies for Poetry (see https://python-poetry.org/)
β
βββ README.md <- File with useful information about the project and how to use it
- Docker and docker-compose for local development
- FastAPI application with uvicorn server
- AsyncPG for asynchronous access to PostgreSQL
- Pydantic for data validation
- Poetry for managing Python dependencies
- Alembic for database migrations
- Pre-commit hooks for code formatting and linting
- JWT token authentication
- SQLAlchemy models
- CORS (Cross Origin Resource Sharing)
- GitOps ( GitHub Workflows)
- It consists of the following steps:
- Register a new user
- Login with the new user
- Change password
- Get all users
- Delete user by id
- Delete all users
- This following example will show you the pattern and good practices to follow in order to continue developing your application.
repo_name
: Name of the project repository (e.g.my_project
)app_container_name
: Name of the Docker container for the FastAPI application server insidedocker-compose.yaml
fileapp_service_port
: Port on the host machine to which the FastAPI application will be exposed insidedocker-compose.yaml
file andDockerfile
db_container_name
: Name of the Docker container for the PostgreSQL database server insidedocker-compose.yaml
filedb_service_port
: Port on the host machine to which the PostgreSQL database server will be exposed insidedocker-compose.yaml
filepgadmin_container_name
: Name of the Docker container for the pgAdmin web interface insidedocker-compose.yaml
filepgadmin_service_port
: Port on the host machine to which the pgAdmin web interface will be exposed insidedocker-compose.yaml
filenetwork_name
: Name of the Docker network that will be created insidedocker-compose.yaml
file
This project is licensed under the terms of the MIT license.