Chiến lược multi-env

Anh ơi, em chỉ merge staging thôi mà sao prod bị downtime? Chắc tại mạng!

Deploy staging nhưng production “hắt hơi”, vì cả hai dùng chung DB, cache, hoặc secret. Audit pipeline mà thấy môi trường không tách biệt, tôi chỉ muốn hỏi: “Sao không ai nghĩ đến isolation vậy trời?

Khi deploy staging nhưng production chết

Thực trạng: Môi trường không tách biệt

Thực trạng:  
  • Shared resource: Dev, staging, prod dùng chung DB, Redis, hoặc file .env.  
  • GitFlow lỏng lẻo: Branch không map rõ với môi trường (dev → staging → prod).  
  • Secret chung: API key, DB password dùng chung, thay đổi ở staging ảnh hưởng prod.
Hệ quả:  
  • Production downtime: Deploy staging làm hỏng dữ liệu prod.  
  • Debug khó: Lỗi không rõ từ môi trường nào.  
  • Rủi ro bảo mật: Secret lộ ở dev dễ bị lạm dụng ở prod.

Giải pháp: Tách biệt môi trường

Để môi trường “sống riêng”:  
  • Tách resource: Mỗi môi trường (dev, staging, prod) có DB, cache, secret riêng.  
  • Map branch rõ ràng: dev → dev, staging → staging, main → prod.  
  • Quản lý secret: Dùng AWS Secrets Manager, HashiCorp Vault, tách key per môi trường.

Ví dụ: Pipeline tách môi trường trong GitHub Actions:

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}
    steps:
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          role-arn: arn:aws:iam::123456789012:role/${{ github.ref == 'refs/heads/main' && 'prod-role' || 'staging-role' }}

🎯 Tóm lại: Thiếu tách biệt môi trường là “cú đấm” vào production. Tách resource, map branch rõ, và quản lý secret để deploy an toàn.

Post a Comment

Mới hơn Cũ hơn