Skip to content

Quy Trình Khôi Phục Thảm Họa

Dự ÁnPTX-CM
Cập Nhật2026-02-17

Tham Khảo Nhanh

Kịch BảnThời Gian Khôi PhụcQuy Trình
API crash~1 phútTự động (Docker restart + replica)
Khởi động lại máy chủ~2-3 phútTự động (Docker restart policy)
Migration lỗi~15 phútKhôi phục từ backup
Hỏng ổ đĩa~30-60 phútXây dựng lại máy chủ
Hỏng dữ liệu~15 phútKhô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.sh chạ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 -5

Nế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.gz

Script sẽ:

  1. Dừng container API (ngăn ghi)
  2. Xóa và tạo lại database
  3. Khôi phục từ file backup
  4. 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 ps

Xâ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-plugin

Bước 2: Clone repository

bash
git clone <your-repo-url> /opt/ptx-cm
cd /opt/ptx-cm

Bướ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 .env

Bướ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.gz

Bước 5: Khởi động tất cả dịch vụ

bash
docker compose up -d

Bướ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>&1

Secret Cần Khôi Phục

SecretTìm Ở Đâu
File .envVault bảo mật (1Password/Bitwarden)
JWT_SECRETTrong .env
JWT_REFRESH_SECRETTrong .env
ENCRYPTION_KEYTrong .envquan trọng, giải mã credential OTA
REDIS_PASSWORDTrong .env
SMTP credentialsTrong .env
Better Stack heartbeat URLDashboard Better Stack
Git repo credentialsNề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)
  • [ ] /health trả về 200
  • [ ] /health/ready trả 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

PTX Channel Manager — Tài Liệu Nội Bộ