Cách cài đặt HHVM với Nginx trên Ubuntu 14.04
HHVM là một máy ảo open-souce để thực thi PHP và mã Hack . HHVM được phát triển và hỗ trợ bởi Facebook, một điều khiến HHVM ngày càng chú ý đến gần đây.HHVM khác với các công cụ PHP khác vì cách tiếp cận biên dịch đúng lúc (JIT) của nó. HHVM biên dịch mã PHP thành một mã byte trung gian và sau đó chuyển trực tiếp thành các lệnh máy x64. Điều này cho phép tối ưu hóa nhiều hơn và hiệu suất cao hơn so với cách hoạt động của các động cơ khác.
HHVM mạnh mẽ và nhanh chóng, nhưng nó cũng đòi hỏi nhiều tài nguyên, giống như bất kỳ máy ảo nào khác (ví dụ: JVM). Do đó, HHVM yêu cầu nhiều RAM và CPU hơn so với các trình thông dịch PHP nhẹ hơn khác như PHP-FPM. Các thử nghiệm của ta cho thấy rằng hiệu suất tốt yêu cầu Server với RAM ít nhất 1 GB.
Trong bài viết này, ta sẽ hướng dẫn bạn cách cài đặt HHVM và tích hợp nó với Nginx.
Yêu cầu
Hướng dẫn này đã được thử nghiệm trên Ubuntu 14.04. Cài đặt và cấu hình được mô tả sẽ tương tự trên các version HĐH hoặc HĐH khác, nhưng các lệnh và vị trí của file cấu hình có thể khác nhau.
Đối với hướng dẫn này, bạn cần :
- Ubuntu 14.04 Server với tối thiểu 1 GB RAM
- User sudo không phải root (xem Cài đặt server ban đầu với Ubuntu 14.04 )
- Đã cài đặt Nginx (Làm theo bước một từ bài viết Cách cài đặt ngăn xếp Linux, Nginx, MySQL, PHP (LEMP) trên Ubuntu 14.04 )
Tất cả các lệnh trong hướng dẫn này phải được chạy với quyền user không phải root. Nếu cần có quyền truy cập root cho lệnh, nó sẽ được đặt trước sudo
.
Cài đặt
Đối với Ubuntu 14.04, có một repository HHVM được hỗ trợ chính thức. Để thêm repository này, bạn phải nhập các public key GnuPG của nó bằng lệnh:
- sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
Sau đó, bạn có thể cài đặt repository của HHVM một cách an toàn bằng lệnh:
- sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
Khi bạn đã thêm repository , bạn phải tạo apt, người quản lý phần mềm của Ubuntu, biết rằng có các gói mới có thể được cài đặt với nó. Điều này có thể được thực hiện bằng cách cập nhật bộ nhớ cache của apt bằng lệnh:
- sudo apt-get update
Cuối cùng, bạn có thể cài đặt HHVM bằng lệnh:
- sudo apt-get install hhvm
Lệnh trên cài đặt HHVM và khởi động nó lần đầu tiên. Để đảm bảo HHVM bắt đầu và dừng tự động với Server, hãy thêm HHVM vào runlevel mặc định bằng lệnh:
- sudo update-rc.d hhvm defaults
Cấu hình
HHVM đi kèm với một tập lệnh giúp tích hợp với Nginx rất dễ dàng. Miễn là bạn có cài đặt Nginx mặc định, bạn có thể chạy tập lệnh mà không có bất kỳ đối số nào như sau:
- sudo /usr/share/hhvm/install_fastcgi.sh
Khi chạy, tập lệnh này thêm file cấu hình /etc/nginx/hhvm.conf
vào cấu hình khối server Nginx mặc định /etc/nginx/sites-enabled/default
. Nó chỉ hoạt động với cấu hình Nginx mặc định mà không có bất kỳ cấu hình FastCGI nào.
Nếu bạn đã sửa đổi khối server mặc định của bạn bằng cấu hình FastCGI tùy chỉnh, chẳng hạn như khối cho PHP-FPM, thì bạn sẽ phải thay thế cấu hình FastCGI trước đó của bạn bằng cấu hình này theo cách thủ công:
location ~ \.(hh|php)$ { fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Điều trên nghĩa là Nginx nên sử dụng HHVM để xử lý bất kỳ .hh
.php
hoặc .hh
(hack) nào được yêu cầu.
Bạn cũng cần khởi động lại Nginx để thực hiện thay đổi:
- sudo service nginx restart
Nó cũng giả định bạn chưa thay đổi cấu hình HHVM mặc định làm cho dịch vụ có thể truy cập tại 127.0.0.1:9000
. Cài đặt này đến từ file cấu hình HHVM chính /etc/hhvm/server.ini
chứa:
; php options pid = /var/run/hhvm/pid ; hhvm specific hhvm.server.port = 9000 hhvm.server.type = fastcgi hhvm.server.default_document = index.php hhvm.log.use_log_file = true hhvm.log.file = /var/log/hhvm/error.log hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
Trong cấu hình trên, bạn có thể nhận thấy biến hhvm.server.port
xác định rằng HHVM sẽ lắng nghe trên cổng TCP 9000. Hơn nữa, trừ khi được chỉ định khác, nó sẽ lắng nghe trên localhost theo mặc định.
HHVM được coi là dành cho môi trường chịu tải nặng nên thay đổi cấu hình đầu tiên bạn có thể làm là đặt HHVM lắng nghe một socket thay vì một cổng TCP. Do đó, giao tiếp giữa Nginx và HHVM sẽ yêu cầu ít CPU và bộ nhớ hơn.
Để cấu hình HHVM để lắng nghe trên socket , hãy mở file /etc/hhvm/server.ini
trong editor yêu thích của bạn, chẳng hạn như với vim
:
- sudo vim /etc/hhvm/server.ini
Sau đó, xóa dòng bắt đầu bằng hhvm.server.port
và thêm dòng sau:
hhvm.server.file_socket=/var/run/hhvm/hhvm.sock
Lưu file cấu hình và khởi động lại HHVM bằng lệnh:
- sudo service hhvm restart
Tiếp theo, bạn phải làm cho Nginx biết về sự thay đổi này. Vì mục đích này, hãy mở file /etc/nginx/hhvm.conf
để chỉnh sửa:
- sudo vim /etc/nginx/hhvm.conf
Trong file này, hãy đảm bảo chỉ thị fastcgi_pass
trỏ đến cổng HHVM và trông giống như sau:
fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
Bạn cũng sẽ phải khởi động lại Nginx để thay đổi này có hiệu lực. Với mục đích này, hãy sử dụng lệnh:
- sudo service nginx restart
Tập lệnh /usr/share/hhvm/install_fastcgi.sh
có thể giúp bạn tiết kiệm thời gian, nhưng có những thứ bạn phải điều chỉnh theo cách thủ công, đặc biệt là liên quan đến khối server Nginx của bạn. Ví dụ: cấu hình khối server mặc định mở ra dưới dạng file index chỉ các file index.html
và index.htm
trong khi danh sách folder bị cấm. Đây là một điều bạn nên thay đổi chắc chắn và bao gồm các index.php
file index . Để thực hiện việc này, hãy mở lại file cấu hình cho khối server mặc định bằng editor yêu thích của bạn:
- sudo vim /etc/nginx/sites-enabled/default
Sau đó đi đến phần server
và thêm index.php
tại dòng có index để nó trông giống như sau:
index index.html index.htm index.php;
Khởi động lại Nginx để cài đặt này có hiệu lực:
- sudo service nginx restart
Kiểm tra và tinh chỉnh HHVM
Thử nghiệm đầu tiên mà bạn có thể thực hiện là với giao diện dòng lệnh PHP (cli) /usr/bin/php
trỏ tới /etc/alternatives/php
, về mặt nghĩa là nó trỏ đến HHVM binary /usr/bin/hhvm
.
- /usr/bin/php --version
Khi bạn chạy lệnh trên, bạn sẽ thấy thông tin về version và repository của HHVM được in như sau:
HipHop VM 3.8.1 (rel) Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660 Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33
Nếu bạn đã cài đặt PHP trước HHVM, bạn vẫn có thể thấy kết quả từ PHP cũ. Để thay đổi điều này và làm cho nó trỏ đến HHVM, hãy chạy lệnh:
- sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
Tiếp theo, bạn có thể sử dụng phpinfo()
nổi tiếng để xem các cài đặt và tùy chọn của HHVM. Vì mục đích này, hãy tạo một file mới có tên là info.php
bên trong root tài liệu mặc định của bạn - /usr/share/nginx/html
bằng trình soạn thảo yêu thích của bạn.
- sudo vim /usr/share/nginx/html/info.php
Tệp mới phải chứa:
<?php phpinfo(); ?>
Luôn luôn là một phương pháp hay đảm bảo rằng tất cả các file web Nginx đều thuộc quyền sở hữu của user Nginx www-data
. Do đó, hãy thay đổi quyền sở hữu của file này thành www-data
bằng lệnh:
- sudo chown www-data: /usr/share/nginx/html/info.php
Bây giờ hãy thử truy cập file này tại IP của Server. URL để đặt trong trình duyệt của bạn phải có dạng http:// your_server_ip /info.php
.
Kết quả trong trình duyệt của bạn sẽ giống như sau:
Nếu bạn không thấy một trang tương tự thì trước tiên hãy đảm bảo bạn đã làm theo đúng hướng dẫn cài đặt từ các yêu cầu . Thứ hai, tìm lỗi trong log lỗi của Nginx ( /var/log/nginx/error.log
) và HHVM ( /var/log/hhvm/error.log
).
Quay lại trình duyệt của bạn , bạn có thể nhận thấy rằng trang này tương tự như trang được tạo bởi phpinfo()
với PHP thông thường. Trên thực tế, hầu hết các biến đều giống với các biến trong PHP thông thường, ngoại trừ các biến HHVM cụ thể bắt đầu bằng hhvm.
tiếp đầu ngữ.
Trong khi khám phá các biến, lưu ý memory limit
bằng 17179869184 byte, hơn 17 GB một chút. Giới hạn tài nguyên bộ nhớ cao như vậy chắc chắn sẽ giết chết một Server với vài GB RAM, khiến nó không phản hồi. Bạn nên giảm giá trị này xuống một giá trị thấp hơn RAM khả dụng của Server đảm bảo rằng các dịch vụ khác trên Server sẽ không bị thiếu RAM.
Ví dụ chung, nếu Server có RAM 2GB, bạn nên dành khoảng 1,2 GB cho HHVM. Để thực hiện điều này, hãy chỉnh sửa file /etc/hhvm/php.ini
bằng editor yêu thích của bạn ( sudo vim /etc/hhvm/php.ini
) và thêm một biến mới sau ; php options
phần ; php options
:
memory_limit = 1200M
Theo cách tương tự, bạn có thể sửa đổi cài đặt và biến PHP nào theo nhu cầu và ý thích của bạn . Chỉ cần đảm bảo khởi động lại HHVM sau mỗi lần thay đổi bằng lệnh:
- sudo service hhvm restart
Tiếp theo, bạn có thể thực hiện một bài kiểm tra phức tạp hơn với một ứng dụng web thông thường. Điều quan trọng cần biết là HHVM không tương thích 100% với PHP thông thường cũng như với tất cả các khung PHP phổ biến. Các thử nghiệm của ta trong quá trình viết bài này cho thấy rằng nhiều ứng dụng web PHP, chẳng hạn như WordPress, dường như hoạt động tốt. Tuy nhiên, về mặt chính thức, số lượng framework được hỗ trợ là có hạn.
Khi bạn kiểm tra với một khuôn khổ / ứng dụng web hoàn chỉnh, không có gì cụ thể cho HHVM để xem xét. Hướng dẫn cài đặt và vận hành phải giống như đối với LEMP thông thường. Điều này là do, theo mặc định, HHVM đi kèm với tất cả các module PHP cung cấp khả năng tương thích tốt.
Tuy nhiên, trong một số trường hợp khá hiếm, bạn có thể cần phải cài đặt một module bổ sung cho HHVM. Ví dụ: nếu bạn sử dụng PostreSQL làm server database , bạn cần module pgsql
. Trong những trường hợp như vậy, hãy tham khảo tài liệu chính thức đầu tiên của HHVM mặc dù nó có thể chuyển tiếp bạn đến tài nguyên của bên thứ ba, chẳng hạn như trong trường hợp của pgsql
.
Kết luận
Như bài viết này đã trình bày, HHVM có thể dễ dàng cài đặt, cấu hình và tích hợp với Nginx. Nếu bạn có đủ tài nguyên, bạn chắc chắn nên dùng thử và xem trình biên dịch JIT độc đáo của HHVM hoạt động như thế nào đối với bạn về hiệu suất và độ ổn định. Phải có lý do chính đáng để một trang web như Facebook với chức năng phức tạp và lưu lượng truy cập vô song để tin tưởng nó. Tuy nhiên, đối với các trang web nhỏ hơn với lưu lượng truy cập ít hơn, bạn có thể thấy giải pháp sử dụng bộ nhớ thấp hơn như PHP-FPM vẫn là lựa chọn tốt hơn.
Các tin liên quan
Cách thiết lập xác thực mật khẩu với Nginx trên Ubuntu 14.042015-08-10
Cách cài đặt Nginx trên Debian 8
2015-07-09
Cách lưu trữ nhiều trang web một cách an toàn với Nginx và Php-fpm trên Ubuntu 14.04
2015-07-01
Cách tạo blog bằng Ghost và Nginx trên Ubuntu 14.04
2015-06-28
Cách tạo chứng chỉ ECC trên Nginx cho Debian 8
2015-06-23
Cách nâng cấp Nginx tại chỗ mà không làm rớt kết nối client
2015-06-15
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04
2015-06-05
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên CentOS 7
2015-06-05
Cách chuyển hướng www sang không có www với Nginx trên CentOS 7
2015-05-04
Cách chuyển hướng www thành không có www với Nginx trên Ubuntu 14.04
2015-05-04