LEMP stack là bộ phần mềm mã nguồn mở được triển khai đồng bộ, giúp máy chủ lưu trữ và vận hành các trang web cùng ứng dụng web động. Tên gọi này là viết tắt của Linux, Nginx (thay thế Apache trong LAMP stack), MySQL và PHP, nơi dữ liệu trang web được lưu trữ trong cơ sở dữ liệu MySQL và nội dung động được xử lý bởi PHP.
Trong hướng dẫn này, chúng ta sẽ cài đặt LEMP stack với PHP 7.4 trên máy chủ CentOS 7, sử dụng MariaDB làm hệ quản trị cơ sở dữ liệu. MariaDB hoạt động như một sự thay thế drop-in cho MySQL gốc, cho phép bạn chuyển đổi mà không cần điều chỉnh cấu hình hoặc mã nguồn ứng dụng.
Yêu cầu
Trước khi bắt đầu với bài hướng dẫn này, bạn nên tạo một tài khoản người dùng không phải root riêng trên máy chủ của bạn. Bạn có thể học cách thực hiện điều này qua các bước 1-4 trong bài hướng dẫn thiết lập máy chủ ban đầu cho centos 7.
Bước 1 – Cài đặt nginx
Để hiển thị trang web cho khách truy cập, chúng ta sẽ sử dụng Nginx, một máy chủ web hiệu suất cao. Để lấy phiên bản nginx mới nhất, trước tiên chúng ta cài đặt kho EPEL chứa các phần mềm bổ sung cho hệ điều hành centos 7.
Để thêm kho EPEL cho centos 7, chạy lệnh:
sudo yum install epel-release
Vì chúng ta sử dụng lệnh sudo, các thao tác này được thực thi với đặc quyền root. Hệ thống sẽ yêu cầu bạn nhập mật khẩu của tài khoản người dùng thường để xác thực quyền thực hiện các lệnh với đặc quyền root. Bạn cũng sẽ được nhắc xác nhận cài đặt, hãy nhấn Y để tiếp tục.
Sau khi kho EPEL đã được cài đặt trên máy chủ, cài đặt nginx bằng lệnh:
sudo yum install ngin
Khi cài đặt hoàn tất, khởi động dịch vụ nginx bằng lệnh:
sudo systemctl start nginx
Bạn có thể kiểm tra nhanh ngay lập tức xem mọi thứ đã diễn ra như kế hoạch bằng cách truy cập địa chỉ IP công khai của máy chủ trong trình duyệt web (nếu bạn chưa biết địa chỉ IP công khai, hãy xem mục “Cách tìm địa chỉ IP công khai của máy chủ” bên dưới):
Mở trình duyệt và truy cập:
http://server_domain_name_or_IP/
Để kích hoạt nginx tự động khởi động cùng hệ thống, chạy lệnh:
sudo systemctl enable nginx
Cách tìm địa chỉ IP công khai của máy chủ
Nếu bạn không biết địa chỉ IP công khai của máy chủ, có vài cách để tìm. Thông thường, đây là địa chỉ bạn dùng để kết nối qua SSH.
Từ dòng lệnh, bạn có thể dùng công cụ iproute2 để lấy địa chỉ bằng cách nhập:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Lệnh trên sẽ trả về một hoặc hai dòng, đều là địa chỉ hợp lệ; bạn có thể thử từng địa chỉ nếu cần.
Một cách khác là sử dụng một dịch vụ bên ngoài để biết máy chủ của bạn được nhìn nhận như thế nào, bằng cách chạy:
curl http://icanhazip.com
Dù sử dụng phương pháp nào, hãy nhập địa chỉ IP đó vào thanh địa chỉ của trình duyệt để truy cập máy chủ.
Bước 2 – Cài đặt mariadb
Khi máy chủ web của bạn đã chạy, đã đến lúc cài đặt MariaDB – một sự thay thế drop-in cho MySQL. MariaDB là nhánh phát triển từ cộng đồng của hệ quản trị cơ sở dữ liệu quan hệ MySQL.
Lại một lần nữa, chúng ta sử dụng yum để cài đặt phần mềm, lần này cùng với một số gói hỗ trợ để giúp các thành phần giao tiếp với nhau:
sudo yum install mariadb-server mariadb
Sau khi cài đặt xong, khởi động MariaD
sudo systemctl start mariadb
Khi MariaDB đã chạy, chúng ta muốn chạy một script bảo mật để loại bỏ một số thiết lập mặc định nguy hiểm và khóa truy cập vào cơ sở dữ liệu. Khởi chạy script tương tác bằng lệnh:
sudo mysql_secure_installation
Script sẽ yêu cầu bạn nhập mật khẩu hiện tại của root trong MariaDB. Vì bạn vừa cài đặt MariaDB, mật khẩu sẽ để trống, hãy nhấn ENTER. Sau đó, script sẽ hỏi bạn có muốn thiết lập mật khẩu cho root hay không – nhập Y và làm theo hướng dẫn.
Script mysql_secure_installation sẽ xuất hiện như sau:
Tiếp tục, nhấn ENTER cho các câu hỏi còn lại để chấp nhận các giá trị mặc định. Việc này sẽ xóa bỏ một số người dùng mẫu và cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa và tải các quy tắc mới vào MySQL.
Cuối cùng, để kích hoạt MariaDB tự động khởi động khi máy khởi động, chạy:
sudo systemctl enable mariadb
Tới thời điểm này, hệ thống cơ sở dữ liệu của bạn đã được thiết lập, chúng ta chuyển sang bước tiếp theo.
Bước 3 – Cài đặt php
PHP là thành phần của hệ thống giúp xử lý mã để hiển thị nội dung động. Nó có thể chạy các script, kết nối với cơ sở dữ liệu MySQL để lấy thông tin, và chuyển nội dung đã xử lý cho máy chủ web hiển thị.
Phiên bản PHP có sẵn mặc định trên centos 7 khá cũ, vì vậy chúng ta cần cài đặt một kho phần mềm bên thứ ba để có được PHP 7+ cho máy chủ centos 7. Remi là một kho phần mềm phổ biến cung cấp các bản phát hành PHP cập nhật nhất cho centos.
Để cài đặt kho Remi cho centos 7, chạy lệnh:
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Sau khi cài đặt xong, bạn cần kích hoạt kho chứa phiên bản PHP bạn mong muốn. Để kiểm tra các phiên bản PHP 7+ có sẵn trong kho Remi, chạy:
yum --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64
Kết quả sẽ xuất hiện như sau:
Output
Để kích hoạt kho Remi chứa PHP 7.4, chạy lệnh:
sudo yum-config-manager --enable remi-php74
Bây giờ, tiến hành cài đặt PHP bằng yum. Lệnh sau sẽ cài đặt tất cả các gói cần thiết để cài đặt PHP 7.4 trong Nginx và cho phép nó kết nối với cơ sở dữ liệu MySQL:
sudo yum install php php-mysqlnd php-fpm
Để xác nhận rằng PHP đã được cài đặt với phiên bản bạn chọn, chạy:
php --version
Kết quả đầu ra mẫu:
Output
PHP đã được cài đặt thành công trên hệ thống của bạn. Tiếp theo, chúng ta cần thực hiện một vài điều chỉnh đối với cấu hình mặc định.
Để thuận tiện chỉnh sửa các file trên centos, trước tiên cài đặt trình soạn thảo nano (thân thiện hơn vi):
sudo yum install nano
Mở file cấu hình /etc/php-fpm.d/
www.conf
bằng nano (hoặc trình soạn thảo ưa thích của bạn):
sudo nano /etc/php-fpm.d/www.conf
Tìm các chỉ thị user và group trong file. Nếu bạn dùng nano, nhấn CTRL+W để tìm kiếm.
Trong file /etc/php-fpm.d/www.conf
, bạn sẽ thấy:
Chúng ta cần thay đổi thành:
Tiếp theo, tìm chỉ thị listen. Mặc định, php-fpm sẽ lắng nghe trên một địa chỉ host và cổng qua TCP. Chúng ta muốn thay đổi để nó lắng nghe trên một socket cục bộ nhằm cải thiện hiệu năng. Sửa dòng chứa listen thành:
listen = /var/run/php-fpm/php-fpm.sock;
Lưu và đóng file khi hoàn tất. Nếu bạn dùng nano, nhấn CTRL+X, sau đó Y và ENTER.
Để kích hoạt và khởi động dịch vụ php-fpm, chạy:
sudo systemctl start php-fpm
Môi trường PHP của bạn đã sẵn sàng. Tiếp theo, chúng ta sẽ cấu hình nginx để chuyển tất cả các yêu cầu cho script PHP đến php-fpm.
Bước 4 – Cấu hình nginx xử lý trang PHP
Hiện tại, tất cả các thành phần cần thiết đã được cài đặt. Việc cấu hình duy nhất cần thực hiện là cho nginx sử dụng bộ xử lý PHP cho nội dung động.
Nginx có một thư mục chuyên dụng, nơi bạn có thể định nghĩa mỗi trang web được lưu trữ như một file cấu hình riêng, sử dụng server block (tương tự như virtual hosts của Apache).
Với cài đặt mặc định, thư mục này thường trống. Chúng ta sẽ tạo một file mới để làm trang web PHP mặc định trên máy chủ, ghi đè cấu hình server block mặc định trong file /etc/nginx/nginx.conf.
Trước tiên, mở file mới trong thư mục /etc/nginx/conf.d:
sudo nano /etc/nginx/conf.d/default.conf
Sao chép khối định nghĩa server cho PHP dưới đây vào file cấu hình và nhớ thay đổi chỉ thị server_name sao cho trỏ tới tên miền hoặc địa chỉ IP của máy chủ bạn:
server { listen 80; server_name server_domain_or_IP; root /usr/share/nginx/html; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Lưu và đóng file sau khi chỉnh sửa.
Tiếp theo, khởi động lại nginx để áp dụng các thay đổi:
sudo systemctl restart nginx
Máy chủ web của bạn giờ đã được cấu hình đầy đủ. Bước tiếp theo là kiểm tra tích hợp PHP với nginx.
Bước 5 – Kiểm tra xử lý PHP trên máy chủ web
Giờ đây, máy chủ web đã được cài đặt, hãy tạo một script PHP kiểm tra để xác nhận nginx xử lý các file .php thông qua php-fpm.
Trước khi tạo script, chúng ta sẽ thay đổi quyền sở hữu mặc định cho thư mục document root của nginx để tài khoản người dùng thường có thể tạo file mà không cần dùng sudo.
Chạy lệnh sau để thay đổi quyền sở hữu của thư mục /usr/share/nginx/html sang một tài khoản và nhóm (ví dụ sammy); nhớ thay đổi tên người dùng và nhóm cho phù hợp với hệ thống của bạn:
sudo chown -R sammy.sammy /usr/share/nginx/html/
Tiếp theo, tạo file test PHP có tên info.php trong thư mục /usr/share/nginx/html:
nano /usr/share/nginx/html/info.php
Thêm đoạn mã PHP sau vào file, đoạn mã này sẽ hiển thị thông tin về môi trường PHP hiện hành trên máy chủ:
<?php phpinfo();
Lưu và đóng file.
Bây giờ, mở trình duyệt và truy cập:
Bạn sẽ thấy một trang web hiển thị thông tin về PHP. Sau khi kiểm tra thông tin cần thiết, tốt nhất nên xóa file này vì nó chứa thông tin nhạy cảm về môi trường PHP và máy chủ centos của bạn. Để xóa, chạy:
rm /usr/share/nginx/html/info.php
Bạn luôn có thể tạo lại file này nếu cần kiểm tra thông tin trong tương lai.
Kết luận
Trong bài hướng dẫn này, bạn đã xây dựng một nền tảng vững chắc và linh hoạt để phục vụ các trang web và ứng dụng PHP, sử dụng Nginx làm máy chủ web và phiên bản PHP mới nhất. Bạn đã thiết lập Nginx xử lý các yêu cầu PHP thông qua php-fpm và cấu hình cơ sở dữ liệu MariaDB để quản lý dữ liệu trang web một cách hiệu quả.