{"id":14986495,"url":"https://github.com/deepmancer/full-stack-fastapi-ftgo","last_synced_at":"2025-04-11T20:32:17.150Z","repository":{"id":246907332,"uuid":"821881745","full_name":"deepmancer/full-stack-fastapi-ftgo","owner":"deepmancer","description":"Full stack, modern web application template. Using FastAPI, Vuejs, MongoDB, PostgreSQL, Redis, Metabase, Grafana, Docker, and more!","archived":false,"fork":false,"pushed_at":"2024-12-09T14:27:07.000Z","size":4451,"stargazers_count":24,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-25T18:21:18.489Z","etag":null,"topics":["backend","docker","docker-compose","event-driven","fastapi","frontend","grafana","javascript","jwt-authentication","metabase","microservice","mongodb","openapi","postgresql","profiling","prometheus","python","redis","redisinsight","template"],"latest_commit_sha":null,"homepage":"https://deepmancer.github.io/full-stack-fastapi-ftgo/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deepmancer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-29T18:01:11.000Z","updated_at":"2025-03-18T22:19:29.000Z","dependencies_parsed_at":"2024-08-05T07:24:35.858Z","dependency_job_id":"ddd90dca-c574-4e3c-aeaa-0e0c01f66cdc","html_url":"https://github.com/deepmancer/full-stack-fastapi-ftgo","commit_stats":{"total_commits":191,"total_committers":7,"mean_commits":"27.285714285714285","dds":0.5968586387434556,"last_synced_commit":"044c884eabeb78ec1c47256722468ea33b95a10d"},"previous_names":["alirezaheidari-cs/ftgo_python_fullstack","alirezaheidari-cs/full-stack-fastapi-ftgo","deepmancer/full-stack-fastapi-ftgo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepmancer%2Ffull-stack-fastapi-ftgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepmancer%2Ffull-stack-fastapi-ftgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepmancer%2Ffull-stack-fastapi-ftgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepmancer%2Ffull-stack-fastapi-ftgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deepmancer","download_url":"https://codeload.github.com/deepmancer/full-stack-fastapi-ftgo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248476442,"owners_count":21110284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","docker","docker-compose","event-driven","fastapi","frontend","grafana","javascript","jwt-authentication","metabase","microservice","mongodb","openapi","postgresql","profiling","prometheus","python","redis","redisinsight","template"],"created_at":"2024-09-24T14:12:57.597Z","updated_at":"2025-04-11T20:32:12.088Z","avatar_url":"https://github.com/deepmancer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# **🍕 Full-stack Microservice-Based Food Delivery Application**\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/FastAPI-009688.svg?style=for-the-badge\u0026logo=FastAPI\u0026logoColor=white\" alt=\"FastAPI\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54\" alt=\"Python\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Node.js-5FA04E.svg?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white\" alt=\"Node.js\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Vue.js-4FC08D.svg?style=for-the-badge\u0026logo=vuedotjs\u0026logoColor=white\" alt=\"Vue.js\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/PostgreSQL-4169E1.svg?style=for-the-badge\u0026logo=PostgreSQL\u0026logoColor=white\" alt=\"PostgreSQL\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/MongoDB-47A248.svg?style=for-the-badge\u0026logo=MongoDB\u0026logoColor=white\" alt=\"MongoDB\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Redis-FF4438.svg?style=for-the-badge\u0026logo=Redis\u0026logoColor=white\" alt=\"Redis\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/SQLAlchemy-D71F00.svg?style=for-the-badge\u0026logo=SQLAlchemy\u0026logoColor=white\" alt=\"SQLAlchemy\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Pydantic-E92063.svg?style=for-the-badge\u0026logo=Pydantic\u0026logoColor=white\" alt=\"Pydantic\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/NGINX-009639.svg?style=for-the-badge\u0026logo=NGINX\u0026logoColor=white\" alt=\"NGINX\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Docker-2496ED.svg?style=for-the-badge\u0026logo=Docker\u0026logoColor=white\" alt=\"Docker\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/RabbitMQ-FF6600.svg?style=for-the-badge\u0026logo=RabbitMQ\u0026logoColor=white\" alt=\"RabbitMQ\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Prometheus-E6522C.svg?style=for-the-badge\u0026logo=Prometheus\u0026logoColor=white\" alt=\"Prometheus\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Grafana-F46800.svg?style=for-the-badge\u0026logo=Grafana\u0026logoColor=white\" alt=\"Grafana\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Metabase-509EE3.svg?style=for-the-badge\u0026logo=Metabase\u0026logoColor=white\" alt=\"Metabase\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/YAML-CB171E.svg?style=for-the-badge\u0026logo=YAML\u0026logoColor=white\" alt=\"YAML\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/H3-1E54B7.svg?style=for-the-badge\u0026logo=H3\u0026logoColor=white\" alt=\"H3\"\u003e\n\u003c/p\u003e\n\n\u003e FTGO is a scalable, microservice-based food ordering application built with Python (FastAPI) and Vue.js, designed following object-oriented design principles.\n\n**💎 You can use this project as a template to build your backend microservice project in Python 💎**\n\n🔊 New features and technologies will be added soon!\n\n---\n\n**Source Code**: \u003ca href=\"https://github.com/deepmancer/full-stack-fastapi-ftgo/\" target=\"_blank\"\u003ehttps://github.com/deepmancer/full-stack-fastapi-ftgo\u003c/a\u003e\n\n---\n\n\n## 🔥 Technology Stack and Features\n\n- ⚡ [**FastAPI**](https://fastapi.tiangolo.com):\n    - 🔮 [pydantic](https://docs.pydantic.dev) for settings and request/response validation.\n    - 🔑 JWT middleware for secure authentication.\n    - 🚧 Permission manager for role-based access control on routes.\n    - 📛 Rate limiting for API protection.\n    - ⌚ RequestId, Timing, and many exciting middlewares!\n    - 🔒 Secure password hashing by default.\n    - 🌀 Customizable profilers with [Prometheus](https://prometheus.io/).\n\n- 🌱 [**MongoDB**](https://www.mongodb.com/): \n  - Async client with [motor](https://github.com/mongodb/motor) and Object Document Mapping (ODM) with [beanie](https://beanie-odm.dev/).\n  - [mongo-motors](https://github.com/deepmancer/mongo-motors) package for singleton and managed connection.\n\n- 🧰 [**Redis**](https://redis.io/):\n  - Async operations for caching and session management.\n  - [redis-py](https://github.com/redis/redis-py) with [aredis-client](https://github.com/deepmancer/aredis-client).\n\n- 💾 **PostgreSQL**:\n  - Async client with [SQLAlchemy](https://github.com/sqlalchemy/sqlalchemy) ORM \u0026 automatic migrations with [alembic](https://github.com/sqlalchemy/alembic)..\n  - [asyncpg-client](https://github.com/deepmancer/asyncpg-client) as the session manager.\n\n- 🚀 [**RabbitMQ**](https://www.rabbitmq.com/):\n  - Utilizing [rabbitmq-rpc](https://github.com/deepmancer/rabbitmq-rpc) and [aio-pika](https://github.com/mosquito/aio-pika).\n  - No server-side implementation.\n\n- 🐋 [**Docker Compose**](https://www.docker.com):\n  - Containers for simplified deployment and scaling.\n\n- ✅ [**Pytest**](https://github.com/pytest-dev/pytest):\n  - Async tests with pytest and pytest-async.\n\n## **📂 GUI Management Tools**\n- 🔆 [**Grafana**](https://grafana.com/): Automatic metric dashboards on endpoints using [Prometheus](https://prometheus.io/).\n- 📉 [**Metabase**](https://www.metabase.com/): PostgreSQL/MongoDB analytics and reporting.\n- 📕 [**RedisInsight**](https://redis.io/insight/): Redis data visualization and management.\n- 🌿 [**Mongo-Express**](https://github.com/mongo-express/mongo-express): MongoDB admin interface.\n- 💥 [**RabbitMQ Management**](https://www.rabbitmq.com/docs/management): Visualizing and monitoring events.\n \nThese tools are configured and run via Docker in the `infra/admin/docker-compose.yaml`.\n\n## **Setup Instructions**\n\n### **Step 1: Create Docker Networks**\n\nCreate Docker networks for backend and frontend services.\n\n```bash\ndocker network create --driver bridge backend-network\ndocker network create --driver bridge frontend-network\n```\n\n### **Step 2: Build and Run Infrastructure**\n\nNavigate to the infrastructure directory and start the services, including databases and GUI tools.\n\n```bash\ncd backend/infra\ndocker compose up --build\n```\n\n#### **Infrastructure Layout:**\n\n```bash\nbackend/infra\n├── admin (Metabase, RedisInsight, Mongo-Express)\n├── mongo\n├── monitoring (Grafana, Prometheus)\n├── postgres\n├── rabbitmq (with the Management extension)\n└── redis\n```\n\n### **Step 3: Build and Run Microservices**\n\nNavigate to the backend directory and start all microservices.\n\n```bash\ncd backend/\ndocker compose up --build\n```\n\n## **Frontend Setup**\n\nThe frontend is built with Vue.js for a dynamic and responsive user experience.\n\n### **Step 1: Install Dependencies**\n\nNavigate to the `ui/` directory and install the required packages.\n\n```bash\ncd ui/\nnpm install\n```\n\n### **Step 2: Start Development Server**\n\nRun the development server with hot-reloading enabled.\n\n```bash\nnpm run serve\n```\n\n## Interactive API Documentation\n![image](https://github.com/user-attachments/assets/ebfe2c0e-b9e0-4e01-b266-89b54776428c)\n\n## Admin Dashboards\n### Grafana ([localhost:3000](http://localhost:3000))\n![image](https://github.com/user-attachments/assets/cd867d32-b6fc-423b-a9a8-d2ed7c44d1d0)\n\n### Metabase ([localhost:3030](http://localhost:3030))\n![image](https://github.com/user-attachments/assets/a6f962fa-ae6c-4d25-80ca-ed95837972e9)\n\n### RedisInsight ([localhost:5540](http://localhost:5540))\n![image](https://github.com/user-attachments/assets/0e04ec30-8180-486d-bf7f-11c98f4476ae)\n\n### RabbitMQ Management ([localhost:15673](http://localhost:15673))\n![image](https://github.com/user-attachments/assets/17532670-8b31-4b2d-b305-723b8ce49f77)\n\n### MongoDB Compass\n![image](https://github.com/user-attachments/assets/11be638a-6cd3-4f9c-ad84-eedda8bc4867)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeepmancer%2Ffull-stack-fastapi-ftgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeepmancer%2Ffull-stack-fastapi-ftgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeepmancer%2Ffull-stack-fastapi-ftgo/lists"}