Hosting cho WooCommerce: cấu hình, yêu cầu và cách tối ưu

Hosting cho WooCommerce cần gì: yêu cầu PHP, MariaDB, RAM theo tài liệu chính thức, vì sao cửa hàng nặng hơn blog, và cách cấu hình cache, cron, backup đúng.

Sơ đồ: luồng request của cửa hàng WooCommerce qua page cache, PHP và database

Ý chính

  • WooCommerce 10.8 trở lên yêu cầu WordPress 6.9, PHP 8.3, MySQL 8.0 hoặc MariaDB 10.6, HTTPS và memory limit 256 MB.
  • Giỏ hàng, thanh toán và tài khoản khách phải bỏ qua page cache, nên cửa hàng tốn PHP và database hơn blog nhiều.
  • Redis object cache, cron chạy bằng server và backup database theo giờ là ba thiết lập quan trọng nhất sau page cache.
  • Hãy đặt cửa hàng đông khách vào gói hoặc server riêng thay vì chung gói với website giới thiệu.

Hosting cho WooCommerce cần nhiều hơn hosting cho blog: theo yêu cầu chính thức của WooCommerce tại thời điểm viết (tháng 10/2026), WooCommerce 10.8 trở lên cần WordPress 6.9, PHP 8.3, MySQL 8.0 hoặc MariaDB 10.6, HTTPS và memory limit 256 MB. Quan trọng hơn con số, giỏ hàng, thanh toán và tài khoản khách không cache được, nên cửa hàng cần PHP worker, RAM và database khoẻ hơn, cộng với Redis object cache, cron chạy bằng server và backup database thường xuyên.

Bài viết giải thích vì sao WooCommerce nặng hơn WordPress thường, cách ước lượng tài nguyên, danh sách cấu hình cần làm trên server, và cách thiết lập trên ZoPanel.

Yêu cầu hosting cho WooCommerce là gì?

Thành phần Yêu cầu (WooCommerce 10.8+) Ghi chú
WordPress 6.9 trở lên
PHP 8.3 trở lên (đã thử tới 8.4) Vẫn chạy trên PHP 7.4+ nhưng đó là phiên bản hết hỗ trợ
Database MySQL 8.0+ hoặc MariaDB 10.6+
HTTPS Bắt buộc
PHP memory limit 256 MB trở lên
Web server Nginx hoặc Apache khuyên dùng

Yêu cầu thay đổi theo từng phiên bản WooCommerce, nên hãy kiểm tra lại trang chính thức trước khi chọn server.

Đối chiếu với hệ điều hành phổ biến: Ubuntu 24.04 có sẵn PHP 8.3 và MariaDB 10.11; Debian 12 có MariaDB 10.11 nhưng PHP mặc định là 8.2, nên cần PHP 8.3 từ kho bổ sung; Debian 13 có PHP 8.4 và MariaDB 11.8. Một VPS mới cài đáp ứng được yêu cầu, nhưng shared hosting giá rẻ còn chạy PHP cũ thì không.

Vì sao WooCommerce nặng hơn website WordPress thường?

Một blog có page cache gần như không chạy PHP với khách đọc bài. Cửa hàng thì khác:

  • Giỏ hàng, thanh toán, tài khoản khách bỏ qua cache. Ngay khi khách thêm sản phẩm vào giỏ, trình duyệt có cookie phiên WooCommerce và mọi trang sau đó của khách phải dựng bằng PHP.
  • Bộ lọc và tìm kiếm sản phẩm dùng query string, mỗi tổ hợp là một URL riêng, gần như không trúng cache. Bot thích đi hết mọi tổ hợp bộ lọc.
  • Tác vụ nền. WooCommerce dùng Action Scheduler cho email, webhook, cập nhật kho, gia hạn đăng ký. Mặc định chúng chạy nhờ WP-Cron, tức là nhờ lượt truy cập.
  • Database lớn dần. Đơn hàng, metadata, ghi chú, log. Từ WooCommerce 8.2, cửa hàng mới mặc định dùng High-Performance Order Storage (HPOS), lưu đơn hàng trong bảng riêng thay vì bảng bài viết; cửa hàng cũ phải chủ động chuyển trong WooCommerce → Settings → Advanced → Features.
  • Plugin thanh toán, vận chuyển gọi API bên ngoài ngay trong lúc khách thanh toán. API chậm thì PHP worker bị giữ lâu.

Trong bài đo sức chứa VPS 4 GB, chúng tôi lưu ý rằng cửa hàng có nhiều khách đăng nhập hoạt động giống cột "không page cache" hơn là cột "có page cache". Đó là cách đơn giản nhất để hình dung: hãy tính tài nguyên cho cửa hàng như thể phần lớn lượt truy cập có giá trị đều chạy PHP.

Cửa hàng WooCommerce cần VPS cấu hình bao nhiêu?

