FrankenPHP: Web server & PHP hợp thể

Không hẳn là mới, nhưng với những người dùng tự triển Wordpress trên VPS thì có thể sẽ lạ lẫm với FrankenPHP, một “PHP app server” hiện đại với rất nhiều ưu điểm. Vì nó là một PHP server nên dùng để ứng dụng rất nhiều việc khác nhau, trong đó có cả Wordpress (vốn chạy trên PHP). Có rất nhiều ưu điểm về tốc độ lẫn sự tiện dụng, dễ triển khai cho người mới… hiện tại WP Siêu Tốc cũng đang chạy trên FrankenPHP.

Trong bài này, mình sẽ giới thiệu & hướng dẫn triển khai FrankenPHP ở góc độ là một web server nhé.

Kevin dunglas

Giới thiệu về FrankenPHP

FrankenPHP là một dự án được tạo ra bởi Kévin Dunglas, và hiện tại dự án này vừa được hỗ trợ chính thức bởi The PHP Foundation vào tháng 05/2025 luôn rồi. Vậy nên trong tương lai, vấn đề được phát triển và duy trì không có gì phải lo lắng, bạn hoàn toàn có thể yên tâm dùng nó.

Sau khi chính thức được hỗ trợ bởi The PHP Foundation, tốc độ cập nhật và sửa lỗi rất liên tục & đều đặn. Mình đánh giá rất cao & cũng yên tâm sử dụng lâu dài.

Frankenphp the php foundation

FrankenPHP cho Wordpress

Có rất nhiều cách để ứng dụng FrankenPHP, vì nó là một php server. Tuy nhiên, một phần lớn ứng dụng chắc chắn là Wordpress (dựa trên nền tảng PHP, chiếm hơn 40% lượng website trên toàn Internet).

Khi mới tìm hiểu về FrankenPHP, mình thực sự bất ngờ. Điểm mạnh đầu tiên là sự đơn giản, bất kỳ ai cũng có thể triển khai được nó.

Là sự kết hợp giữa web server và PHP

Nghĩa là FrankenPHP đã bao gồm luôn cả web server và PHP, chỉ trong 1 file duy nhất. Bạn không nghe nhầm đâu, chỉ 1 file duy nhất là bạn đã có thể chạy được website rồi!

FrankenPHP dùng Caddy làm web server. Caddy nổi tiếng với hiệu năng cao, cấu hình cực kỳ đơn giản.
Phiên bản PHP được tích hợp là PHP 8.4 (ở phiên bản FrankenPHP 1.7.0)

FrankenPHP hoàn toàn có thể kết hợp với Nginx hoặc Apache, nhưng mình khuyến cáo không nên làm thế, vì như vậy thì sẽ làm mất đi các điểm mạnh làm nên sự khác biệt của nó.

Bình thường nếu bạn muốn dùng Nginx, OpenLiteSpeed, nếu bạn là người mới, gần như là bất khả thi để bạn setup thủ công một bộ stack hoàn chỉnh chạy được website. Sẽ cần rất nhiều cấu hình, rất nhiều mồ hôi để mọi thứ hoạt động ổn. Vậy nên thường người ta sẽ chọn control panel (như cPanel, DirectAdmin, CyberPanel, CloudPanel…) hoặc các shell script như HocVps, LarVPS, WpTangtoc… Những panel/script này đã làm sẵn hết rồi, chúng ta chỉ cần dùng và quản lý thôi.

Còn đối với FrankenPHP, bạn chỉ cần:

  • Tải 1 file “static binary” phù hợp với OS và kiến trúc CPU của bạn (x86 hoặc ARM).
    Ví dụ mình đang dùng Debian 12, VPS dùng CPU x86, mình sẽ tải file frankenphp-linux-x86_64 về. Như đã nói, tất cả Caddy và PHP 8.4 đều đã nằm gọn trong file này.
  • Thêm 1 file cấu hình, để xác định thư mục mã nguồn Wordpress.
  • Cài thêm database (thường là MariaDB).

Vậy là xong! Cực kỳ đơn giản, chỉ cần bạn có kiến thức cơ bản về quản trị VPS, bạn hoàn toàn có thể tự setup được một VPS chạy Wordpress với hiệu năng cao chỉ trong 5 phút!

Dễ dàng cấu hình & sử dụng

Như đã nói ở trên, bạn cũng chỉ cần 1-2 file cấu hình, thay vì 1 đống như trước đây. Ưu điểm này là do kế thừa từ Caddy được tích hợp sẵn, vốn là 1 web server hiện đại, cần rất ít cấu hình.

