Công cụ giúp giải nén WPress Extractor (định dạng của plugin All-in-One WP Migration)

Lê Trung Hải 8 phút đọc

Công cụ web giải nén, kiểm tra và khôi phục nhanh backup .wpress (định dạng của plugin All-in-One WP Migration) — không cần cài lại plugin vào một site WordPress trung gian.

Repo: MBC-TS-H-wpress-extractor  |  Stack: Node.js / Express 5  |  Nội bộ Mắt Bão, Team TS

1. Giới thiệu & mục đích

Giao diện WPress Extractor
Giao diện WPress Extractor — công cụ giải nén & khôi phục backup .wpress

Vấn đề: Khi khách hàng gửi 1 file backup .wpress, trước đây support không có cách nào lấy lại nhanh 1–2 file cụ thể hoặc khôi phục cả site mà không phải cài All-in-One WP Migration vào một WordPress trung gian rồi restore thủ công — tốn thời gian, dễ sai sót (quên đổi prefix bảng, sửa domain sai làm hỏng dữ liệu PHP-serialize, quên khôi phục plugin/theme đang active…).

Giải pháp: Một web tool duy nhất — upload .wpress, tool tự động giải nén, đổi prefix bảng, (tuỳ chọn) tải kèm WordPress core, import thẳng database vào MySQL/MariaDB đích, đổi domain an toàn ngay trên DB thật, và giao kết quả qua FTP hoặc file .zip.

Đối tượng dùng: Quản trị viên website, agency, đội hỗ trợ kỹ thuật WordPress — bất kỳ ai cần xử lý backup .wpress. Hỗ trợ đăng nhập đa người dùng, phù hợp dùng theo team.

Toàn bộ giao diện bằng tiếng Việt — phù hợp thói quen và bối cảnh sử dụng của đội hỗ trợ Mắt Bão.

2. Các chức năng chính

Luôn thực hiện (mọi lượt xử lý)

  • Upload chunk: Kéo-thả file .wpress qua trình duyệt, chịu được file lớn (trăm MB – vài GB) mà không bị reverse proxy cắt kết nối.
  • Giải nén đúng định dạng: Đọc từng header nhị phân 4377 byte theo đúng chuẩn .wpress.
  • Tự đổi prefix bảng: Đổi placeholder SERVMASK_PREFIX_ thành prefix bảng thật trong database.sql.
  • Ghi .htaccess mặc định: Sau khi giải nén, site có sẵn .htaccess chuẩn.
  • Đăng nhập đa người dùng: Mỗi thành viên team 1 tài khoản riêng, thống kê job tách theo người dùng.
  • Theo dõi tiến trình real-time: Checklist từng bước, % hoàn thành, tốc độ/ETA khi đang giao kết quả.
  • Tự dọn dữ liệu khách hàng: Xoá toàn bộ file khách ngay sau khi giao kết quả xong — không lưu trữ dữ liệu khách hàng.

Tuỳ chọn (bật/tắt qua form khi upload)

  • Tải kèm WordPress core: Ghép WP core mới nhất vào kết quả mà không đụng wp-content (mặc định bật).
  • Import database trực tiếp: Import database.sql vào MySQL/MariaDB đích qua mysql CLI (điền Host/Name/User/Password).
  • Tự sinh wp-config.php: Khi có import DB: sinh DB creds + prefix + salt ngẫu nhiên, khôi phục lại active_plugins/theme đang active.
  • Đổi domain an toàn: Đổi domain trực tiếp trên DB thật, tôn trọng định dạng PHP-serialize — không hỏng dữ liệu, kể cả chuỗi tiếng Việt.
  • Giao kết quả linh hoạt: Upload thẳng lên FTP đích, hoặc nén .zip để tải xuống (mặc định nếu không điền FTP).

Quản trị & bảo mật

  • Quản lý tài khoản qua CLI (bin/manage-users.js): thêm/xoá user, đổi mật khẩu, gán email, cấp/thu quyền admin — không có trang tự đăng ký.
  • Trang “Quên mật khẩu” gửi link đặt lại qua email SMTP, token dùng 1 lần, hết hạn 30 phút, giới hạn 3 lần/tài khoản/giờ.
  • Admin panel: tạo/quản lý user, gửi email test SMTP.
  • Chặn SSRF: mọi FTP host và DB host đều bị resolve + kiểm tra chặn IP nội bộ trước khi kết nối.
  • Escape kỹ khi sinh wp-config.php để chống PHP injection; giới hạn tốc độ request cho login và thao tác admin.

