Thực hành tốt
Sao lưu và nâng cấp KDIGI CMS: quy trình không mất dữ liệu
Sao lưu cả database lẫn media, đọc CHANGELOG, migrate rồi kiểm tra. Rollback chủ yếu là khôi phục bản sao lưu.
Cập nhật lần cuối:

Sao lưu nghĩa là lưu cả PostgreSQL và thư mục media cùng thời điểm. Nâng cấp nghĩa là đọc CHANGELOG, sao lưu, cập nhật mã, chạy migration rồi kiểm tra.
Tóm tắt nhanh
- Cần hai thứ: database và media.
- Schema chỉ đổi bằng migration;
pushbị tắt.- Container tự
payload migratekhi khởi động.GET /api/healthkhông chứng minh schema đã cập nhật.
Cần sao lưu gì
| Thành phần | Cách sao lưu |
|---|---|
| PostgreSQL (nội dung, người dùng, cấu hình) | pg_dump --format=custom |
Media cục bộ <MEDIA_DIR>/<siteId>/ |
Nén thư mục hoặc volume media_data |
| Media R2 | Versioning hoặc nhân bản bucket (CMS không làm) |
PAYLOAD_SECRET, .env |
Lưu ngoài server |
Cảnh báo
docker compose down -vxóa volume. Redeploy trên Coolify không đụng tới volume có tên.
Sao lưu và khôi phục database
docker compose exec -T db pg_dump -U kdigi --format=custom kdigi > kdigi-$(date +%F).dump
# khôi phục vào database trống
docker compose exec -T db pg_restore -U kdigi -d kdigi --clean --if-exists < kdigi-2026-01-01.dump
Với PostgreSQL do nhà cung cấp quản lý, dùng snapshot của họ. Trên Coolify, chạy pg_dump bằng Scheduled Task hoặc cron rồi đẩy file ra ngoài server.
Sao lưu media
docker compose exec -T app tar czf - -C /app/media . > media-$(date +%F).tgz
Mẹo Chạy dump database và nén media sát nhau để mỗi dòng
mediađều có file. Xem thư viện media.

Lịch sao lưu gợi ý
| Tần suất | Việc | Giữ |
|---|---|---|
| Hằng đêm | pg_dump + nén media |
14 ngày |
| Trước mỗi nâng cấp | Dump thủ công, đặt tên theo phiên bản | Đến khi ổn định |
| Hằng tháng | Khôi phục thử trên máy tạm | — |
Lịch sử phiên bản và thùng rác không thay thế sao lưu.
Quy trình nâng cấp
- Đọc CHANGELOG Tìm mục “Breaking”, biến môi trường mới, thay đổi REST. Xem phát hành.
- Sao lưu Database và media; rollback schema chính là khôi phục bản sao lưu.
- Lấy mã mới
git pull && docker compose up -d --build; entrypoint chạy migrate trước khi start. - Cập nhật biến môi trường Nếu CHANGELOG thêm biến mới.
- Kiểm tra Đăng nhập
/admin, mở tài liệu, tải một ảnh, gọi một URL công khai.
Chạy migration thủ công: pnpm migrate, hoặc docker compose exec app node_modules/.bin/payload migrate. Muốn tách bước release, đặt SKIP_MIGRATIONS=true cho app.
Rollback
Ưu điểm
- Migration thường chỉ thêm bảng, cột, enum nên image cũ thường chạy lại được
- Có bản dump trước nâng cấp để khôi phục
Hạn chế
- Image cũ không đọc được schema mới thì phải restore dump, mất nội dung ghi sau đó
- Không chạy
pnpm migrate:downtrên production: nó đảo cả batch gần nhất
Phiên bản theo SemVer; bản vá bảo mật chỉ phát hành cho nhánh 1.x mới nhất.
Thay đổi môi trường dễ gây lỗi
- Đổi khóa bí mật
PAYLOAD_SECRET: đăng xuất mọi người, vô hiệu API key; nội dung không ảnh hưởng. - Đổi URL máy chủ
PAYLOAD_PUBLIC_SERVER_URL: đổi origin admin và tiền tố URL media cục bộ. - Local → R2 Không có lệnh sẵn; sao chép file rồi sửa
urlcủa media và URL trong Markdown.
Checklist
- Có dump DB và bản nén media gần nhất, đã đẩy ra ngoài server
- Đã thử khôi phục trong 30 ngày qua
PAYLOAD_SECRETđược lưu riêng- Đã đọc CHANGELOG; có cửa sổ bảo trì cho bản “Breaking”
- Sau nâng cấp: đăng nhập, mở tài liệu, tải ảnh, kiểm tra URL công khai
Triển khai ban đầu: tự host. Bảo mật liên quan: bảo mật và phân quyền.
Câu hỏi thường gặp
Cần sao lưu những gì để khôi phục toàn bộ site?
Nâng cấp có tự cập nhật schema không?
Nếu nâng cấp lỗi thì quay lại thế nào?
Đọc tiếp
Tự host
Cài KDIGI CMS trên VPS của bạn bằng Docker Compose hoặc Coolify: yêu cầu hệ thống, biến môi trường, sao lưu, nâng cấp và các bước tăng cường bảo mật.
Bảo mật và phân quyền
Hướng dẫn bảo mật: phân quyền tối thiểu theo vai trò và site, PAYLOAD_SECRET, HTTPS, giới hạn truy cập quản trị, sao lưu và bảo vệ SSRF cho nhập ảnh từ URL.
Thư viện media
Quản lý ảnh theo thư mục, sửa ảnh trực tiếp, nhập ảnh từ URL có chống SSRF, lưu trên ổ đĩa hoặc Cloudflare R2, xuất WebP để trang tải nhanh hơn.
Mã nguồn mở
KDIGI CMS phát hành theo giấy phép MIT trên GitHub. Xem kho mã, hướng dẫn đóng góp, chính sách bảo mật và lộ trình chỉ gồm những gì đã có thật.