Configuration Guide
This guide describes how to configure Issue Tracker for different environments.
Configuration Files
Development: appsettings.Development.json
{
"ConnectionStrings": {
"MongoDB": "mongodb://localhost:27017",
"DatabaseName": "IssueTrackerDb"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Production: appsettings.Production.json
{
"ConnectionStrings": {
"MongoDB": "mongodb://mongo-production:27017",
"DatabaseName": "IssueTrackerProd"
},
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.AspNetCore": "Error"
}
},
"AllowedHosts": "yourdomain.com"
}
Environment Variables
You can override settings using environment variables:
MongoDB Connection
# Linux/Mac
export ConnectionStrings__MongoDB="mongodb://localhost:27017"
export ConnectionStrings__DatabaseName="IssueTrackerDb"
# Windows (PowerShell)
$env:ConnectionStrings__MongoDB="mongodb://localhost:27017"
$env:ConnectionStrings__DatabaseName="IssueTrackerDb"
# Windows (CMD)
set ConnectionStrings__MongoDB=mongodb://localhost:27017
set ConnectionStrings__DatabaseName=IssueTrackerDb
Using Docker Compose
Environment variables can be set in docker-compose.yml:
version: '3.8'
services:
app:
environment:
- ConnectionStrings__MongoDB=mongodb://mongo:27017
- ConnectionStrings__DatabaseName=IssueTrackerDb
- ASPNETCORE_ENVIRONMENT=Production
mongo:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
Configuration Options
Database Settings
| Setting | Description | Default | Required |
|---|---|---|---|
ConnectionStrings:MongoDB |
MongoDB connection string | mongodb://localhost:27017 |
Yes |
ConnectionStrings:DatabaseName |
Database name | IssueTrackerDb |
Yes |
Logging Settings
| Setting | Description | Values |
|---|---|---|
Logging:LogLevel:Default |
Default log level | Trace, Debug, Information, Warning, Error, Critical |
Logging:LogLevel:Microsoft.AspNetCore |
ASP.NET Core log level | Same as above |
Application Settings
| Setting | Description | Default |
|---|---|---|
AllowedHosts |
Allowed host headers | * (all) |
ASPNETCORE_ENVIRONMENT |
Runtime environment | Development |
ASPNETCORE_URLS |
URLs to listen on | https://localhost:5001;http://localhost:5000 |
User Secrets (Development)
For sensitive data in development, use .NET User Secrets:
Initialize User Secrets
cd src/IssueTracker.UI
dotnet user-secrets init
Set Secrets
dotnet user-secrets set "ConnectionStrings:MongoDB" "mongodb://localhost:27017"
dotnet user-secrets set "ConnectionStrings:DatabaseName" "IssueTrackerDb"
List Secrets
dotnet user-secrets list
Azure Configuration
Using Azure App Configuration
- Create an Azure App Configuration resource
- Add connection string to environment:
export ConnectionStrings__AppConfig="Endpoint=https://your-config.azconfig.io;..."
- Update
Program.cs:
builder.Configuration.AddAzureAppConfiguration(options =>
{
options.Connect(builder.Configuration["ConnectionStrings:AppConfig"])
.ConfigureRefresh(refresh =>
{
refresh.Register("Settings:Sentinel", refreshAll: true);
});
});
Using Azure Key Vault
- Create an Azure Key Vault
- Update
Program.cs:
var keyVaultEndpoint = new Uri(builder.Configuration["KeyVaultEndpoint"]);
builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, new DefaultAzureCredential());
MongoDB Connection Strings
Local Development
mongodb://localhost:27017
Docker Container
mongodb://mongo:27017
MongoDB Atlas (Cloud)
mongodb+srv://username:password@cluster.mongodb.net/database?retryWrites=true&w=majority
Replica Set
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0
With Authentication
mongodb://username:password@localhost:27017/?authSource=admin
Configuration Best Practices
1. Never Commit Secrets
- Use User Secrets for development
- Use environment variables for production
- Add
appsettings.*.jsonto.gitignoreif it contains secrets
2. Use Different Databases Per Environment
{
"ConnectionStrings": {
"DatabaseName": "IssueTracker_Development" // Dev
// "IssueTracker_Staging" // Staging
// "IssueTracker_Production" // Production
}
}
3. Validate Configuration on Startup
Add to Program.cs:
var mongoConnection = builder.Configuration["ConnectionStrings:MongoDB"];
if (string.IsNullOrEmpty(mongoConnection))
{
throw new InvalidOperationException("MongoDB connection string is not configured");
}
4. Use Dependency Injection
Register configuration objects:
builder.Services.Configure<DatabaseSettings>(
builder.Configuration.GetSection("ConnectionStrings"));
Access in services:
public class MyService
{
private readonly DatabaseSettings _settings;
public MyService(IOptions<DatabaseSettings> settings)
{
_settings = settings.Value;
}
}
Troubleshooting
Can’t Connect to MongoDB
- Check connection string format
- Verify MongoDB is running:
docker psormongod --version - Check network connectivity
- Verify authentication credentials
Configuration Not Loading
- Check file name matches environment:
appsettings.{Environment}.json - Verify
ASPNETCORE_ENVIRONMENTis set correctly - Check file is set to “Copy if newer” in project properties
- Ensure JSON is valid (use a JSON validator)