Overview
AspNetRun Microservices uses environment variables extensively for configuration in containerized environments. These variables are defined in docker-compose.override.yml and override the default appsettings.json values.
Core ASP.NET Variables
All services use these standard ASP.NET Core environment variables:
| Variable | Description | Default Value |
|---|
ASPNETCORE_ENVIRONMENT | Sets the hosting environment | Development |
ASPNETCORE_HTTP_PORTS | HTTP port for the service | 8080 |
ASPNETCORE_HTTPS_PORTS | HTTPS port for the service | 8081 |
Database Environment Variables
PostgreSQL Databases
Used by Catalog and Basket services:
CatalogDB Container:
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=CatalogDb
BasketDB Container:
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=BasketDb
SQL Server Database
Used by Ordering service:
OrderDB Container:
ACCEPT_EULA=Y
SA_PASSWORD=SwN12345678
Service-Specific Variables
Catalog API
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORTS=8080
ASPNETCORE_HTTPS_PORTS=8081
ConnectionStrings__Database=Server=catalogdb;Port=5432;Database=CatalogDb;User Id=postgres;Password=postgres;Include Error Detail=true
Connection Details:
- Database: PostgreSQL
- Host:
catalogdb (Docker service name)
- Port:
5432
- Database:
CatalogDb
Basket API
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORTS=8080
ASPNETCORE_HTTPS_PORTS=8081
ConnectionStrings__Database=Server=basketdb;Port=5432;Database=BasketDb;User Id=postgres;Password=postgres;Include Error Detail=true
ConnectionStrings__Redis=distributedcache:6379
GrpcSettings__DiscountUrl=https://discount.grpc:8081
MessageBroker__Host=amqp://ecommerce-mq:5672
MessageBroker__UserName=guest
MessageBroker__Password=guest
Connection Details:
- Database: PostgreSQL on
basketdb:5432
- Cache: Redis on
distributedcache:6379
- gRPC: Discount service at
https://discount.grpc:8081
- Message Broker: RabbitMQ at
amqp://ecommerce-mq:5672
Discount gRPC
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORTS=8080
ASPNETCORE_HTTPS_PORTS=8081
ConnectionStrings__Database=Data Source=discountdb
Connection Details:
- Database: SQLite with file
discountdb
- Protocol: HTTP/2 (gRPC)
Ordering API
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORTS=8080
ASPNETCORE_HTTPS_PORTS=8081
ConnectionStrings__Database=Server=orderdb;Database=OrderDb;User Id=sa;Password=SwN12345678;Encrypt=False;TrustServerCertificate=True
MessageBroker__Host=amqp://ecommerce-mq:5672
MessageBroker__UserName=guest
MessageBroker__Password=guest
FeatureManagement__OrderFullfilment=false
Connection Details:
- Database: SQL Server on
orderdb:1433
- Message Broker: RabbitMQ at
amqp://ecommerce-mq:5672
- Feature Flags: OrderFullfilment disabled by default
YARP API Gateway
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORTS=8080
ASPNETCORE_HTTPS_PORTS=8081
Note: Routes and clusters are configured via appsettings.json (see ReverseProxy section).
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORTS=8080
ASPNETCORE_HTTPS_PORTS=8081
ApiSettings__GatewayAddress=http://yarpapigateway:8080
Connection Details:
- Gateway: YARP API Gateway at
http://yarpapigateway:8080
Message Broker Variables
RabbitMQ is used for async communication between services:
MessageBroker Container:
RABBITMQ_DEFAULT_USER=guest
RABBITMQ_DEFAULT_PASS=guest
Services Configuration:
MessageBroker__Host=amqp://ecommerce-mq:5672
MessageBroker__UserName=guest
MessageBroker__Password=guest
Used by: Basket API, Ordering API
Port Mappings
Services expose both HTTP and HTTPS ports mapped to the host:
| Service | HTTP Port | HTTPS Port |
|---|
| Catalog API | 6000:8080 | 6060:8081 |
| Basket API | 6001:8080 | 6061:8081 |
| Discount gRPC | 6002:8080 | 6062:8081 |
| Ordering API | 6003:8080 | 6063:8081 |
| YARP Gateway | 6004:8080 | 6064:8081 |
| Shopping Web | 6005:8080 | 6065:8081 |
Infrastructure services:
| Service | Port | Description |
|---|
| CatalogDB | 5432:5432 | PostgreSQL |
| BasketDB | 5433:5432 | PostgreSQL |
| Redis | 6379:6379 | Distributed Cache |
| OrderDB | 1433:1433 | SQL Server |
| RabbitMQ | 5672:5672 | AMQP Protocol |
| RabbitMQ Management | 15672:15672 | Web UI |
Volume Mappings
User secrets and HTTPS certificates are mounted from the host:
${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
Data persistence volumes:
postgres_catalog:/var/lib/postgresql/data/
postgres_basket:/var/lib/postgresql/data/
Configuration Override Hierarchy
ASP.NET Core applies configuration in this order (later sources override earlier ones):
appsettings.json (base configuration)
appsettings.{Environment}.json (environment-specific)
- User Secrets (development only)
- Environment Variables (docker-compose.override.yml)
- Command-line arguments
In Docker environments, environment variables from docker-compose.override.yml take precedence over file-based settings.
Local Development vs Docker
Local Development (outside Docker):
- Use
appsettings.json with localhost hostnames
- Database ports:
5432, 5433, 1433
- Services run on ports:
6000-6005
Docker Environment:
- Use Docker service names (
catalogdb, basketdb, etc.)
- Internal ports:
8080, 8081
- Container-to-container communication on Docker network
Security Considerations
The default passwords shown here are for development only. Always use strong, unique passwords in production environments.
Sensitive values to change in production:
- Database passwords (
POSTGRES_PASSWORD, SA_PASSWORD)
- RabbitMQ credentials (
RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS)
- Connection strings (store in Azure Key Vault or similar)
- Consider using Docker secrets or Kubernetes secrets for production deployments