Files
docs/archive/ENVIRONMENT-CONFIG-GUIDE.md
T
masoodafar-web 5965b98728 update
2026-01-03 18:27:49 +03:30

4.9 KiB

Environment-specific Configuration Guide

📁 فایل‌های appsettings

این پروژه از فایل‌های زیر برای مدیریت تنظیمات محیط‌های مختلف استفاده می‌کند:

فایل‌های موجود:

فایل محیط Git توضیحات
appsettings.json Base/Default Commit تنظیمات پایه و مقادیر پیش‌فرض
appsettings.Development.json Local/Test Commit محیط توسعه محلی (Mock APIs)
appsettings.Staging.json Staging ⚠️ Template محیط Stage (نیاز به تنظیمات واقعی)
appsettings.Production.json Production ⚠️ Template محیط Production (نیاز به تنظیمات واقعی)

🔐 امنیت

⚠️ فایل‌هایی که نباید commit شوند:

# Sensitive configuration files
appsettings.Staging.json
appsettings.Production.json
appsettings.*.local.json

روش امن:

  1. فایل‌های Template: فایل‌های appsettings.Staging.json و appsettings.Production.json به صورت template در Git هستند
  2. مقادیر واقعی: از Environment Variables یا Kubernetes Secrets استفاده کنید
  3. CI/CD: مقادیر حساس را از Azure Key Vault یا Kubernetes Secrets تزریق کنید

🚀 نحوه اجرا در محیط‌های مختلف

Local Development:

dotnet run --environment Development
# یا
export ASPNETCORE_ENVIRONMENT=Development
dotnet run

Staging:

dotnet run --environment Staging

Production:

dotnet run --environment Production

🐳 Docker

برای Docker، environment را با -e تنظیم کنید:

docker run -e ASPNETCORE_ENVIRONMENT=Staging yourimage:tag

☸️ Kubernetes

در Deployment manifest:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cms-api
spec:
  template:
    spec:
      containers:
      - name: cms
        env:
        - name: ASPNETCORE_ENVIRONMENT
          value: "Production"  # یا "Staging"
        # Override تنظیمات از Secrets
        - name: ConnectionStrings__DefaultConnection
          valueFrom:
            secretKeyRef:
              name: cms-secrets
              key: db-connection
        - name: Sms__KavenegarApiKey
          valueFrom:
            secretKeyRef:
              name: cms-secrets
              key: kavenegar-key

📋 Checklist تنظیمات محیط Production

  • ConnectionString database production
  • JwtSecurityKey یونیک
  • Sentry DSN
  • Slack Webhook
  • SMTP credentials
  • Kavenegar API Key
  • Daya API Key
  • Chatika API Key
  • Seq Server URL
  • SSL/TLS enabled
  • UseRealPaymentGateway = true
  • Background jobs enabled با cron صحیح

🔄 CI/CD Pipeline

برای برنچ kub-stage:

# در GitLab CI یا GitHub Actions
environment:
  name: staging
  variables:
    ASPNETCORE_ENVIRONMENT: "Staging"
    
# یا در Kubernetes ConfigMap:
kubectl create secret generic cms-secrets \
  --from-literal=db-connection="..." \
  --from-literal=kavenegar-key="..." \
  --namespace=staging

برای برنچ production:

environment:
  name: production
  variables:
    ASPNETCORE_ENVIRONMENT: "Production"

kubectl create secret generic cms-secrets \
  --from-literal=db-connection="..." \
  --from-literal=kavenegar-key="..." \
  --namespace=production

🎛️ Override تنظیمات با Environment Variables

ASP.NET Core به صورت خودکار از environment variables استفاده می‌کند:

# Format: Section__Property
export ConnectionStrings__DefaultConnection="Server=..."
export Sms__KavenegarApiKey="your-key"
export BackgroundJobs__WeeklyCommissionCalculation__Enabled="true"

اولویت تنظیمات:

  1. Environment Variables (بالاترین)
  2. appsettings.{Environment}.json
  3. appsettings.json (پایین‌ترین)

📊 تفاوت‌های کلیدی محیط‌ها

تنظیم Development Staging Production
Payment Gateway Mock Mock Real
SMS Disabled Disabled Enabled
Email Disabled Disabled Enabled
Sentry Disabled Enabled Enabled
Background Jobs Disabled Enabled Enabled
Log Level Debug Information Warning
Chatika Disabled Disabled Enabled
Daya API Mock Mock Real

🛠️ تست تنظیمات

برای تست اینکه کدام فایل لود شده:

// در Program.cs یا Controller
app.Logger.LogInformation("Environment: {Env}", app.Environment.EnvironmentName);
app.Logger.LogInformation("Connection: {Conn}", 
    app.Configuration.GetConnectionString("DefaultConnection"));

یا از endpoint health check:

GET /health