Maintenance — บำรุงรักษาระบบ
สิ่งที่ต้องทำหลัง deploy ไปแล้ว — backup, update, monitor
Backup ฐานข้อมูล
Manual
# บน server
docker compose exec postgres \
pg_dump -U ecommerce ecommerce > backup-$(date +%F-%H%M).sql
# ดาวน์โหลดมา local
scp root@<server>:/opt/ecommerce/backup-*.sql ./backups/
Auto — Daily cron
/etc/cron.d/ecommerce-backup:
0 3 * * * root cd /opt/ecommerce && \
docker compose exec -T postgres \
pg_dump -U ecommerce ecommerce | gzip > \
/backups/db-$(date +\%F).sql.gz && \
find /backups -name "db-*.sql.gz" -mtime +30 -delete
(backup ทุก 03:00, เก็บ 30 วัน, gzip)
Auto — Upload to S3
# install awscli
apt install awscli
# cron job
0 3 * * * root cd /opt/ecommerce && \
docker compose exec -T postgres pg_dump -U ecommerce ecommerce | \
gzip | aws s3 cp - s3://yourbucket/db-$(date +\%F).sql.gz
Restore
# จาก local file
cat backup-2026-01-15.sql | \
docker compose exec -T postgres psql -U ecommerce ecommerce
# จาก S3
aws s3 cp s3://yourbucket/db-2026-01-15.sql.gz - | gunzip | \
docker compose exec -T postgres psql -U ecommerce ecommerce
Backup รูป (uploads)
# Manual
tar -czf uploads-$(date +%F).tar.gz ecommerce-api/uploads/
# Auto cron
0 3 * * * root tar -czf /backups/uploads-$(date +\%F).tar.gz \
/opt/ecommerce/ecommerce-api/uploads/
ถ้าใช้ S3 อยู่แล้ว → enable S3 versioning ดูแลให้
Monitoring
Uptime
UptimeRobot (ฟรี — 50 monitors):
- ตั้ง check ทุก 5 นาที:
https://yourshop.comhttps://api.yourshop.com/api/v1/health
- Alert ทาง Email / LINE / SMS
Error tracking
Sentry (ฟรี tier — 5k errors/เดือน):
ecommerce-api/src/main.ts:
import * as Sentry from '@sentry/node'
Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.NODE_ENV,
})
ecommerce-web/nuxt.config.ts:
import { sentryVitePlugin } from '@sentry/vite-plugin'
// (config ใน docs ของ Sentry)
Performance monitoring
- Vercel Analytics (ถ้าใช้ Vercel)
- New Relic / Datadog (paid, advanced)
- Self-hosted: Grafana + Prometheus
Database
ดูสุขภาพ DB:
docker compose exec postgres psql -U ecommerce -c "
SELECT count(*) AS connections,
(SELECT count(*) FROM pg_stat_activity WHERE state='active') AS active
FROM pg_stat_activity;
"
ตั้ง alert ถ้า:
- connections > 80% ของ max
- disk usage > 80%
- slow queries เพิ่มขึ้น
Update Source Code
ดึง update จากผู้ขายระบบ
ถ้าผู้ขายส่ง patch มา:
# Backup ก่อนเสมอ!
docker compose exec postgres pg_dump ... > backup-before-update.sql
# Pull update
cd /opt/ecommerce
git fetch origin
git checkout v1.2.0 # เวอร์ชันใหม่
# Rebuild
docker compose build --no-cache
docker compose up -d
# Migration (ถ้ามี)
docker compose exec api npx prisma migrate deploy
# Health check
curl https://api.yourshop.com/api/v1/health
ถ้าพังหลัง update — rollback:
git checkout v1.1.0
docker compose build --no-cache
docker compose up -d
Update dependency
ทุก 1-3 เดือน ตรวจ vulnerability:
cd ecommerce-api
npm audit
npm audit fix # auto fix non-breaking
cd ../ecommerce-web
npm audit
npm audit fix
ถ้ามี major version update (เช่น Nuxt 4 → 5) — รอ patch จากผู้ขาย หรือทดสอบใน staging ก่อน
Maintenance Mode
ปิดเว็บชั่วคราว (ตอน maintenance):
infra/nginx/maintenance.conf:
location / {
return 503;
}
error_page 503 /maintenance.html;
location = /maintenance.html {
root /usr/share/nginx/html;
}
เปิด maintenance:
sudo ln -sf /etc/nginx/sites-available/maintenance.conf \
/etc/nginx/sites-enabled/yourshop.conf
sudo nginx -s reload
ปิด maintenance:
sudo ln -sf /etc/nginx/sites-available/yourshop.conf \
/etc/nginx/sites-enabled/yourshop.conf
sudo nginx -s reload
งานประจำ (Routine Tasks)
รายวัน
- [ ] เช็คออเดอร์รอตรวจสลิป (5 นาที)
- [ ] ตอบ inbox ลูกค้า
- [ ] ตรวจ error log ของ api
รายสัปดาห์
- [ ] ดู dashboard ยอดขาย
- [ ] ตรวจสต๊อกใกล้หมด
- [ ] ดู review ที่ลูกค้าส่ง
- [ ] เช็ค uptime + alert
รายเดือน
- [ ] Export ออเดอร์ทั้งเดือน → ส่งบัญชี
- [ ] รีวิว top sellers + slow sellers
- [ ] อัปเดต coupon
- [ ] ตรวจ backup ใช้ได้จริง (ลอง restore ใน staging)
- [ ]
npm auditทั้ง 3 projects
รายไตรมาส
- [ ] เปลี่ยน password admin
- [ ] เปลี่ยน JWT secret (rotate)
- [ ] รีวิว performance + scale plan
- [ ] อัปเดต OS + dependencies
รายปี
- [ ] ต่อ HTTPS certificate (auto แต่เช็คให้ชัวร์)
- [ ] ต่อโดเมน
- [ ] ต่อ Apple Developer ($99/ปี)
- [ ] รีวิว pricing / cost ของ hosting
Disaster Recovery
ถ้าระบบล่มทั้งหมด:
Server พัง — ของยังอยู่ใน S3
- เช่า VPS ใหม่
- ติดตั้ง docker
- clone source
- restore database จาก S3 backup
- restore uploads จาก S3
- start docker-compose
- ปลี่ยน DNS ชี้ IP ใหม่
- รอ propagate ~5-30 นาที
⏱ RTO (Recovery Time Objective): ~2 ชั่วโมง
⏱ RPO (Recovery Point Objective): ~24 ชั่วโมง (ถ้า backup daily)
ถ้าต้องการ RPO ต่ำกว่า → ตั้ง streaming replication (advanced)
ขั้นต่อไป
- FAQ ครบทุกหัวข้อ → 10 — FAQ
