2024-03-12 20:23:20 +01:00
# Full Stack FastAPI Template
2024-03-07 18:03:15 -05:00
2024-08-02 14:34:32 -05:00
< a href = "https://github.com/fastapi/full-stack-fastapi-template/actions?query=workflow%3ATest" target = "_blank" > < img src = "https://github.com/fastapi/full-stack-fastapi-template/workflows/Test/badge.svg" alt = "Test" > < / a >
< a href = "https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/full-stack-fastapi-template" target = "_blank" > < img src = "https://coverage-badge.samuelcolvin.workers.dev/fastapi/full-stack-fastapi-template.svg" alt = "Coverage" > < / a >
2024-03-08 20:47:58 +01:00
2024-03-01 21:18:16 +01:00
## Technology Stack and Features
- ⚡ [**FastAPI** ](https://fastapi.tiangolo.com ) for the Python backend API.
- 🧰 [SQLModel ](https://sqlmodel.tiangolo.com ) for the Python SQL database interactions (ORM).
- 🔍 [Pydantic ](https://docs.pydantic.dev ), used by FastAPI, for the data validation and settings management.
- 💾 [PostgreSQL ](https://www.postgresql.org ) as the SQL database.
- 🚀 [React ](https://react.dev ) for the frontend.
- 💃 Using TypeScript, hooks, Vite, and other parts of a modern frontend stack.
- 🎨 [Chakra UI ](https://chakra-ui.com ) for the frontend components.
- 🤖 An automatically generated frontend client.
2024-08-01 11:50:55 -05:00
- 🧪 [Playwright ](https://playwright.dev ) for End-to-End testing.
2024-03-12 21:46:08 +01:00
- 🦇 Dark mode support.
2024-03-01 21:18:16 +01:00
- 🐋 [Docker Compose ](https://www.docker.com ) for development and production.
- 🔒 Secure password hashing by default.
2024-05-16 20:57:38 +02:00
- 🔑 JWT (JSON Web Token) authentication.
2024-03-01 21:18:16 +01:00
- 📫 Email based password recovery.
- ✅ Tests with [Pytest ](https://pytest.org ).
- 📞 [Traefik ](https://traefik.io ) as a reverse proxy / load balancer.
- 🚢 Deployment instructions using Docker Compose, including how to set up a frontend Traefik proxy to handle automatic HTTPS certificates.
- 🏭 CI (continuous integration) and CD (continuous deployment) based on GitHub Actions.
2019-02-09 19:42:36 +04:00
2024-03-12 20:23:20 +01:00
### Dashboard Login
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-12 20:23:20 +01:00
### Dashboard - Admin
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-12 20:23:20 +01:00
### Dashboard - Create User
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-12 20:23:20 +01:00
### Dashboard - Items
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-12 20:23:20 +01:00
### Dashboard - User Settings
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-12 20:23:20 +01:00
2024-03-13 12:54:57 +01:00
### Dashboard - Dark Mode
2024-03-12 20:23:20 +01:00
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-12 20:23:20 +01:00
2024-03-13 23:09:21 +01:00
### Interactive API Documentation
2024-08-02 14:34:32 -05:00
[](https://github.com/fastapi/full-stack-fastapi-template)
2024-03-13 23:09:21 +01:00
2024-03-13 18:55:33 +01:00
## How To Use It
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
You can **just fork or clone** this repository and use it as is.
✨ It just works. ✨
2024-03-25 16:05:40 -05:00
### How to Use a Private Repository
If you want to have a private repository, GitHub won't allow you to simply fork it as it doesn't allow changing the visibility of forks.
But you can do the following:
- Create a new GitHub repo, for example `my-full-stack` .
- Clone this repository manually, set the name with the name of the project you want to use, for example `my-full-stack` :
```bash
2024-08-02 14:34:32 -05:00
git clone git@github .com:fastapi/full-stack-fastapi-template.git my-full-stack
2024-03-25 16:05:40 -05:00
```
- Enter into the new directory:
```bash
cd my-full-stack
```
- Set the new origin to your new repository, copy it from the GitHub interface, for example:
```bash
git remote set-url origin git@github .com:octocat/my-full-stack.git
```
- Add this repo as another "remote" to allow you to get updates later:
```bash
2024-08-02 14:34:32 -05:00
git remote add upstream git@github .com:fastapi/full-stack-fastapi-template.git
2024-03-25 16:05:40 -05:00
```
- Push the code to your new repository:
```bash
git push -u origin master
```
### Update From the Original Template
After cloning the repository, and after doing changes, you might want to get the latest changes from this original template.
- Make sure you added the original repository as a remote, you can check it with:
```bash
git remote -v
origin git@github .com:octocat/my-full-stack.git (fetch)
origin git@github .com:octocat/my-full-stack.git (push)
2024-08-02 14:34:32 -05:00
upstream git@github .com:fastapi/full-stack-fastapi-template.git (fetch)
upstream git@github .com:fastapi/full-stack-fastapi-template.git (push)
2024-03-25 16:05:40 -05:00
```
- Pull the latest changes without merging:
```bash
git pull --no-commit upstream master
```
This will download the latest changes from this template without committing them, that way you can check everything is right before committing.
- If there are conflicts, solve them in your editor.
- Once you are done, commit the changes:
```bash
git merge --continue
```
2024-03-01 21:18:16 +01:00
### Configure
You can then update configs in the `.env` files to customize your configurations.
2024-03-12 20:23:20 +01:00
Before deploying it, make sure you change at least the values for:
- `SECRET_KEY`
- `FIRST_SUPERUSER_PASSWORD`
- `POSTGRES_PASSWORD`
2024-03-01 21:18:16 +01:00
2024-03-25 16:55:24 -05:00
You can (and should) pass these as environment variables from secrets.
Read the [deployment.md ](./deployment.md ) docs for more details.
2024-03-13 18:55:33 +01:00
### Generate Secret Keys
2024-03-01 21:18:16 +01:00
2024-03-12 10:53:25 +01:00
Some environment variables in the `.env` file have a default value of `changethis` .
2024-03-01 21:18:16 +01:00
2024-03-11 20:34:59 +01:00
You have to change them with a secret key, to generate secret keys you can run the following command:
2019-02-09 19:42:36 +04:00
```bash
2024-03-01 21:18:16 +01:00
python -c "import secrets; print(secrets.token_urlsafe(32))"
2019-02-09 19:42:36 +04:00
```
2024-03-11 20:34:59 +01:00
Copy the content and use that as password / secret key. And run that again to generate another secure key.
2024-03-01 21:18:16 +01:00
2024-03-13 18:55:33 +01:00
## How To Use It - Alternative With Copier
2024-03-01 21:18:16 +01:00
2024-03-12 20:23:20 +01:00
This repository also supports generating a new project using [Copier ](https://copier.readthedocs.io ).
2024-03-01 21:18:16 +01:00
It will copy all the files, ask you configuration questions, and update the `.env` files with your answers.
### Install Copier
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
You can install Copier with:
2019-02-09 19:42:36 +04:00
```bash
2024-03-01 21:18:16 +01:00
pip install copier
2019-02-09 19:42:36 +04:00
```
2024-03-01 21:18:16 +01:00
Or better, if you have [`pipx` ](https://pipx.pypa.io/ ), you can run it with:
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
```bash
pipx install copier
```
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
**Note**: If you have `pipx` , installing copier is optional, you could run it directly.
2019-02-09 19:42:36 +04:00
2024-03-13 18:55:33 +01:00
### Generate a Project With Copier
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
Decide a name for your new project's directory, you will use it below. For example, `my-awesome-project` .
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
Go to the directory that will be the parent of your project, and run the command with your project's name:
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
```bash
2024-08-02 14:34:32 -05:00
copier copy https://github.com/fastapi/full-stack-fastapi-template my-awesome-project --trust
2024-03-01 21:18:16 +01:00
```
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
If you have `pipx` and you didn't install `copier` , you can run it directly:
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
```bash
2024-08-02 14:34:32 -05:00
pipx run copier copy https://github.com/fastapi/full-stack-fastapi-template my-awesome-project --trust
2024-03-01 21:18:16 +01:00
```
2024-08-02 14:34:32 -05:00
**Note** the `--trust` option is necessary to be able to execute a [post-creation script ](https://github.com/fastapi/full-stack-fastapi-template/blob/master/.copier/update_dotenv.py ) that updates your `.env` files.
2024-03-01 21:18:16 +01:00
2024-03-13 18:55:33 +01:00
### Input Variables
2024-03-01 21:18:16 +01:00
Copier will ask you for some data, you might want to have at hand before generating the project.
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
But don't worry, you can just update any of that in the `.env` files afterwards.
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
The input variables, with their default values (some auto generated) are:
2019-02-09 19:42:36 +04:00
2024-03-01 21:18:16 +01:00
- `project_name` : (default: `"FastAPI Project"` ) The name of the project, shown to API users (in .env).
2024-03-25 16:55:24 -05:00
- `stack_name` : (default: `"fastapi-project"` ) The name of the stack used for Docker Compose labels and project name (no spaces, no periods) (in .env).
2024-03-01 21:18:16 +01:00
- `secret_key` : (default: `"changethis"` ) The secret key for the project, used for security, stored in .env, you can generate one with the method above.
- `first_superuser` : (default: `"admin@example.com"` ) The email of the first superuser (in .env).
- `first_superuser_password` : (default: `"changethis"` ) The password of the first superuser (in .env).
- `smtp_host` : (default: "") The SMTP server host to send emails, you can set it later in .env.
- `smtp_user` : (default: "") The SMTP server user to send emails, you can set it later in .env.
- `smtp_password` : (default: "") The SMTP server password to send emails, you can set it later in .env.
- `emails_from_email` : (default: `"info@example.com"` ) The email account to send emails from, you can set it later in .env.
- `postgres_password` : (default: `"changethis"` ) The password for the PostgreSQL database, stored in .env, you can generate one with the method above.
- `sentry_dsn` : (default: "") The DSN for Sentry, if you are using it, you can set it later in .env.
2019-02-23 23:51:49 +04:00
2024-03-07 20:49:43 +01:00
## Backend Development
2024-03-01 21:18:16 +01:00
2024-03-12 20:23:20 +01:00
Backend docs: [backend/README.md ](./backend/README.md ).
2024-03-01 21:18:16 +01:00
2024-03-07 20:49:43 +01:00
## Frontend Development
2024-03-01 21:18:16 +01:00
2024-03-12 20:23:20 +01:00
Frontend docs: [frontend/README.md ](./frontend/README.md ).
2024-03-01 21:18:16 +01:00
## Deployment
2024-03-12 20:23:20 +01:00
Deployment docs: [deployment.md ](./deployment.md ).
2024-03-01 21:18:16 +01:00
2024-03-07 20:49:43 +01:00
## Development
2024-03-01 21:18:16 +01:00
2024-03-12 20:23:20 +01:00
General development docs: [development.md ](./development.md ).
2024-03-01 21:18:16 +01:00
2024-03-07 20:49:43 +01:00
This includes using Docker Compose, custom local domains, `.env` configurations, etc.
2024-03-12 20:23:20 +01:00
## Release Notes
Check the file [release-notes.md ](./release-notes.md ).
## License
The Full Stack FastAPI Template is licensed under the terms of the MIT license.