EatMe is a full-stack, microservice-based food ordering application designed for scalability and efficiency. Built with modern technologies like Python's FastAPI and Javascript. This application follows best practices in object-oriented design and microservices architecture. It serves as a robust template to create advanced backend microservice projects.
Technology Stack and Features:
-
- pydantic for settings and request/response validation.
- JWT middleware for secure authentication.
- Permission manager for role-based access control on routes.
- Rate limiting for API protection.
- RequestId, Timing, and many exciting middlewares!
- Secure password hashing by default.
- Customizable profilers with Prometheus.
-
- Async client with motor and Object Document Mapping (ODM)
-
- Async operations for caching and session management.
- redis-py.
-
PostgreSQL:
- Async client with aqlachemy ORM & automatic migrations with alembic..
- asyncpg-client as the session manager.
-
- Utilizing rabbitmq-rpc and aio-pika.
- No server-side implementation.
-
- Containers for simplified deployment and scaling.
-
- Async tests with pytest and pytest-async.
- Grafana: Automatic metric dashboards on endpoints using Prometheus.
- Metabase: PostgreSQL/MongoDB analytics and reporting.
- RedisInsight: Redis data visualization and management.
- Mongo-Express: MongoDB admin interface.
- RabbitMQ Management: Visualizing and monitoring events.
These tools are configured and run via Docker in the infra/admin/docker-compose.yaml
.
Create Docker networks for backend and frontend services.
docker network create --driver bridge backend-network
docker network create --driver bridge frontend-network
Navigate to the infrastructure directory and start the services, including databases and GUI tools.
cd backend/infra
docker compose up --build
backend/infra
├── admin (Metabase, RedisInsight, Mongo-Express)
├── mongo
├── monitoring (Grafana, Prometheus)
├── postgres
├── rabbitmq (with the Management extension)
└── redis
Navigate to the backend directory and start all microservices.
cd backend/
docker compose up --build
The frontend is built with Vue.js for a dynamic and responsive user experience.
Navigate to the ui/
directory and install the required packages.
cd ui/
npm install
Run the development server with hot-reloading enabled.
npm run serve