Prerequisites
Before you begin, ensure you have the following installed:.NET 9 SDK
Download from dotnet.microsoft.com
Docker Desktop
Required for PostgreSQL, RabbitMQ, and observability stack
.NET Aspire Workload
Install with:
dotnet workload install aspireGit
For cloning the repository
Make sure Docker Desktop is running before starting the application. Aspire will automatically provision all required containers.
Quick Start
Run with Aspire
Start the entire system with a single command:Aspire will:
- Build all microservices
- Start PostgreSQL with 4 databases (users, trips, notifications, auth)
- Launch RabbitMQ for message queuing
- Deploy the observability stack (Prometheus, Grafana, Jaeger, Loki)
- Configure service discovery and health checks
- Open the Aspire Dashboard
First run may take 5-10 minutes as Docker images are pulled and projects are built.
Access the Aspire Dashboard
The dashboard opens automatically at http://localhost:8080Here you can:
- Monitor all service health and logs in real-time
- View resource consumption (CPU, memory, network)
- Access service endpoints
- Check distributed traces
- View environment variables and configuration
Verify Services
Once Aspire finishes orchestration, verify all services are healthy:Core Microservices
Port numbers are dynamically assigned by Aspire. Check the Aspire Dashboard at http://localhost:8080 for exact endpoint URLs.
Infrastructure Services
PostgreSQL (pgAdmin)
URL: http://localhost:5050View all databases:
userdb- User profiles, drivers, passengerstripdb- Trip bookings, routes, seatsnotificationsdb- Push notification historyauthdb- Identity and authentication
RabbitMQ Management
URL: http://localhost:15672Credentials: guest/guestMonitor:
- Message queues and exchanges
- Message throughput and routing
- Dead letter queues
Grafana Dashboard
URL: Check Aspire DashboardUnified observability:
- Service metrics and performance
- Log aggregation from all services
- Distributed traces
Jaeger Tracing
URL: http://localhost:16686Visualize:
- Request flows across services
- Latency bottlenecks
- Service dependencies
Explore the API
Each service includes Swagger documentation:Find Service Endpoints
Open the Aspire Dashboard at http://localhost:8080 and locate the service endpoints under the “Resources” tab.
Access Swagger UI
Navigate to any API service:Available for:
- Users API
- Trips API
- Notifications API
- Gateway API (aggregated routes)
Default Configuration
Aspire automatically configures the system with development defaults:RabbitMQ Credentials
These credentials are defined in
src/aspire/AppHost/appsettings.json and can be customized for different environments.Database Connections
All database connections are automatically injected via Aspire service discovery:OpenTelemetry
All services automatically export telemetry to the observability stack:Troubleshooting
Docker connection errors
Docker connection errors
Problem: Aspire can’t connect to DockerSolution:
- Ensure Docker Desktop is running
- Check Docker daemon is accessible:
docker ps - Restart Docker Desktop if needed
Port conflicts
Port conflicts
Problem: Port already in useSolution:
Aspire auto-assigns most ports, but reserved ports include:
- 8080 (Aspire Dashboard)
- 5050 (pgAdmin)
- 15672 (RabbitMQ Management)
- 16686 (Jaeger UI)
AppHost.csService won't start
Service won't start
Problem: A specific service fails to startSolution:
- Check the Aspire Dashboard logs for the failing service
- Verify dependencies are healthy (PostgreSQL, RabbitMQ)
- Look for migration errors in database services
- Check the console output for build errors
Database migration issues
Database migration issues
Problem: Database migrations failSolution:
Services automatically run migrations on startup using FluentMigrator:Check container logs in Aspire Dashboard for migration errors.
Next Steps
Architecture Overview
Understand the microservices architecture and technology stack
Development Guide
Set up your development environment and learn the development workflow
API Reference
Explore detailed API documentation for all services
Deployment
Deploy to production with Docker Compose or Kubernetes