Giter Site home page Giter Site logo

fastapi-mea / fastapi-template Goto Github PK

View Code? Open in Web Editor NEW
19.0 2.0 3.0 44 KB

A production-ready FastAPI template with Redis, Docker and PostgreSQL

License: MIT License

Shell 2.20% Dockerfile 4.47% Python 88.59% Mako 4.74%
docker fastapi fastapi-template python redis postgresql postgres

fastapi-template's Introduction

FastAPI Template

A FastAPI template with Redis, Docker and PostgreSQL

Introduction

This FastAPI template was created out of a need for consistent structure for projects with a setup that's easy to understand and use with as minimal additional setup as possible.

What is hoped to be achieved

  • Simplicity; no need for bloated classes and huge utils that you'll likely never use. Everything here should be very much needed in most projects
  • Low barrier for entry; a template that is easy to start with and does not seem too advanced for beginners to use
  • Production-ready; the above does not remove the important fact that this should be always production-ready without obvious faults
  • Consistency; a smell for codebases is you not having a 'knowing' of where certain code is located. A wanted structure is one that's easy to navigate

What is not hoped to be achieved

  • Batteries-included; this template, whilst influenced by Django, does not aim to provide Django-like capabilities or to have a 'Django, but for FastAPI' setup
  • Utility dump; this template will not be where all sorts of utilities are dumped because, 'why not?'.

How to use

  • Copy .example.env into a file, .env
  • Run docker-compose up --build to build and run container. Yes, I expect you to use Docker in this day and age.

The above is enough to run your project except you need more than that if you are working on a real application. So, this:

Personalizing the template

First, head to app/settings and edit Settings.APP_NAME to reflect the name of your application.

Next, you'll want to run pipenv install to ensure you get a Python environment you can attach to your IDE to allow for autocomplete and auto-imports so you don't have yellow and red lines everywhere

After this, we head to the .env to edit some of the values to your taste. Each value is explained in the Config section.

Databases

Databases can be quite dicey and I'm happy to say Alembic is used to handle migrations and whatnots. This coupled with SQLAlchemy makes the world a better place. Whilst PostgreSQL is assumed to be the default database. You can of course edit things to your liking.

  • Create migrations with docker-compose run web alembic revision -m "Migration message here".
  • Run migrations within Docker with docker-compose run web alembic upgrade head.

Config

This section documents configuration options and the meaning of settings values and how to use them.

Environmental Variables

The environmental variables in the .example.env file have specific purposes:

Key Description Default
ALLOWED_HOST The domain you intend to run this application on 0.0.0.0
SECRET_KEY A secret value used to hash and sign tokens and other security-related stuffs. meandyouaretogether
DEBUG A value that evaluates to a boolean to determine whether the app is run in debug mode or production. True
PORT Port the application will run on. If you change this from default, you will have to change the value in the docker-compose.yml file. 11000
POSTGRES_USER This is the default user for the PostgreSQL database. On first run, Docker will use this value to initialize a postgres user so you'll want to set it before your first execution. sasori
POSTGRES_PASSWORD This is the default password for the PostgreSQL database. On first run, Docker will use this value to initialize a postgres database so you'll want to set it before your first execution. sasori
POSTGRES_DB This is the default PostgreSQL database created. On first run, Docker will use this value to initialize a postgres database so you'll want to set it before your first execution akatsuki
POSTGRES_TEST_DB This is the database created for test cases. It is flushed after every test case is run. hebi
POSTGRES_PORT The port Postgres will run on. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. 5432
POSTGRES_HOST The host set in the docker container where the PostgreSQL instance will be running. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. postgres
REDIS_HOST The host set in the docker container where the Redis instance will be running. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. redis
REDIS_PORT The port the application will use to connect to Redis. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. 6379

Application Settings

Application settings are set in the app.settings.Settings class and are used to store app wide configurations. Values are so:

key Description Default
APP_TITLE Name of the application, will show in the documentation App Name
ALLOWED_HOST The domain you intend to run this application on Derived from .env with key ALLOWED_HOST
SECRET_KEY A secret value used to hash and sign tokens and other security-related stuffs. Derived from .env with key SECRET_KEY
DEBUG A value that evaluates to a boolean to determine whether the app is run in debug mode or production. Derived from .env with key DEBUG
ALLOWED_PORT Port the application will run on. If you change this from default, you will have to change the value in the docker-compose.yml file. Derived from .env with key PORT
DB_USER This is the default user for the PostgreSQL database. On first run, Docker will use this value to initialize a postgres user so you'll want to set it before your first execution. Derived from .env with key POSTGRES_USER
DB_PASSWORD This is the default password for the PostgreSQL database. On first run, Docker will use this value to initialize a postgres database so you'll want to set it before your first execution. Derived from .env with key POSTGRES_PASSWORD
DB_DB This is the default PostgreSQL database created. On first run, Docker will use this value to initialize a postgres database so you'll want to set it before your first execution Derived from .env with key POSTGRES_DB
DB_PORT The port Postgres will run on. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. Derived from .env with key POSTGRES_PORT
DB_HOST The host set in the docker container where the PostgreSQL instance will be running. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. Derived from .env with key POSTGRES_HOST
DB_URL URL leading to the application database postgresql+psycopg2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_DB}
TEST_DB This is the database created for test cases. It is flushed after every test case is run. Derived from .env with key POSTGRES_TEST_DB
TEST_DB_URL URL leading to test database postgresql+psycopg2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{TEST_DB}
ACCESS_TOKEN_EXPIRY_TIME Duration in seconds before access token expires 60 * 30 (seconds)
REFRESH_TOKEN_EXPIRY_TIME Duration in seconds before refresh token expires 60 * 30 (seconds)
PASSWORD_HASHER Hashing algorithm for passwords CryptContext(schemes=["bcrypt"], deprecated="auto")
JWT_ALGORITHM Algorithm used to generate JWT token HS256
REDIS_HOST The host set in the docker container where the Redis instance will be running. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. Derived from .env with key REDIS_HOST
REDIS_PORT The port the application will use to connect to Redis. Don't change it except you know what you're doing, and if you do, change the value in the docker-compose.yml file. Derived from .env with key REDIS_HOST
PAGE_SIZE [Not Implemented] default size of page for paginated items 50

I don't want some things

There is the possibility that you may not want some features such as Redis. You can easily remove what you don't need and proceed as planned.

fastapi-template's People

Contributors

lordsarcastic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

fastapi-template's Issues

Add Gunicorn to Docker setup

For the template to be truly production ready, it needs a production-ready server setup such as Gunicorn. Gunicorn needs to be added to the server startup process to make it fully production-ready.

This setup should make use of Uvicorn alongside Gunicorn. This is to ensure Gunicorn can be easily stripped off and the template can be used with plain Uvicorn.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.