Site icon Cung cấp dịch vụ Cloud VPS, Server, Hosting Việt Nam & Thế giới

Hướng Dẫn Cài Đặt LEMP Stack (Linux, Nginx, MySQL, PHP) Trên Ubuntu 18.04 Chi Tiết

Hướng Dẫn Cài Đặt LEMP Stack (Linux, Nginx, MySQL, PHP) Trên Ubuntu 18.04 Chi Tiết

LEMP stack là một bộ công cụ phần mềm mạnh mẽ và phổ biến, được sử dụng rộng rãi trong việc triển khai và vận hành các trang web động và ứng dụng web. LEMP là viết tắt của các thành phần cơ bản cấu thành nên hệ thống này: Linux (hệ điều hành), Nginx (máy chủ web, phát âm là “Engine-X”), MySQL (cơ sở dữ liệu) và PHP (ngôn ngữ lập trình dùng để xử lý các yêu cầu động từ người dùng).

Hệ thống LEMP cung cấp một nền tảng ổn định và hiệu quả cho các ứng dụng web, nhờ vào việc tối ưu hóa khả năng phục vụ các trang web với lưu lượng truy cập cao và yêu cầu tài nguyên thấp hơn so với một số giải pháp khác. Nginx, với khả năng xử lý hàng nghìn kết nối đồng thời, làm cho LEMP trở thành lựa chọn lý tưởng cho các trang web cần hiệu suất và tính sẵn sàng cao. MySQL cung cấp một cơ sở dữ liệu mạnh mẽ và dễ sử dụng để lưu trữ dữ liệu, trong khi PHP đảm bảo xử lý hiệu quả các yêu cầu động.

Để triển khai LEMP Stack hiệu quả, việc chọn VPS server chất lượng là yếu tố then chốt. Một máy chủ VPS mạnh mẽ đảm bảo hiệu suất ổn định cho Nginx, MySQL và PHP. Khám phá các giải pháp VPS server tối ưu tại DataOnline của chúng tôi để bắt đầu dự án web của bạn ngay hôm nay!

Chúng ta sẽ cùng nhau tìm hiểu cách cài đặt và cấu hình LEMP stack trên một máy chủ Ubuntu 18.04. Hệ điều hành Ubuntu đã được chuẩn bị sẵn, và chúng ta sẽ tiếp tục cài đặt các thành phần cần thiết như Nginx, MySQL và PHP, từ đó xây dựng một môi trường web mạnh mẽ và sẵn sàng để triển khai ứng dụng. Hướng dẫn này sẽ cung cấp các bước chi tiết giúp bạn dễ dàng cấu hình và tối ưu hóa LEMP stack trên hệ thống của mình.

Yêu Cầu Ban Đầu

Trước khi tiến hành theo hướng dẫn này, bạn cần có một tài khoản người dùng không phải root trên máy chủ với quyền sudo. Hãy thiết lập tài khoản này theo hướng dẫn cài đặt ban đầu của máy chủ cho Ubuntu 18.04.

Khi bạn đã có tài khoản người dùng, bạn đã sẵn sàng thực hiện các bước được liệt kê trong hướng dẫn dưới đây.

Bước 1 – Cài đặt máy chủ Web Nginx

Để hiển thị các trang web cho khách truy cập, bạn sẽ sử dụng Nginx, một máy chủ web hiện đại và hiệu quả.

Tất cả phần mềm được sử dụng trong quy trình này sẽ được lấy từ các kho lưu trữ gói mặc định của Ubuntu. Điều này có nghĩa là bạn sẽ sử dụng bộ công cụ quản lý gói apt để thực hiện các cài đặt cần thiết.

Vì đây là lần đầu tiên bạn sử dụng apt trong phiên làm việc này, hãy bắt đầu bằng cách cập nhật chỉ mục gói của máy chủ:

sudo apt update

Tiếp theo, cài đặt máy chủ:

sudo apt install nginx

Trên Ubuntu 18.04, Nginx được cấu hình để tự động chạy ngay sau khi cài đặt.

