🔧 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
| Schedule | Daily 10:00 AM SGT |
| Size | ~7MB / file |
| Retention | 30 ngày tự xóa |
| Lưu tại | Google Cloud Storage |
💿 Disk Snapshot
✅ Active
| Schedule | Daily 11:00 AM SGT |
| Size | ~30GB (incremental) |
| Retention | 7 bản gần nhất |
| Lưu tại | GCP Compute Snapshots |
🔄 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:
Tên file:
Chủ nhật: Copy thêm vào
gs://newskyexpress-odoo-backups/daily/Tên file:
odoo-backup-YYYY-MM-DD_HHMM.sql.gzChủ 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ì.
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
| Tool | URL | Xem 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 |
| Login | admin |
| Master PW | SdPtBMFmUWAXeeey7Udz |
Portainer
| URL | :30777 |
| Login | admin |
| Pass | 36SB4dmdz!36SB4dmdz! |
Database (PostgreSQL)
| Host | postgres (K8s internal) |
| DB Name | tns |
| User | odoo |
| Password | odoo17secure2024 |
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