# 🚀 Cheatsheet: Ra mắt an toàn cho app vibe-code: staging, smoke test và rollback

By Better Wise

> This cheatsheet is premium content. Sign in and purchase the course to view the full content.

{colspan:2|badge:beginner|green}

Nguyên tắc xuyên suốt: trước khi bấm deploy, luôn trả lời được câu hỏi **"nếu bước này hỏng thì rollback thế nào?"**. Không trả lời được thì chưa deploy.

---

## Module 1: Môi trường và cấu hình an toàn

### 1.1 Tách môi trường dev, staging, production

| Môi trường | Mục đích | Dữ liệu | Ai được deploy | Ai được xem log |
| --- | --- | --- | --- | --- |
| `dev` | Viết code, thử nhanh, được phép hỏng | Dữ liệu giả (seed) | Mọi dev | Cả team |
| `staging` | Giống production để test trước khi lên thật | Dữ liệu giả hoặc ẩn danh | Dev / CI | Cả team |
| `production` | Người dùng thật | Dữ liệu thật, nhạy cảm | Chỉ qua quy trình release | Chỉ người có quyền |

Quy tắc cứng:

- Staging phải **giống production về cấu hình** (cùng phiên bản runtime, cùng loại DB engine), chỉ khác quy mô và secrets.
- Không bao giờ trỏ staging vào DB production. Một lệnh `DELETE` ở staging có thể xoá dữ liệu thật.
- Mỗi môi trường có **biến môi trường riêng**, không dùng chung file `.env`.
- Tên miền riêng cho từng môi trường: `app.example.com`, `staging.example.com`, `dev.example.com`.

Cấu trúc file env gợi ý:

```tree
project/
  .env.example      # mẫu, commit vào Git, KHÔNG có giá trị thật
  .env.local        # dev, KHÔNG commit
  .env.staging      # chỉ trên CI/hosting, KHÔNG commit
  .env.production   # chỉ trên hosting, KHÔNG commit
  .gitignore        # phải có dòng .env*
```

Kiểm tra nhanh `.gitignore`:

```bash
git check-ignore -v .env.local
```

Nếu lệnh trên không in ra gì, file đang bị track. Sửa ngay.

### 1.2 Quản lý biến môi trường và secrets

Phân loại rõ:

| Loại | Ví dụ | Được commit? | Được log ra? |
| --- | --- | --- | --- |
| Cấu hình công khai | `NEXT_PUBLIC_API_URL`, `PORT` | Có (qua `.env.example`) | Được |
| Cấu hình nội bộ | `LOG_LEVEL`, `FEATURE_X` | Không | Được |
| Secret | `DATABASE_URL`, `STRIPE_SECRET_KEY`, API key | **Không bao giờ** | **Không bao giờ** |

Quy tắc secrets:
