Giới thiệu
Ngăn sếp LEMP là một nhóm các phần mềm được sử dụng để phục vụ trang web hoặc ứng dụng web động. LEMP là từ viết tắt mô tả hệ điều hành Linux, với máy chủ web Nginx. Dự liệu được lưu trữ trong cơ sở dữ liệu MySQL hoặc MariaDB và xử lý động được xử lý bởi PHP.
Dưới đây là bài viết chi tiết hướng dẫn cài ngăn sếp LEMP trên Ubuntu 18.04.
Điều kiện tiên quyết
Trước khi bạn thực hiện theo hướng dẫn này, bạn nên có một tài khoản người dùng trên máy chủ với các đặt quyền sudo. Bạn có thể tham khảo bài viết Hướng dẫn những thiết lập cơ bản trên máy chủ Ubuntu 18.04.
Bước 1 – Cài đặt máy chủ web Nginx
Để hiển thị trang web cho khách truy cập, chúng ta sẽ sử dụng máy chủ web là Nginx. Nginx là một máy chủ web hiện đại và hiệu suất cao.
Tất cả các phần mềm được sử dụng trong quy trình này sẽ đến từ kho lưu trữ gói mặc định của Ubuntu. Chúng ta có thể sử dụng bộ quản lý gói apt để hoàn thành các cài đặt cần thiết.
Bạn hãy thực hiện theo những câu lệnh sau:
1 2 |
sudo apt update sudo apt install nginx |
Trên Ubuntu 18.04, Nginx được cấu hình bắt đầu chạy khi cài đặt.
Nếu tường lửa ufw đang chạy, thì bạn cần phải cho phép kết nối với Nginx. Nginx tự đăng ký với ufw khi cài đặt. Do đó việc thực hiện trở nên đơn giản hơn.
Vì chưa cầu hình SSL cho máy chủ trong hướng dẫn này. Nên bạn chỉ cần cho phép lưu lượng truy cập trên cổng 80.
Cho phép bằng cách gõ:
1 |
sudo ufw allow 'Nginx HTTP' |
Bạn có thể xác minh thay đổi bằng cách chạy lệnh sau:
1 |
sudo ufw status |
Kết quả sẽ cho thấy lưu lượng HTTP được cho phép:
1 2 3 4 5 6 7 8 9 |
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6) |
Sau khi hoàn tất thêm bào, bạn có thể kiểm tra xem máy chủ có hoạt động hay không bằng cách truy cập tên miền hoặc địa chỉ IP công cộng của máy chủ trên trình duyệt web của bạn.
Trong trường hợp bạn không có tên miền, và không biết địa chỉ IP máy chủ của bạn thì bạn có thể tìm nó bằng cách gõ dòng lệnh sau:
1 |
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' |
Có thể nó sẽ hiện ra một vài địa chỉ IP. Bạn có thể thử lần lượt từng cái trong trình duyệt web của mình.
Ngoài ra, bạn có thể kiểm tra địa chỉ IP nào có thể truy cập được, khi được xem từ các vị trí khác trên internet:
1 |
curl -4 icanhazip.com |
Nhập địa chỉ mà bạn nhận được trên trình duyệt web và nó sẽ đưa bạn đến trang đích mặc định của Nginx giống như sau:
Nếu bạn thấy trang như trên thì bạn đã cài đặt thành công Nginx.
Bước 2 – Cài đặt MySQL để quản lý dữ liệu website
Bạn đã cài đặt máy chủ web, bước tiếp theo là cài đặt MySQL (một thệ thống quản lý cơ sở dữ liệu) để lưu trữ và quản lý dữ liệu cho trang web của bạn.
Để cài đặt MySQL hãy nhập câu lệnh sau:
1 |
sudo apt install mysql-server |
Phần mềm cơ sở dữ liệu MySQL hiện đã được cài đặt, nhưng cấu hình của nó vẫn chưa hoàn tất.
Để bảo mật cài đặt, MySQL sẽ hỏi thay đổi một số mặc định không an toàn. Bắt đầu tập lệnh bằng cách gõ:
1 |
sudo mysql_secure_installation |
Script này hỏi yêu cầu bạn cấu hình VALIDATE PASSWORD PLUGIN.
Lưu ý: Nếu tính năng này được bật, và trong trường hợp mật khẩu không phù hợp với tiêu chí thì sẽ MySQL từ chối do lỗi. Điều này hay gây ra sự cố nếu bạn dùng mật khẩu yếu kết hợp với phần mềm tự động cấu hình đăng nhập người dùng MySQL. Bạn nên sử dụng mật khẩu manh, duy nhất cho cơ sở dữ liệu.
Trả lời Y là đồng ý, hoặc bất cứ điều gì khác mà không tiếp tục.
1 2 3 4 5 6 |
VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: |
Nếu bạn đã bật xác thực, tập lệnh cũng sẽ yêu cầu bạn chọn mức xác thực mật khẩu. Nếu bạn đặt là 2, tức là mức xác thực mật khẩu mạnh nhất, và mật khẩu bạn đặt không mạnh thì bạn sẽ thường xuyên gặp lỗi.
1 2 3 4 5 6 7 |
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 |
Tiếp theo, bạn sẽ được yêu cầu gửi và xác nhận mật khẩu root:
Đối với những câu hỏi còn lại, bạn nên nhấn Y và ENTER để xoá người dùng ẩn danh và cơ sở dữ liệu thử nghiệm.
Lưu ý: Hệ điều hành Ubuntu chạy MySQL 5.7 (hoặc mới hơn), người dùng root MySQL được xác thực bằng cách sử dụng plugin auth_socket chứ không phải bằng mật khẩu. Tuy có nhiều ưu điểm nhưng phương pháp xác thực này đôi lúc sẽ gây ra rắc rối khi bạn cần cho phép một chương trình bên ngoài (ví dụ như phpMyAdmin).
Nếu bạn sử dụng plugin auth_socket phù hợp với quy trình làm việc của bạn thì bạn hãy chuyển sang Bước 3. Tuy nhiên, nếu bạn muốn sử dụng mật khẩu để kết nối với MySQL với quyền root. Bạn cần chuyển phương thức xác thực từ auth_socket sang mysql_native_password. Để làm được điều này, mở MySQL bằng câu lệnh sau:
1 |
sudo mysql |
Kế tiếp, bạn hãy kiểm tra phương thức xác thực của mỗi người dùng bằng lệnh sau:
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |
Kết quả:
1 2 3 4 5 6 7 8 9 |
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec) |
Ở ví dụ này, người dùng root được xác thực bằng plugin auth_socket. Để cấu hình mật khẩu root, hãy chuyển lệnh ALTER USER. Hãy đảm bảo bạn chọn mật khẩu mạnh:
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; |
Sau đó chạy FLUSH PRIVILEGES để báo cho máy chủ tải lại:
1 |
FLUSH PRIVILEGES; |
Kiểm tra lại phương thức xác thực được sử dụng bởi mỗi người dùng một lần nữa để xác nhận rằng root không còn sử dụng plugin auth_socket để xác thực.
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |
Kết quả:
1 2 3 4 5 6 7 8 9 |
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec) |
Bạn có thể thấy người dùng root được xác thực bằng mật khẩu. Khi bạn xác nhận xong bạn có thể thoát khỏi MySQL.
1 |
exit |
Lưu ý: sau khi cấu hình người dùng root MySQL, bạn không thể truy cập MySQL bằng lệnh sudo mysql .Thay vào đó bạn phải sử dụng lệnh sau: mysql -u root -p.
Tại thời điểm này, hệ thống cơ sở dữ liệu của bạn đã được cài đặt và thiết lập và bạn có thể chuyển sang cài đặt PHP.
Bước 3: Cài đặt PHP và cấu hình Nginx để sử dụng bộ xử lý PHP
Bạn đã cài đặt Nginx để phục vụ trang của bạn và MySQL để lưu trữ và quản lý dữ liệu của bạn. Và bước này bạn cài PHP để tạo ra nội dung động.
Vì Nginx không chứa xử lý PHP gốc như một số máy chủ web khác, bạn sẽ cần cài đặt php-fpm, viết tắt của “trình quản lý quy trình fastCGI”. Chúng ta sẽ yêu cầu Nginx chuyển các yêu cầu PHP cho phần mềm này để xử lý.
Lưu ý: Tuỳ vào nhà cung cấp dịch vụ đám mây, bạn có thể cần thêm Ubuntu’s universe repository, bao gồm phần mềm miễn phí và mã nguồn mở được duy trì bởi cộng đồng Ubuntu trước khi cài đặt php-fpm. Bạn có thể làm điều này bằng cách gõ:
1 <em>sudo add-apt-repository universe</em>
Cài đặt mô-đun php-fpm cùng với trình trợ giúp bổ sung, php-mysql, sẽ cho phép PHP giao tiếp với cơ sở dữ liệu của bạn. Để thực hiện, bạn gõ câu lệnh sau:
1 |
sudo apt install php-fpm php-mysql |
Bây giờ bạn đã cài đặt tất cả các thành phần của ngăn xếp LEMP. Nhưng bạn cần thực hiện một vài thay đổi cấu hình để yêu cầu Nginx sử dụng bổ xử lý PHP cho nội dung động.
Điều này được thực hiện ở khối máy chủ (khối máy chủ ảo tương tự như Apache). Hãy mở cấu hình block /etc/nginx/sites-available/, ở ví dụ này, khối máy chủ được đặt tên tenmien.com mặc dù bạn có thể đặt bất kỳ tên gì bạn muốn.
1 |
sudo nano /etc/nginx/sites-available/tenmien.com |
Bằng cách chỉnh sửa tệp cấu hình khối máy chủ mới, thay vì chỉnh sửa tệp mặc định, bạn có thể dễ dàng khôi phục cấu hình mặc định nếu cần.
Thêm nội dung sau, lưu ý bạn cần thay đổi tên cấu hình khối máy chủ mới của bạn:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name tenmien.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
Sau đó lưu và đóng file lại. Cho phép khối máy chủ mới của bạn bằng cách tạo liên kết tượng trưng từ tệp khối cấu hình máy chủ mới của bạn:
1 |
sudo ln -s /etc/nginx/sites-available/tenmien.com /etc/nginx/sites-enabled/ |
Sau đó, huỷ liên kết tệp cấu hình mặc định:
1 |
sudo unlink /etc/nginx/sites-enabled/default |
Lưu ý: Nếu bạn cần khôi phục cấu hình mặc định, bạn có thể làm như vậy bằng cách tạo lại liên kết tượng trưng, như sau:
1 <em>sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/</em>
Kiểm tra tệp cấu hình mới của bạn để tìm lỗi cú pháp bằng cách nhập:
1 |
sudo nginx -t |
Nếu có lỗi, bạn hãy kiểm tra lại những bước thực hiện ở trên.
Nếu không có lỗi, hãy thực hiện tải lại Nginx bằng cú pháp sau:
1 |
sudo systemctl reload nginx |
Đến đây, việc cài đặt cấu hình ngăn xếp LEMP trên Ubuntu 18.04 đã xong. Tuy nhiên, bạn cần phải đảm bảo tất cả các thành phần được giao tiếp với nhau.
Bước 4: Tạo file PHP để kiểm tra cấu hình
Để làm được điều này, bạn cần sử dụng trình soạn thảo để tạo một file PHP gọi là info.php trong thư mục root của bạn:
1 |
sudo nano /var/www/html/info.php |
Nhập đoạn code sau vào tập tin mới. Đây là mã PHP sẽ trả về thông tin máy chủ của bạn.
1 2 |
<?php phpinfo(); |
Khi bạn thực hiện xong, hãy lưu và đóng file lại.
Bây giờ, trên trình duyệt bạn truy cập vào file info.php bằng tên miền hoặc địa chỉ IP máy chủ của bạn.
1 |
http://ten-mien-may-chu-hoac-ip.com/info.php |
Bạn sẽ thấy một trang web được tạo bởi PHP với thông tin về máy chủ của bạn:
Bạn sẽ nhìn một trang giống như trên, nếu bạn thiết lập cấu hình Nginx và PHP thành công.
Sau khi xác minh việc cài đặt ngăn xếp LEMP thành công, bạn hãy xoá file info.php.
Để thực hiện, bạn hãy thực hiện theo cú pháp sau:
1 |
sudo rm /var/www/html/info.php |
Tới đây, bạn đã thực hiện cài đặt ngăn xếp LEMP thành công trên máy chủ Ubuntu 18.04.
Kết luận
Ngăn xếp LEMP là một nền tảng mạnh mẽ cho phép bạn thiết lập và phục vụ gần như bất kỳ trang web hoặc ứng dụng nào từ máy chủ của bạn.
Bước tiếp theo bạn có thể thực hiện là bảo mật trang web bằng Let’s Encrypt miễn phí hoặc có phí. Let’s Encrypt cung cấp chứng chỉ TLS/SSL miễn phí, cho phép phục vụ nội dung thông qua HTTPS. Bạn có thể xem thêm bài viết Hướng dẫn bảo mật Nginx với Let’s Encrypt trên Ubuntu 18.04.
Đoạn: “Nhập đoạn code sau vào tập tin mới. Đây là mã PHP sẽ trả về thông tin máy chủ của bạn.”
Mã code php thiếu mất ?> ad bổ sung nhé