Quy Trình Khôi Phục Thảm Họa
| Dự Án | PTX-CM |
| Cập Nhật | 2026-02-17 |
Tham Khảo Nhanh
| Kịch Bản | Thời Gian Khôi Phục | Quy Trình |
|---|---|---|
| API crash | ~1 phút | Tự động (Docker restart + replica) |
| Khởi động lại máy chủ | ~2-3 phút | Tự động (Docker restart policy) |
| Migration lỗi | ~15 phút | Khôi phục từ backup |
| Hỏng ổ đĩa | ~30-60 phút | Xây dựng lại máy chủ |
| Hỏng dữ liệu | ~15 phút | Khôi phục từ backup |
Điều Kiện Tiên Quyết
Trước khi sự cố xảy ra, đảm bảo:
- [ ]
scripts/backup.shchạy hàng ngày qua cron - [ ] Backup được sao chép offsite (S3/GDrive/rclone)
- [ ] Better Stack heartbeat xác nhận backup đang chạy
- [ ] File
.envđược lưu trong vault bảo mật (1Password, Bitwarden, v.v.) - [ ] Tài liệu này có thể truy cập ngoài máy chủ (bản in/cloud)
Khôi Phục Từ Backup
Sử dụng khi: migration lỗi, xóa dữ liệu nhầm, hỏng dữ liệu.
Bước 1: Tìm backup mới nhất
bash
ls -lht backups/*.sql.gz | head -5Nếu backup cục bộ bị mất, tải từ offsite:
bash
# rclone copy remote:ptx-cm-backups ./backups --max-age 7d
# aws s3 sync s3://ptx-cm-backups/ ./backups/Bước 2: Khôi phục
bash
./scripts/restore.sh backups/ptx_cm_YYYYMMDD_HHMMSS.sql.gzScript sẽ:
- Dừng container API (ngăn ghi)
- Xóa và tạo lại database
- Khôi phục từ file backup
- Khởi động lại container API
Bước 3: Xác minh
bash
# Kiểm tra sức khỏe API
curl http://localhost/health
# Kiểm tra sẵn sàng (DB + Redis)
curl http://localhost/health/ready
# Kiểm tra container
docker compose psXây Dựng Lại Máy Chủ
Sử dụng khi: hỏng phần cứng máy chủ, cần di chuyển sang máy chủ mới.
Bước 1: Chuẩn bị máy chủ mới
- Ubuntu 22.04+ LTS (hoặc Linux ưa thích)
- Docker Engine + Docker Compose v2
- Git
- Tối thiểu: 2 CPU, 4 GB RAM, 40 GB SSD
- Mở port: 80 (HTTP), 443 (HTTPS)
- SSH access đã cấu hình
bash
# Cài đặt Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Cài đặt Docker Compose plugin
sudo apt install docker-compose-pluginBước 2: Clone repository
bash
git clone <your-repo-url> /opt/ptx-cm
cd /opt/ptx-cmBước 3: Khôi phục secret
Lấy .env từ vault bảo mật và đặt vào thư mục gốc dự án:
bash
# Secret cần thiết:
# DATABASE_URL, JWT_SECRET, JWT_REFRESH_SECRET,
# ENCRYPTION_KEY, REDIS_PASSWORD, SMTP credentials
cp /path/to/vault/.env .envBước 4: Khôi phục backup database
bash
# Khởi động chỉ postgres trước
docker compose up -d postgres
# Chờ sẵn sàng
docker compose exec postgres pg_isready -U ptx_cm
# Tải backup mới nhất từ offsite
# rclone copy remote:ptx-cm-backups ./backups --max-age 1d
# Khôi phục
./scripts/restore.sh backups/ptx_cm_LATEST.sql.gzBước 5: Khởi động tất cả dịch vụ
bash
docker compose up -dBước 6: Xác minh
bash
# Tất cả container đang chạy?
docker compose ps
# API khỏe mạnh?
curl http://localhost/health
# DB + Redis kết nối?
curl http://localhost/health/ready
# Web truy cập được?
curl -I http://localhost/Bước 7: DNS / Proxy
Cập nhật DNS hoặc load balancer trỏ đến IP máy chủ mới.
Bước 8: Khôi phục cron
bash
# Thêm cron backup
crontab -e
# 0 2 * * * /opt/ptx-cm/scripts/backup.sh >> /var/log/ptx-cm-backup.log 2>&1Secret Cần Khôi Phục
| Secret | Tìm Ở Đâu |
|---|---|
File .env | Vault bảo mật (1Password/Bitwarden) |
JWT_SECRET | Trong .env |
JWT_REFRESH_SECRET | Trong .env |
ENCRYPTION_KEY | Trong .env — quan trọng, giải mã credential OTA |
REDIS_PASSWORD | Trong .env |
| SMTP credentials | Trong .env |
| Better Stack heartbeat URL | Dashboard Better Stack |
| Git repo credentials | Nền tảng Git hosting |
⚠️ QUAN TRỌNG: Nếu mất
ENCRYPTION_KEY, tất cả credential OTA đã mã hóa không thể khôi phục. Đảm bảo đã backup trong vault.
Checklist Sau Khôi Phục
- [ ] Tất cả container khỏe mạnh (
docker compose ps) - [ ]
/healthtrả về 200 - [ ]
/health/readytrả về 200 (DB + Redis OK) - [ ] Đăng nhập hoạt động trên trình duyệt
- [ ] Dashboard hiển thị dữ liệu
- [ ] Đồng bộ booking đang chạy (kiểm tra trang sync jobs)
- [ ] Better Stack monitors xanh
- [ ] Cron backup đã lập lịch
- [ ] Better Stack heartbeat đang nhận ping