Chúng tôi không đưa ra một con số chung, vì một cửa hàng 50 sản phẩm ít khách và một cửa hàng 20.000 sản phẩm chạy quảng cáo khác nhau hàng chục lần. Thay vào đó, hãy ước lượng theo ba câu hỏi:

  1. Cùng lúc có bao nhiêu khách đang ở giỏ hàng hoặc thanh toán? Mỗi request như vậy chiếm một PHP worker trong thời gian dựng trang. Số PHP worker cần ≈ số request không cache mỗi giây × thời gian dựng trang (giây), cộng thêm khoảng dư.
  2. Mỗi PHP worker chiếm bao nhiêu RAM? Với WooCommerce và vài plugin, thường vài chục tới hơn 100 MB. RAM cho PHP ≈ số worker × RAM mỗi worker.
  3. Database lớn tới đâu? MariaDB cần RAM cho buffer pool để giữ các bảng đơn hàng và sản phẩm hay dùng trong bộ nhớ.

Ví dụ: giờ cao điểm có 4 request không cache mỗi giây, mỗi trang mất 0,5 giây, bạn cần khoảng 2 worker đang bận, nên 6–8 worker là có dư cho đợt tăng đột biến. Với 80 MB mỗi worker, PHP cần khoảng 650 MB. Cộng MariaDB, Redis, hệ điều hành và page cache, VPS 2 GB là mức tối thiểu hợp lý cho cửa hàng nhỏ chạy riêng; cửa hàng chạy quảng cáo thường nên bắt đầu từ 4 GB và 2 vCPU trở lên, rồi đo lại. Đây là điểm khởi đầu để đo, không phải kết quả đo.

Cách chính xác nhất vẫn là đo cửa hàng của chính bạn: theo dõi CPU, RAM và thời gian phản hồi trang thanh toán trong một đợt khuyến mãi thật.

Cấu hình server cho WooCommerce: danh sách cần làm

1. Page cache với đúng ngoại lệ

Page cache vẫn là cải thiện lớn nhất cho trang chủ, danh mục và trang sản phẩm mà khách vãng lai xem. Điều kiện là cache phải bỏ qua:

  • trang /cart, /checkout, /my-account;
  • khách có cookie giỏ hàng hoặc phiên WooCommerce, và người đã đăng nhập;
  • request POST.

Cache sai ngoại lệ là lỗi nghiêm trọng: khách thấy giỏ hàng của người khác hoặc giỏ hàng trống.

2. Redis object cache

Với những request bắt buộc chạy PHP, Redis object cache giảm số truy vấn database lặp lại. Đây là nơi WooCommerce hưởng lợi rõ nhất. Hướng dẫn chi tiết trong bài Redis object cache cho WordPress.

3. Cron chạy bằng server

Tắt WP-Cron chạy theo lượt truy cập (define('DISABLE_WP_CRON', true);) và cho server chạy tác vụ định kỳ mỗi vài phút bằng WP-CLI:

*/5 * * * * cd /home/shop/public_html && wp cron event run --due-now --quiet

Email xác nhận đơn, hàng đợi Action Scheduler và cập nhật kho sẽ chạy đúng giờ, kể cả lúc cửa hàng vắng, và không làm chậm lượt xem của khách.

4. Backup database thường xuyên

Backup hằng đêm là đủ cho blog, nhưng với cửa hàng, mất 23 giờ đơn hàng là chuyện nghiêm trọng. Hãy backup database ít nhất mỗi giờ hoặc vài giờ một lần, giữ một bản ngoài server, và thử khôi phục ít nhất một lần.

5. Cập nhật an toàn và staging

Cập nhật WooCommerce hoặc plugin thanh toán có thể làm hỏng trang thanh toán mà trang chủ vẫn trông bình thường. Thử trên bản staging trước, tạo snapshot trước khi cập nhật, và kiểm tra luồng đặt hàng sau đó.

6. Bảo mật và chống bot

Cửa hàng là mục tiêu hấp dẫn: thử thẻ tín dụng (card testing), dò mật khẩu tài khoản khách, bot quét bộ lọc. Dùng WAF, giới hạn tốc độ request theo IP, 2FA cho tài khoản quản trị, và không để trình sửa file plugin trong wp-admin.

7. Email giao dịch

Email xác nhận đơn hàng vào spam là đơn hàng bị hỏi lại qua điện thoại. Thiết lập SPF, DKIM, DMARC cho tên miền, và cân nhắc dùng dịch vụ SMTP chuyên cho email giao dịch nếu cửa hàng gửi nhiều.

Thiết lập hosting cho WooCommerce trên ZoPanel

