Did you know that GitHub supports table of contents by default 🤔
This is the FastAPI ASGI application.
- Python 3.12 & Poetry
- FastAPI & Granian
- Database and ORM: PostgreSQL, SQLAlchemy, Alembic
- Formatting and linting: Ruff, pre-commit
- Deployment: Docker, Docker Compose, GitHub Actions
-
Install Python 3.12+
-
Install Poetry
-
Install project dependencies with Poetry.
poetry install
-
Set up pre-commit hooks:
poetry run pre-commit install --install-hooks -t pre-commit -t commit-msg
-
Set up project settings file (check settings.schema.yaml for more info).
cp settings.example.yaml settings.yaml
Edit
settings.yaml
according to your needs. -
Set up a PostgreSQL database instance.
Using docker container
- Set up database settings for docker-compose container
in
.env
file:хcp .example.env .env
- Run the database instance:
docker compose up -d db
- Make sure to set up the actual database connection in
settings.yaml
, for example:database: uri: postgresql+asyncpg://postgres:postgres@localhost:5432/postgres
Using pgAdmin
- Connect to the PostgreSQL server using pgAdmin
- Set up a new database in the server:
Edit > New Object > New database
- Use the database name in
settings.yaml
file, for exampledb_name
:database: uri: postgresql+asyncpg://postgres:your_password@localhost:5432/db_name
- Set up database settings for docker-compose container
in
Set up PyCharm integrations
- Ruff (plugin).
It will lint and format your code. Make sure to enable
Use ruff format
option in plugin settings. - Pydantic (plugin). It will fix PyCharm issues with type-hinting.
- Conventional commits (plugin). It will help you to write conventional commits.
- Run the database if you have not done it yet
- Upgrade the database schema using alembic:
poetry run alembic upgrade head
- Run the ASGI server
OR using uvicorn directly
poetry run python -m src.api
poetry run uvicorn src.api.app:app --use-colors --proxy-headers --forwarded-allow-ips=*
Now the API is running on http://localhost:8000. Good job!
We use Docker with Docker Compose plugin to run the service on servers.
- Copy the file with environment variables:
cp .example.env .env
- Change environment variables in the
.env
file - Copy the file with settings:
cp settings.example.yaml settings.yaml
- Change settings in the
settings.yaml
file according to your needs (check settings.schema.yaml for more info) - Install Docker with Docker Compose
- Build a Docker image:
docker compose build --pull
- Run the container:
docker compose up --detach
- Check the logs:
docker compose logs -f
- Run
poetry update
to update all dependencies (it may update nothing, so double-check) - Run
poetry show --outdated --all
to check for outdated dependencies - Run
poetry add <package>@latest
to add a new dependency if needed
- Run
poetry run pre-commit autoupdate
Also, Dependabot will help you to keep your dependencies up-to-date, see dependabot.yml.