3. Hướng dẫn sử dụng

  1. Đăng nhập: Vào trang /login bằng tài khoản được cấp (admin tạo qua CLI hoặc admin panel). Quên mật khẩu → dùng link “Quên mật khẩu” gửi qua email SMTP.
  2. Kéo-thả file .wpress: Ở trang chính “Giải nén file .wpress”, kéo-thả (hoặc chọn) file backup cần xử lý. File lớn được upload theo chunk, không lo mất kết nối giữa chừng.
  3. Điền các tuỳ chọn cần dùng (không bắt buộc): Table prefix cho database.sql, Host/Port/Username/Password FTP, Thư mục đích trên server, DB Host/Port/Name/User/Password, DB_HOST ghi trong wp-config.php, Tên miền mới. Chỉ điền phần nào cần — bỏ trống nghĩa là không dùng tính năng đó (ví dụ không điền FTP → tool trả về file .zip để tải).
  4. Theo dõi “Nhật ký xử lý”: Job chạy nền, sidebar hiển thị checklist từng bước, % hoàn thành, tốc độ/ETA (đặc biệt khi đang tải WP core hoặc upload FTP).
  5. Nhận kết quả: Tải file .zip xuống, hoặc kiểm tra thư mục đích trên FTP đã điền. Sau khi giao xong, toàn bộ dữ liệu khách hàng trên server bị xoá — không cần dọn tay.

Dùng như CLI (không cần chạy web server)

npm link          # cài lệnh wpress-extract global
wpress-extract backup.wpress                  # giải nén vào ./<tên-archive>/
wpress-extract backup.wpress ./restored-site  # giải nén vào thư mục chỉ định
wpress-extract backup.wpress --list           # chỉ liệt kê nội dung

Quản lý tài khoản (admin)

node bin/manage-users.js add <username> '<password>' <email> [--admin]
node bin/manage-users.js passwd <username> '<mật-khẩu-mới>'
node bin/manage-users.js admin <username> <true|false>
node bin/manage-users.js list

4. Mô tả kỹ thuật

Ngôn ngữ JavaScript (Node.js ≥ 18, khuyến nghị 22)
Backend Express 5
Frontend HTML tĩnh + vanilla JS (không dùng framework FE)
Database Không cần DB riêng cho bản thân app (user lưu trong data/users.json); kết nối MySQL/MariaDB đích khi import database.sql từ backup
Dịch vụ phụ thuộc FTP đích (deploy kết quả), SMTP (Gmail App Password — email quên mật khẩu)
Thư viện chính archiver, basic-ftp, mysql2 + php-serialize, extract-zip, express-rate-limit, nodemailer
Đóng gói Docker (node:22-alpine) + docker-compose, deploy qua Coolify/Traefik
Xác thực Đăng nhập multi-user, session cookie tự ký (HMAC); tài khoản đầu tiên tạo qua biến môi trường ADMIN_*; không có trang tự đăng ký

5. Hình ảnh minh hoạ & Video

Các bước dưới đây minh hoạ trực quan luồng sử dụng thực tế — từ đăng nhập, chọn file cần xử lý, theo dõi tiến trình, đến khi nhận kết quả.

Màn hình đăng nhập WPress Extractor
Màn hình đăng nhập — trang /login

Trang chính, kéo-thả file .wpress và các tuỳ chọn
Trang chính “Giải nén file .wpress” — vùng kéo-thả, các tuỳ chọn, sidebar Nhật ký xử lý + Thống kê

Modal tiến trình xử lý đang chạy
Modal “Đang xử lý…” — checklist từng bước cập nhật theo thời gian thực

Modal hoàn tất, đã tải file zip
Modal “Hoàn tất!” — stat tile, checklist 100%, file .zip đã tải về máy

Video toàn bộ luồng thật — đăng nhập → chọn file → bấm “Giải nén” → theo dõi tiến trình → nhận kết quả

6. Nguồn gốc & ghi chú kỹ thuật

Công cụ tự triển khai lại định dạng nhị phân .wpress bằng JavaScript (tham khảo cấu trúc từ 2 dự án mã nguồn mở fifthsegment/Wpress-Extractor và yani-/wpress), không phụ thuộc plugin All-in-One WP Migration hay bất kỳ site WordPress trung gian nào. Toàn bộ luồng xử lý job (giải nén → đổi prefix → import DB → đổi domain → dựng lại wp-config → giao FTP/zip) và các lớp bảo mật (chặn SSRF, escape khi sinh wp-config.php, rate limit) do công cụ tự đảm nhiệm.