Mọi mục trong danh sách trên đều có sẵn trong ZoPanel và chạy trên gói Free, trừ việc chép backup lên S3, cần gói Pro:

  • PHP 8.3 hoặc 8.4: ZoPanel hỗ trợ PHP 7.4 tới 8.4; quản trị viên cài thêm phiên bản ở mục Runtime, rồi chọn cho website trong tab PHP & cấu hình (xem Website và PHP).
  • Page cache trong tab PHP & cấu hình. ZoPanel không bao giờ cache khách có cookie giỏ hàng hoặc phiên WooCommerce, người đã đăng nhập, URL /cart, /checkout, /my-account, request POST và URL có query string. Tham số quảng cáo như utm_*, fbclid, gclid không bị tính là query, nên khách từ chiến dịch quảng cáo vẫn nhận trang cache.
  • Redis object cache cùng tab: ZoPanel tạo database Redis riêng cho website và cấu hình plugin.
  • Server chạy tác vụ định kỳ trong thẻ Vận hành của tab WordPress: ZoPanel đặt DISABLE_WP_CRON và tạo bộ hẹn giờ chạy wp cron event run --due-now mỗi 5 phút, bằng user của tài khoản và trong giới hạn tài nguyên của nó (xem WordPress Toolkit).
  • Backup database theo lịch: mỗi giờ, mỗi 6 giờ hoặc mỗi ngày, giữ tới 168 bản, khôi phục một chạm; với gói Pro, bản sao lưu được chép mã hoá lên S3 để có bản ngoài server (xem Sao lưu).
  • Cập nhật an toàn: snapshot file và database, cập nhật, kiểm tra trang chủ và trang đăng nhập, tự khôi phục nếu website hỏng. Staging để thử trước rồi Đẩy lên site thật.
  • WAF ModSecurity với OWASP Core Rule Set, và Giới hạn tốc độ request (20, 8 hoặc 2 request/giây mỗi IP) cho website bị bot quét bộ lọc.
  • Gói riêng cho cửa hàng: đặt cửa hàng vào gói có nhiều RAM, CPU và PHP worker hơn, và bật PHP luôn chạy để khách không gặp lần khởi động PHP chậm. Giới hạn Email mỗi giờ của gói cũng cần đủ cho lượng email đơn hàng.

Kết luận

Hosting cho WooCommerce không chỉ là "VPS mạnh hơn". Hãy đáp ứng yêu cầu chính thức (PHP 8.3+, MariaDB 10.6+, HTTPS, 256 MB), rồi tập trung vào phần không cache được: đủ PHP worker và RAM, Redis object cache, cron chạy bằng server, backup database theo giờ, và cập nhật có staging. Cửa hàng đông khách nên có gói hoặc server riêng, không chung tài nguyên với hàng chục website giới thiệu.

Muốn thử, cài ZoPanel bằng curl -fsSL https://get.zopanel.net | sudo bash, tạo website WordPress, bật page cache, Redis và cron server, rồi đo cửa hàng của bạn trên gói Free. Xem bảng giá khi cần thêm website.

Câu hỏi thường gặp

Shared hosting có chạy được WooCommerce không?

Chạy được với cửa hàng nhỏ, nếu nhà cung cấp có PHP 8.3+, MariaDB 10.6+ hoặc MySQL 8.0+, HTTPS và memory limit 256 MB, cùng giới hạn tài nguyên đủ rộng. Khi cửa hàng có nhiều đơn hoặc chạy quảng cáo, VPS hoặc gói riêng cho phép bạn kiểm soát PHP worker, cache và cron tốt hơn.

WooCommerce cần bao nhiêu RAM?

PHP cần memory limit tối thiểu 256 MB cho mỗi request, nhưng tổng RAM phụ thuộc số PHP worker chạy cùng lúc, kích thước database và các dịch vụ khác. Cửa hàng nhỏ chạy riêng thường bắt đầu từ 2 GB; hãy đo trong giờ cao điểm thật trước khi nâng cấp.

Có nên bật page cache cho WooCommerce không?

Có, cho trang chủ, danh mục và trang sản phẩm mà khách vãng lai xem. Điều kiện bắt buộc là cache bỏ qua giỏ hàng, thanh toán, tài khoản khách, người đã đăng nhập và khách có cookie giỏ hàng; cấu hình sai sẽ làm khách thấy giỏ hàng sai.

HPOS là gì và có cần bật không?

High-Performance Order Storage lưu đơn hàng trong bảng riêng thay vì bảng bài viết của WordPress, phù hợp hơn khi đơn hàng tăng. Cửa hàng mới từ WooCommerce 8.2 đã bật mặc định; cửa hàng cũ nên kiểm tra plugin tương thích rồi chuyển, có chế độ tương thích để đồng bộ trong lúc chuyển.

Vì sao email đơn hàng WooCommerce đến chậm?

Thường do WP-Cron chỉ chạy khi có lượt truy cập, nên lúc cửa hàng vắng, hàng đợi email nằm chờ. Chuyển sang cron chạy bằng server mỗi vài phút sẽ giải quyết; nếu email đến đúng giờ nhưng vào spam, hãy kiểm tra SPF, DKIM và DMARC.