🔧 Operations Runbook

Hướng dẫn vận hành: Backup, Restore, Monitor — trực quan từng bước

📊 Tổng Quan Backup

💾 Database Backup ✅ Active
ScheduleDaily 10:00 AM SGT
Size~7MB / file
Retention30 ngày tự xóa
Lưu tạiGoogle Cloud Storage
💿 Disk Snapshot ✅ Active
ScheduleDaily 11:00 AM SGT
Size~30GB (incremental)
Retention7 bản gần nhất
Lưu tạiGCP Compute Snapshots
📁 Xem backup files trên GCS 💿 Xem disk snapshots 📊 Portainer Dashboard

🔄 Backup Hoạt Động Như Nào?

⏰ Cron 10AM SGT 📤 pg_dump database "tns" 🗜️ Nén .gz (~7MB) ☁️ Upload GCS 🗑️ Xóa temp
ℹ️ Nơi lưu: gs://newskyexpress-odoo-backups/daily/
Tên file: odoo-backup-YYYY-MM-DD_HHMM.sql.gz
Chủ nhật: Copy thêm vào weekly/

🔁 Restore — Chọn Tình Huống

Click vào tình huống phù hợp để xem hướng dẫn từng bước

😰 Xóa nhầm data / cần rollback báo cáo

Dùng: Database Backup (pg_dump) — Thời gian: ~5 phút

1
Mở GCS Console — chọn file backup

Vào GCS Console → daily/ → chọn file ngày muốn restore → click Download

2
SSH vào server
gcloud compute ssh odoo-k8s --project=newskyexpress --zone=asia-southeast1-b
3
Download backup file từ GCS
# Xem danh sách backup
sudo gsutil ls -l gs://newskyexpress-odoo-backups/daily/

# Download bản muốn restore
sudo gsutil cp gs://newskyexpress-odoo-backups/daily/odoo-backup-2026-03-29_0231.sql.gz /tmp/
4
Chạy restore
# Dừng Odoo trước
sudo kubectl scale deploy odoo -n odoo --replicas=0

# Drop DB cũ + tạo mới
sudo kubectl exec -n odoo deploy/postgres -- bash -c \
  'PGPASSWORD=odoo17secure2024 dropdb -h localhost -U odoo tns'
sudo kubectl exec -n odoo deploy/postgres -- bash -c \
  'PGPASSWORD=odoo17secure2024 createdb -h localhost -U odoo tns'

# Restore data
gunzip -c /tmp/odoo-backup-*.sql.gz | \
  sudo kubectl exec -i -n odoo deploy/postgres -- \
  bash -c 'PGPASSWORD=odoo17secure2024 psql -h localhost -U odoo -d tns'

# Khởi động lại Odoo
sudo kubectl scale deploy odoo -n odoo --replicas=1
5
Verify — mở Odoo kiểm tra

Truy cập http://35.240.147.252:30069 → kiểm tra data đã rollback đúng

⚠️ Lưu ý: Restore sẽ thay thế toàn bộ data hiện tại bằng data từ backup. Data mới hơn thời điểm backup sẽ mất.
💀 Server chết / disk corrupt / không SSH được

Dùng: Disk Snapshot — Thời gian: ~10 phút

1
Mở GCP Console → Snapshots

Vào GCP Snapshots → chọn snapshot gần nhất (status = READY)

2
Tạo disk mới từ snapshot
gcloud compute disks create odoo-k8s-restored \
  --source-snapshot=SNAPSHOT_NAME \
  --zone=asia-southeast1-b \
  --project=newskyexpress
3
Tạo VM mới từ disk
gcloud compute instances create odoo-k8s-new \
  --disk=name=odoo-k8s-restored,boot=yes \
  --machine-type=e2-medium \
  --zone=asia-southeast1-b \
  --project=newskyexpress \
  --tags=allow-odoo,allow-portainer,allow-ssh
4
Gán Static IP cho VM mới

Vào GCP Console → VPC Network → External IP → chuyển IP 35.240.147.252 sang VM mới

5
Verify — Odoo tự chạy lại

k3s + Odoo sẽ tự start khi VM boot. Truy cập http://35.240.147.252:30069

💡 Disk Snapshot = ảnh chụp TOÀN BỘ máy
Bao gồm: OS, k3s, Odoo, PostgreSQL, addons, config — tất cả intact. Không cần cài lại gì.
🔧 Module update hỏng / Odoo không start được

Dùng: Rollback code + DB restore — Thời gian: ~5 phút

1
SSH vào server
gcloud compute ssh odoo-k8s --project=newskyexpress --zone=asia-southeast1-b
2
Rollback code về commit trước
cd /opt/odoo-addons
sudo git log --oneline -5   # xem commit history
sudo git checkout HEAD~1    # rollback 1 commit
3
Copy addons + restart
# Copy addons vào PVC
ODOO_PVC=$(sudo ls /var/lib/rancher/k3s/storage/ | grep odoo-data)
sudo cp -r /opt/odoo-addons/addons/* /var/lib/rancher/k3s/storage/$ODOO_PVC/addons/
sudo chown -R 101:101 /var/lib/rancher/k3s/storage/$ODOO_PVC/addons/

# Update module + restart
sudo kubectl exec -n odoo deploy/odoo -- odoo -u all -d tns --stop-after-init --no-http
sudo kubectl rollout restart deployment/odoo -n odoo
💡 Nếu vẫn lỗi: Kết hợp rollback code (step 2) + restore DB (Scenario 1) để quay về trạng thái hoàn toàn trước đó.

📡 Monitoring Links

ToolURLXem gì
Portainer :30777 Container status, logs, restart, resource usage
GCS Backups GCS Console Backup files, sizes, dates, download
GCP Snapshots Snapshots Disk snapshots, create VM from snapshot
GCP Monitoring Monitoring CPU, memory, disk, network charts
Odoo :30069 Odoo application

🔐 Quick Access

⚠️ MẬT — Chỉ chia sẻ nội bộ team

Odoo Admin

URL:30069
Loginadmin
Master PWSdPtBMFmUWAXeeey7Udz

Portainer

URL:30777
Loginadmin
Pass36SB4dmdz!36SB4dmdz!

Database (PostgreSQL)

Hostpostgres (K8s internal)
DB Nametns
Userodoo
Passwordodoo17secure2024

SSH Access

gcloud compute ssh odoo-k8s --project=newskyexpress --zone=asia-southeast1-b

⚡ Chạy Backup Thủ Công

Khi cần backup ngay (trước khi update module, trước khi thay đổi lớn):

# SSH vào server
gcloud compute ssh odoo-k8s --project=newskyexpress --zone=asia-southeast1-b

# Chạy backup ngay
sudo /opt/scripts/backup_db.sh

# Xem kết quả
sudo gsutil ls -l gs://newskyexpress-odoo-backups/daily/ | tail -3