Nếu bạn đang sử dụng tường lửa ufw như đã được mô tả trong hướng dẫn cài đặt ban đầu, bạn sẽ cần cho phép các kết nối đến Nginx. Nginx đã tự đăng ký với ufw ngay khi cài đặt, nên quy trình này khá đơn giản.

Bạn nên kích hoạt cấu hình tường lửa với mức hạn chế nhất mà vẫn cho phép lưu lượng truy cập cần thiết. Vì trong hướng dẫn này bạn chưa cấu hình SSL cho máy chủ, bạn chỉ cần cho phép lưu lượng truy cập qua cổng 80.

Kích hoạt bằng cách nhập lệnh sau:

sudo ufw allow 'Nginx HTTP'

Bạn có thể kiểm tra thay đổi bằng cách xem trạng thái:

sudo ufw status

Lệnh trên sẽ hiển thị kết quả cho biết lưu lượng HTTP đã được cho phép:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Với quy tắc tường lửa mới đã được thêm vào, bạn có thể kiểm tra xem máy chủ có đang hoạt động hay không bằng cách truy cập tên miền hoặc địa chỉ IP công khai của máy chủ trong trình duyệt web.

Nếu bạn không có tên miền trỏ về máy chủ và không biết địa chỉ IP công khai của máy chủ, bạn có thể tìm bằng cách chạy lệnh sau:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Lệnh này sẽ in ra một số địa chỉ IP. Bạn có thể thử từng địa chỉ trong trình duyệt của mình.

Ngoài ra, bạn cũng có thể kiểm tra địa chỉ IP có thể truy cập từ các vị trí khác trên internet bằng cách sử dụng:

curl -4 icanhazip.com

Nhập địa chỉ nhận được vào trình duyệt, và nó sẽ dẫn bạn đến trang mặc định của Nginx:

http://server_domain_or_IP

Nếu bạn nhận được trang web với nội dung “Welcome to nginx”, 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

Giờ đây, khi đã có máy chủ web, bạn cần cài đặt MySQL (một hệ quản trị cơ sở dữ liệu) để lưu trữ và quản lý dữ liệu cho website của bạn.

Cài đặt MySQL bằng cách nhập lệnh sau:

sudo apt install mysql-server

Phần mềm MySQL đã đượ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 đi kèm với một script hỏi bạn có muốn điều chỉnh một số thiết lập mặc định không an toàn hay không. Khởi chạy script bằng lệnh sau:

sudo mysql_secure_installation

Script này sẽ hỏi bạn có muốn cấu hình VALIDATE PASSWORD PLUGIN hay không.

Chú ý: Việc kích hoạt tính năng này tùy thuộc vào đánh giá của bạn. Nếu được bật, các mật khẩu không đáp ứng tiêu chí sẽ bị MySQL từ chối với thông báo lỗi. Điều này có thể gây rắc rối nếu bạn sử dụng mật khẩu yếu cùng với phần mềm tự động cấu hình thông tin đăng nhập MySQL, chẳng hạn như các gói Ubuntu cho phpMyAdmin. Bạn có thể giữ nguyên việc không bật xác thực, nhưng bạn luôn nên sử dụng mật khẩu mạnh và độc nhất cho các thông tin đăng nhập cơ sở dữ liệu.

Trả lời Y cho có, hoặc nhấn phím khác để bỏ qua và tiếp tục mà không kích hoạt.

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 tính năng xác thực, script cũng sẽ yêu cầu bạn chọn mức độ xác thực mật khẩu. Hãy nhớ rằng nếu bạn chọn mức 2 – mức mạnh nhất – bạn sẽ gặp lỗi khi đặt bất kỳ mật khẩu nào không chứa số, chữ viết hoa và viết thường, ký tự đặc biệt, hoặc dựa trên các từ trong từ điển phổ biến.

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 đặt và xác nhận mật khẩu root:

Please set the password for root here.

New password:

Re-enter new password:

Đối với các câu hỏi tiếp theo, hãy nhấn Y và nhấn ENTER. Điều này sẽ loại bỏ một số người dùng ẩn danh và cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa, và áp dụng ngay các thay đổi cấu hình cho MySQL.