Một điểm mạnh mình thấy rất hay, đó là về phần SSL, bạn không cần thực hiện bất cứ một thao tác gì. Chỉ cần trỏ domain về VPS đã setup là FrankenPHP tự nhận diện và cấp SSL miễn phí cho bạn. Không thao tác, không chờ đợi, quá là tuyệt vời!

FrankenPHP mặc định cũng có sẵn HTTP/3 và Early Hints, cũng không cần cấu hình thêm gì.

Hiệu năng cao, tiết kiệm tài nguyên

Vì đã tích hợp web server Caddy chung với PHP, các request đều được xử lý mang tính chất nội bộ, vậy nên tốc độ được cải thiện rất nhiều, loại bỏ độ trễ.

Nginx phải giao tiếp với PHP qua FastCGI, còn OpenLiteSpeed thì dùng API (lsphp). Sẽ có độ trễ nhất định ở bước này.

Ngoài ra, FrankenPHP hoạt động ở chế độ Worker Mode, giúp xử lý các request nhanh hơn.
Với PHP truyền thống, mỗi request khởi tạo một phiên PHP riêng → tốn thời gian load lại code, khởi tạo biến, kết nối database. Còn FrankenPHP giữ nguyên process PHP để xử lý nhiều request liên tiếp.

Frankenphp 1 service

Bạn có thể check bằng htop, FrankenPHP sẽ luôn duy trì process và các thread con, sẵn sàng xử lý liên tục các request từ user:

  • Chỉ load WordPress một lần duy nhất (ví dụ: load WordPress core, plugins, theme vào bộ nhớ RAM).
  • Giảm 90% thời gian khởi tạo với các ứng dụng như WordPress (theo benchmark từ nhóm tác giả).
  • Tận dụng tối đa OPcache: Code PHP được cache ở bộ nhớ máy chủ.
  • Giảm context switching: Do chạy trong một tiến trình thống nhất.
Đặc điểmFrankenPHPPHP-FPM (Nginx/Apache)LSPHP (LiteSpeed)
Kiến trúcNhúng PHP trực tiếp vào máy chủ (không cần FastCGI)Chạy như một tiến trình riêng qua FastCGITương tự PHP-FPM nhưng tối ưu cho LiteSpeed
Hiệu suấtRất cao (nhờ Worker Mode, HTTP/3, ít overhead)Tốt, nhưng có overhead do giao tiếp FastCGICao, tối ưu cho LiteSpeed Cache
Cấu hìnhĐơn giản (tự động HTTPS, ít file cấu hình)Phức tạp (cần cấu hình Nginx/Apache + PHP-FPM)Đơn giản nếu dùng LiteSpeed
Tương thích WordPressTốt, hỗ trợ đầy đủTốtRất tốt, tối ưu với LiteSpeed Cache
HTTP/2 & HTTP/3Hỗ trợ sẵn, tự độngCần cấu hình thêmHỗ trợ sẵn (HTTP/3 cần bật)
Early HintsHỗ trợ (tốt cho hiệu suất trang)Không (phụ thuộc webserver)Có (khi dùng LiteSpeed)
Worker ModeCó (xử lý nhiều request trong 1 tiến trình PHP)Không (1 request = 1 tiến trình)Không
Dễ triển khaiRất dễ (chạy bằng Docker hoặc binary)Trung bình (cần cấu hình nhiều thành phần)Dễ (nếu dùng LiteSpeed)

Trong quá trình thực tế sử dụng mình thấy tốc độ load frontend và backend đều nhanh hơn hẳn. Hoàn toàn chưa can thiệp bằng các Plugin Cache hoặc Edge Caching. Dù chỉ chạy trên VPS cấu hình yếu, nhưng mọi xử lý mượt mà hơn hẳn.

Bạn có thể tham khảo thêm một bài benchmark tại đây.

Nhược điểm của FrankenPHP

Ưu điểm cũng là nhược điểm của FrankenPHP, sự đơn giản có thể là giới hạn nếu như bạn muốn vọc vạch sâu hơn.

Không cho can thiệp nhiều vào cấu hình

Bạn vẫn sẽ cấu hình được Caddyfile và php.ini để chỉnh sửa, thay đổi 1 số cấu hình. Nhưng khi cần tích hợp rộng hơn vào các hệ thống monitor, logging… thì sẽ phải nhức đầu khá nhiều, đa số đều sẽ phải đi đường vòng.

