Chuyển tới nội dung chính

15.5 — 4. Environment và Secrets

Mục tiêu bài học

  • Nắm được ý chính của bài và mối liên hệ với module.
  • Áp dụng được kiến thức vào bối cảnh CRM/.NET backend.
  • Sẵn sàng chuyển sang bài kế tiếp với nền tảng chắc chắn.

Nội dung bài học

15.5.1 — ASPNETCORE_ENVIRONMENT

ASP.NET Core đọc biến môi trường này để chọn appsettings.[Environment].json:

  • Development: appsettings.Development.json, detailed errors
  • Staging: appsettings.Staging.json
  • Production: appsettings.json, ẩn stack trace

15.5.2 — Environment Variables trong Docker

Ưu tiên đọc cấu hình: appsettings.json → appsettings.[Environment].json → biến môi trường.

Biến môi trường ghi đè cấu hình JSON:

# JSON: { "Jwt": { "Secret": "..." } }
# Env var: Jwt__Secret=value (dùng __ thay vì :)
docker run -e "Jwt__Secret=mysecretkey" crm-api:latest

15.5.3 — Không Commit Secret vào Image

Nguyên tắc: không bao giờ hardcode connection string, API key, password trong Dockerfile hoặc code.

# SAI - bao giờ cũng sai
ENV ConnectionStrings__DefaultConnection="Server=...;Password=P@ss123"

# ĐÚNG - inject lúc runtime
# docker run -e "ConnectionStrings__DefaultConnection=..." crm-api

15.5.4 — .env File

# .env (KHÔNG commit file này, thêm vào .gitignore)
SA_PASSWORD=YourStr0ngPassword!
REDIS_PASSWORD=RedisPass123
JWT_SECRET=supersecretkey_at_least_32_chars
SEQ_PASSWORD_HASH=...
# .gitignore
.env
*.env
!.env.example

15.5.5 — Docker Secrets (Swarm mode)

echo "YourStr0ngPassword!" | docker secret create sa_password -
# docker-compose.yml (swarm)
secrets:
sa_password:
external: true
services:
sqlserver:
secrets:
- sa_password

15.5.6 — Azure Key Vault (Concept)

Trong production cloud, không dùng biến môi trường cho secrets nhạy cảm. Dùng Azure Key Vault:

// Program.cs
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{keyVaultName}.vault.azure.net/"),
new DefaultAzureCredential());

Managed Identity của App Service tự động xác thực — không cần lưu credential.


Bài tập áp dụng

  1. Tóm tắt bài học bằng ngôn ngữ của bạn.
  2. Liên hệ nội dung với một tình huống thực tế trong dự án.
  3. Đề xuất một cải tiến cụ thể sau khi học bài này.

Tự kiểm tra

  • Bạn có thể giải thích lại nội dung chính trong 2 phút không?
  • Bạn có ví dụ áp dụng thực tế chưa?
  • Bạn biết bước tiếp theo cần học/triển khai là gì không?

Kết luận

Hoàn thành bài này giúp bạn có góc nhìn đầy đủ hơn trước khi đi tiếp trong module.

Điều hướng