Lưu ý rằng trên hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản sau), người dùng root của MySQL mặc định được cấu hình để xác thực bằng plugin auth_socket thay vì mật khẩu. Điều này giúp tăng cường bảo mật và tính tiện dụng, nhưng cũng có thể gây phức tạp khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin) truy cập vào tài khoản người dùng.

Nếu bạn thấy việc sử dụng plugin auth_socket phù hợp với quy trình làm việc của mình, bạn có thể chuyển sang Bước 3. Tuy nhiên, nếu bạn muốn sử dụng mật khẩu khi kết nối MySQL với tư cách root, bạn cần chuyển phương thức xác thực từ auth_socket sang mysql_native_password. Để làm điều này, mở prompt MySQL từ terminal:

sudo mysql

Tiếp theo, kiểm tra phương thức xác thực của từng tài khoản MySQL với lệnh:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Kết quả sẽ hiển thị như sau:

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| 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ụ trên cho thấy rằng tài khoản root đang sử dụng plugin auth_socket. Để cấu hình tài khoản root xác thực bằng mật khẩu, chạy lệnh ALTER USER sau (hãy thay ‘password’ bằng một mật khẩu mạnh mà bạn chọn):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Sau đó, chạy lệnh FLUSH PRIVILEGES để yêu cầu máy chủ nạp lại bảng quyền và áp dụng thay đổi:

FLUSH PRIVILEGES;

Kiểm tra lại phương thức xác thực của các tài khoản:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Kết quả sẽ hiển thị rằng tài khoản root giờ đây đã xác thực bằng mật khẩu:

Output
+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

Sau khi xác nhận, bạn có thể thoát khỏi shell MySQL:

exit

Lưu ý: Sau khi cấu hình tài khoản root của MySQL để xác thực bằng mật khẩu, bạn sẽ không thể truy cập MySQL bằng lệnh sudo mysql như trước nữa. Thay vào đó, bạn cần dùng:

mysql -u root -p

Sau khi nhập mật khẩu đã đặt, bạn sẽ thấy prompt của MySQL.

Lúc này, hệ thống cơ sở dữ liệu đã được thiết lập xong 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

Đến thời điểm này, bạn đã cài đặt Nginx để phục vụ các trang web và MySQL để lưu trữ, quản lý dữ liệu. Tuy nhiên, bạn vẫn chưa có thành phần nào xử lý nội dung động. Đây chính là lúc PHP phát huy vai trò.

Do Nginx không tích hợp sẵn xử lý PHP 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 “fastCGI process manager”. Sau đó, bạn sẽ cấu hình Nginx để chuyển các yêu cầu PHP tới phần mềm này xử lý.

Chú ý: Tùy thuộc vào nhà cung cấp dịch vụ đám mây của bạn, có thể bạn cần thêm kho lưu trữ universe của Ubuntu, chứa phần mềm mã nguồn mở miễn phí do cộng đồng Ubuntu duy trì, trước khi cài đặt gói php-fpm. Bạn có thể làm điều này bằng cách nhập lệnh:

sudo add-apt-repository universe

Tiếp theo, cài đặt module php-fpm cùng với gói hỗ trợ php-mysql, cho phép PHP giao tiếp với backend cơ sở dữ liệu. Quá trình cài đặt sẽ kéo theo các tập tin lõi của PHP. Thực hiện lệnh sau:

sudo apt install php-fpm php-mysql

Dù đã cài đặt đầy đủ các thành phần của LEMP stack, bạn vẫn cần thực hiện một số thay đổi cấu hình để Nginx biết chuyển các tệp .php tới bộ xử lý PHP.

Điều này được thực hiện ở cấp độ “server block” (server block tương tự như virtual hosts của Apache). Để thực hiện, tạo một tệp cấu hình server block mới sử dụng trình soạn thảo văn bản ưa thích của bạn trong thư mục /etc/nginx/sites-available/. Trong ví dụ này, tệp cấu hình sẽ được đặt tên là your_domain (hãy thay thế bằng tên miền của bạn):

sudo nano /etc/nginx/sites-available/your_domain

Bằng cách tạo tệp cấu hình server block 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 (được lấy và sửa đổi nhẹ từ tệp cấu hình server block mặc định) vào tệp cấu hình mới:

/etc/nginx/sites-available/your_domain
server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name your_domain;

        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;
        }
}

Giải thích các chỉ thị và khối location:

Sau khi thêm nội dung trên, lưu và đóng tệp. Nếu bạn dùng nano, nhấn CTRL + X sau đó nhấn YENTER.

Kích hoạt server block mới bằng cách tạo một symbolic link từ tệp cấu hình mới (trong thư mục /etc/nginx/sites-available/) đến thư mục /etc/nginx/sites-enabled/:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Sau đó, loại bỏ liên kết của tệp cấu hình mặc định khỏi thư mục /sites-enabled/:

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, hãy tạo lại symbolic link bằng lệnh:

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

Kiểm tra tệp cấu hình mới có lỗi cú pháp không:

sudo nginx -t

Nếu có lỗi, hãy quay lại và kiểm tra lại tệp trước khi tiếp tục.

Khi sẵn sàng, tải lại Nginx để áp dụng các thay đổi:

sudo systemctl reload nginx

Khi đó, việc cài đặt và cấu hình LEMP stack của bạn đã hoàn tất. Tuy nhiên, bạn nên kiểm tra xem tất cả các thành phần có thể giao tiếp với nhau hay không.

Bước 4 – Tạo tệp PHP để kiểm tra cấu hình

LEMP stack của bạn giờ đây đã được cài đặt hoàn chỉnh. Bạn có thể kiểm tra để xác nhận rằng Nginx có thể chuyển các tệp .php chính xác tới bộ xử lý PHP.

Để làm điều này, sử dụng trình soạn thảo văn bản ưa thích để tạo tệp PHP kiểm tra tên là info.php trong thư mục gốc của website:

sudo nano /var/www/html/info.php

Nhập các dòng sau vào tệp mới. Đây là mã PHP hợp lệ, sẽ trả về thông tin về máy chủ của bạn:

/var/www/html/info.php
<?php
phpinfo();

Sau khi hoàn tất, lưu và đóng tệp.

Bây giờ, bạn có thể truy cập trang này trong trình duyệt web bằng cách truy cập tên miền hoặc địa chỉ IP công khai của máy chủ theo sau là /info.php:

http://your_server_domain_or_IP/info.php

Trình duyệt của bạn sẽ hiển thị một trang web được tạo bởi PHP chứa thông tin về máy chủ.

Nếu trang hiển thị như mô tả, bạn đã cài đặt thành công bộ xử lý PHP cho Nginx.

Sau khi xác nhận rằng Nginx đã hiển thị trang đúng, bạn nên xóa tệp kiểm tra này vì nó có thể cung cấp thông tin nhạy cảm cho người dùng không được phép. Bạn có thể tạo lại tệp này sau nếu cần.

Để xóa tệp, nhập lệnh:

sudo rm /var/www/html/info.php

Với đó, bạn đã có một LEMP stack được cấu hình đầy đủ và hoạt động trên máy chủ Ubuntu 18.04 của bạn.

Kết luận

LEMP stack là một nền tảng mạnh mẽ cho phép bạn thiết lập và phục vụ hầu hết các website hoặc ứng dụng từ máy chủ của mình.

Từ đây, có rất nhiều bước tiếp theo bạn có thể thực hiện. Ví dụ, bạn nên đảm bảo rằng kết nối tới máy chủ của bạn được bảo mật. Để làm được điều này, bạn có thể bảo vệ cài đặt Nginx bằng Let’s Encrypt. Theo hướng dẫn này, bạn sẽ nhận được chứng chỉ TLS/SSL miễn phí cho máy chủ, cho phép nó phục vụ nội dung qua HTTPS.

Sau khi cài đặt Nginx và MySQL, bạn cần một VPS đáng tin cậy để chạy LEMP Stack mượt mà. Giá thuê VPS hiện nay rất cạnh tranh, phù hợp với mọi nhu cầu. Tìm hiểu các gói giá thuê VPS hấp dẫn trong DataOnline của chúng tôi để tối ưu chi phí cho dự án của bạn!

Exit mobile version