Không bổ sung được các module hoặc extension ngoài

Caddy giống Nginx, sẽ có các module. PHP thì có các extension. FrankenPHP là sự kết hợp của cả 2, đã tích hợp những module và extension phổ biến, gom thành 1 file duy nhất (dạng static binary – đã được cố định). Trong quá trình dùng bình thường, 95% bạn sẽ không cần thêm. Nhưng trong trường hợp bạn cần một extension lạ cho PHP như ioncube thì coi như bó tay, không có cách nào để thêm extension đó cả.

Phương án duy nhất là bạn tự build lại một static binary cho riêng mình dựa trên mã nguồn mở của dự án. Nhưng mình bỏ qua phương án này, vì mình không biết làm :))

Nhưng nếu bạn là người dùng bình thường, thì cứ yên tâm, tất cả đều đã đủ dùng cho mọi nhu cầu.

Vấn đề tiêu thụ RAM & tài nguyên

FrankenPHP sẽ luôn trong tình trạng sẵn sàng, nó đã load sẵn mã nguồn PHP và duy trì các process để xử lý request từ user.

Với mỗi website được thêm vào, nó sẽ cắn tối thiểu 100-200 MB RAM. Bạn có 10 website, chà, phải chuẩn bị một VPS có lượng RAM nhiều chút nhé. Tuy nhiên, khi có traffic đổ vào, FrankenPHP sẽ xử lý nhanh và ổn định hơn. Lúc loading, FrankenPHP tiết kiệm tài nguyên hơn rõ rệt.

Ngược lại, Nginx+FPM-PHP khi không có load thì lại không tốn nhiều tài nguyên, PHP duy trì ở mức tối thiểu. Tuy nhiên, khi có nhiều traffic, RAM sẽ tăng nhanh, càng nhiều user càng nặng nếu không có cache.

Newbie giữa các đàn anh đã lâu đời

Nếu so với Apache, LiteSpeed, Nginx thì FrankenPHP (cũng như Caddy) còn quá mới và non trẻ. Đồng nghĩa các tài liệu còn ít, kiến thức ít, độ tương thích còn hạn chế.

Hiện tại ngoài cách dùng file static binary, bạn cũng có thể dùng Docker. Nhà phát triển cũng tung ra một phiên bản docker FrankenWP tối ưu sâu cho Wordpress, rất đáng thử (nhưng để một bài khác). Nhìn chung, bạn sẽ phải tự triển khai, không có panel hay script nào hỗ trợ FrankenPHP ở thời điểm hiện tại. Cũng may là nó dễ, chơi được!

Ai nên và không nên dùng FrankenPHP

Nên, nếu bạn:

  • Có kiến thức cơ bản về quản trị VPS, server Linux. Tự kiểm soát được mọi thứ.
  • Muốn một giải pháp nhanh gọn, tự động hóa HTTPS, HTTP/3.
  • Muốn tối ưu hiệu suất PHP mà không tốn nhiều thời gian sức lực.
  • Bạn sẽ build website mới từ đầu (hoặc souce code của bạn khá mới). Bạn biết rằng mình sẽ không gặp tình trạng không tương thích vì code cũ, plugin cũ, extension độc lạ…
  • Bạn có thời gian và cảm thấy yêu thích khi thực hiện những điều trên.

Không nên nếu bạn:

  • Chưa biết nhiều về việc quản trị server, hệ điều hành Linux.
  • Muốn một giải pháp quản trị dễ dàng, tiết kiệm thời gian khi có sự cố.
  • Bạn muốn độ tương thích tối đa cho soure code cũ, hoặc có dự định cần sự tương thích mở rộng.
  • Doanh nghiệp lớn, cần sự ổn định & tin cậy.

Ở thời điểm hiện tại, mình đánh giá FrankenPHP đã trưởng thành đáng kể, hiện tại mình đang dùng song song với các Panel/Script khác mà không gặp trở ngại nào. Chỉ cần không bị dính trường hợp không tương thích vì hệ thống code quá cũ thì mọi thứ đều rất nhẹ nhàng. Setup trong 5 phút và quên nó đi, FrankenPHP đem lại sự ổn định và hiệu suất rất ngon với mình.

Trong thời gian tới, với sự hỗ trợ chính thức từ The PHP Foundation, mình tin rằng nó sẽ ngon hơn nữa, trở thành một giải pháp thay thế tuyệt vời!