1# Project Generation - Template
2
3You can use a project generator to get started, as it includes a lot of the initial set up, security, database and first API endpoints already done for you.
4
5A project generator will always have a very opinionated setup that you should update and adapt for your own needs, but it might be a good starting point for your project.
6
7## Full Stack FastAPI PostgreSQL
8
9GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-postgresql" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-fastapi-postgresql</a>
10
11### Full Stack FastAPI PostgreSQL - Features
12
13* Full **Docker** integration (Docker based).
14* Docker Swarm Mode deployment.
15* **Docker Compose** integration and optimization for local development.
16* **Production ready** Python web server using Uvicorn and Gunicorn.
17* Python <a href="https://github.com/tiangolo/fastapi" class="external-link" target="_blank">**FastAPI**</a> backend:
18    * **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic).
19    * **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.
20    * **Easy**: Designed to be easy to use and learn. Less time reading docs.
21    * **Short**: Minimize code duplication. Multiple features from each parameter declaration.
22    * **Robust**: Get production-ready code. With automatic interactive documentation.
23    * **Standards-based**: Based on (and fully compatible with) the open standards for APIs: <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> and <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
24    * <a href="https://fastapi.tiangolo.com/features/" class="external-link" target="_blank">**Many other features**</a> including automatic validation, serialization, interactive documentation, authentication with OAuth2 JWT tokens, etc.
25* **Secure password** hashing by default.
26* **JWT token** authentication.
27* **SQLAlchemy** models (independent of Flask extensions, so they can be used with Celery workers directly).
28* Basic starting models for users (modify and remove as you need).
29* **Alembic** migrations.
30* **CORS** (Cross Origin Resource Sharing).
31* **Celery** worker that can import and use models and code from the rest of the backend selectively.
32* REST backend tests based on **Pytest**, integrated with Docker, so you can test the full API interaction, independent on the database. As it runs in Docker, it can build a new data store from scratch each time (so you can use ElasticSearch, MongoDB, CouchDB, or whatever you want, and just test that the API works).
33* Easy Python integration with **Jupyter Kernels** for remote or in-Docker development with extensions like Atom Hydrogen or Visual Studio Code Jupyter.
34* **Vue** frontend:
35    * Generated with Vue CLI.
36    * **JWT Authentication** handling.
37    * Login view.
38    * After login, main dashboard view.
39    * Main dashboard with user creation and edition.
40    * Self user edition.
41    * **Vuex**.
42    * **Vue-router**.
43    * **Vuetify** for beautiful material design components.
44    * **TypeScript**.
45    * Docker server based on **Nginx** (configured to play nicely with Vue-router).
46    * Docker multi-stage building, so you don't need to save or commit compiled code.
47    * Frontend tests ran at build time (can be disabled too).
48    * Made as modular as possible, so it works out of the box, but you can re-generate with Vue CLI or create it as you need, and re-use what you want.
49* **PGAdmin** for PostgreSQL database, you can modify it to use PHPMyAdmin and MySQL easily.
50* **Flower** for Celery jobs monitoring.
51* Load balancing between frontend and backend with **Traefik**, so you can have both under the same domain, separated by path, but served by different containers.
52* Traefik integration, including Let's Encrypt **HTTPS** certificates automatic generation.
53* GitLab **CI** (continuous integration), including frontend and backend testing.
54
55## Full Stack FastAPI Couchbase
56
57GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-fastapi-couchbase</a>
58
59⚠️ **WARNING** ⚠️
60
61If you are starting a new project from scratch, check the alternatives here.
62
63For example, the project generator <a href="https://github.com/tiangolo/full-stack-fastapi-postgresql" class="external-link" target="_blank">Full Stack FastAPI PostgreSQL</a> might be a better alternative, as it is actively maintained and used. And it includes all the new features and improvements.
64
65You are still free to use the Couchbase-based generator if you want to, it should probably still work fine, and if you already have a project generated with it that's fine as well (and you probably already updated it to suit your needs).
66
67You can read more about it in the docs for the repo.
68
69## Full Stack FastAPI MongoDB
70
71...might come later, depending on my time availability and other factors. �� ��
72
73## Machine Learning models with spaCy and FastAPI
74
75GitHub: <a href="https://github.com/microsoft/cookiecutter-spacy-fastapi" class="external-link" target="_blank">https://github.com/microsoft/cookiecutter-spacy-fastapi</a>
76
77### Machine Learning models with spaCy and FastAPI - Features
78
79* **spaCy** NER model integration.
80* **Azure Cognitive Search** request format built in.
81* **Production ready** Python web server using Uvicorn and Gunicorn.
82* **Azure DevOps** Kubernetes (AKS) CI/CD deployment built in.
83* **Multilingual** Easily choose one of spaCy's built in languages during project setup.
84* **Easily extensible** to other model frameworks (Pytorch, Tensorflow), not just spaCy.
85