LEMP là một nhóm phần mềm kết hợp với nhau được dùng để phục vụ trang web, với NGINX Server là một Web Server mã nguồn mở mạnh mẽ sử dụng ít tài nguyên hệ thống.Các hệ thống quản lý nội dung như WordPress, Joomla, Drupal và các hệ thống khác, tất cả đều chủ yếu sử dụng LAMP hoặc LEMP Stack, trong bài viết hướng dẫn cài LEMP trên Ubuntu, MZE sẽ trình bày cho bạn cách làm thế để cài đặt LEMP Stack trên Ubuntu một cách dễ dàng nhất
Bài viết này tổng hợp các thành phần trong bộ LEMP stack được đăng trên MZE, nếu bạn cần chi tiết có thể xem qua các bài viết bên dưới:
Giới thiệu LEMP Stack, LEMP Stack là gì ?
LEMP được viết tắt bởi các chữ cái đầu của các gói phần mềm, nó là một nhóm phần mềm mã nguồn mở bao gồm
- Linux: là lớp đầu tiên. Hệ điều hành này là cơ sở cho các gói phần mềm khác, có thể là Ubuntu, Centos
- Nginx: hay còn được gọi (Engine-X) được viết là Nginx là một HTTP server để xử lý các yêu cầu được gửi tới máy chủ.
- MySQL hoặc MariaDB: MySQL và MariaDB là cơ sở dữ liệu được dùng để lưu trữ tất cả thông tin trên website
- PHP-FPM: PHP đảm nhiệm xử lý các nhiệm vụ cần thiết hoặc kết nối với cơ sở dữ liệu mục đích để lấy thông tin cần thiết sau đó trả về cho Nginx trả kết quả nhận được về cho Client.
Yêu cầu trước khi cài LEMP cho Ubuntu
Trong bài viết này MZE sẽ cài các phần mềm trong LEMP theo các phiên bản
- Ubuntu 19.10
- NginX 1.16.1
- MySQL 8.0.20 hoặc MariaDB 10.4 (Stable)
- PHP 7.3
Điều kiện tiên quyết trước khi thực hiện bài viết này
- Chuẩn bị một Ubuntu Server mới
- Tài khoản người dùng trên máy chủ, có đặc quyền Sudo hoặc Root
Hướng Dẫn Cài LEMP Trên Ubuntu 19
Lưu ý trong bài viết này, MZE sử dụng tài khoản root, nếu bạn sử dụng tài khoản người dùng sẽ cần thêm Sudo trước câu lệnh
Update gói cài đặt trên Ubuntu server
Đầu tiên để cài đặt, chúng ta nên cập nhật thông tin các gói ứng dụng có sẵn của Ubuntu lên phiên bản mới nhất qua dòng lệnh
apt update
Sau khi đã cập nhật thông tin các gói phần mềm, chúng ta sẽ bắt đầu tiến hành các bước cài đặt
A. Cài Nginx HTTP Server
Để cài đặt Nginx Server từ Ubuntu Server bằng lệnh sau, thêm “-y” để bỏ qua dòng nhắc tiếp tục
apt install nginx -y
Output :
[email protected]:~# apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip libnginx-mod-http-image-filter
libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx-common nginx-core
Suggested packages:
libgd-tools fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip libnginx-mod-http-image-filter
libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx nginx-common nginx-core
0 upgraded, 18 newly installed, 0 to remove and 64 not upgraded.
Need to get 2441 kB of archives.
After this operation, 7946 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Nhấn “Y” để cài đặt
Sau khi quá trình cài đặt Nginx kết thúc, chúng ta sẽ khởi động NGINX, cho phép Nginx khởi động cùng hệ thống, và kiểm tra trạng thái hoạt động Nginx qua các dòng lệnh bên dưới
Khởi động Nginx
sudo systemctl start nginx
Cho phép Nginx khởi động cùng hệ thống
sudo systemctl enable nginx
Kiểm tra trạng thái Nginx hoạt động với
sudo service nginx status
hoặc
sudo systemctl status nginx

Kiểm tra trạng thái thiết lập NGINX, bạn hãy mở trình duyệt Web nhập vào địa chỉ http://your_IP
hoặc http://your_domain
, khi bạn thấy thông báo hiển thị như bên dưới thì Nginx đã hoạt động rồi đó
Trong đó:
- Your_IP : địa chỉ IP máy chủ Web
- Your_domain : tên miền của bạn
Document root mặc định của Nginx là /var/www/html

B. Cài đặt hệ quản trị Cơ sở dữ liệu
Trong bài viết này MZE sẽ hướng dẫn bạn cách để cài đặt và cấu hình cả 2 phần mềm là MySQL và MariaDB trên Ubuntu 19.10, bạn chỉ cần chọn 1 trong 2 cách để thực hiện
Cài MySQL và cấu hình trên Ubuntu quản lý cơ sở dữ liệu
Để cài MySQL, chúng ta sẽ sử dụng lệnh bên dưới, hãy thêm “-y” nếu không muốn xuất hiện dòng nhắc tiếp tục cài đặt
sudo apt install mysql-server
Output : các gói cài đặt đi kèm MySQL sẽ được liệt kê bên như bên dưới
[email protected]:~# apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libtimedate-perl
liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0
mysql-common mysql-server-8.0 mysql-server-core-8.0
Suggested packages:
libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libtimedate-perl
liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0
mysql-common mysql-server mysql-server-8.0 mysql-server-core-8.0
0 upgraded, 24 newly installed, 0 to remove and 64 not upgraded.
Need to get 30.3 MB of archives.
After this operation, 246 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Sau khi quá trình cài đặt đã hoàn tất, chúng ta sẽ phải cần cấu hình bảo mật cho MySQL hãy xem thêm bài viết tại đây
Cài MariaDB và cấu hình trên Ubuntu quản lý cơ sở dữ liệu
Xem thêm hướng dẫn cài đặt MariaDB trên Ubuntu
C. Cài đặt PHP Xử lý và các module liên quan
Chúng ta đã thực hiện các bước để cài MySQL hay MariaDB để quản lý cơ sở dữ liệu và Nginx làm Web Server, tuy nhiên vẫn chưa có thể xử lý được dữ liệu và các web động, vì vậy bước tiếp theo chúng ta sẽ đi cài PHP-FPM để xử lý vấn đề này
Để cài đặt php-fpm
(fastCGI process manager) và php-mysql
sudo apt install php-fpm php-mysql
Output : Các gói đề xuất và các gói sẽ được cài đặt đi kèm như bên dưới
[email protected]:~# apt install php-fpm
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
php-common php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline
Suggested packages:
php-pear
The following NEW packages will be installed:
php-common php-fpm php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache
php7.3-readline
0 upgraded, 8 newly installed, 0 to remove and 65 not upgraded.
Need to get 3987 kB of archives.
After this operation, 17.7 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Nhấn “Y” để tiếp tục cài đặt
Chú ý: (tùy chọn)
Tùy thuộc vào nhà cung cấp host của bạn, có thể bạn phải cần thêm kho lưu trữ (universe repository) trên Ubuntu, nó được bao gồm phần mềm miễn phí và nguồn mở được duy trì bởi cộng đồng Ubuntu, trước khi cài đặt gói php-fpm
, để thực hiện bạn hãy sử dụng lệnh
sudo add-apt-repository universe
Trong quá trình cài đặt, chúng ta có thể cài thêm một số module trợ giúp PHP, hoặc sử dụng lệnh bên dưới, hoặc loại bỏ các module (nếu không dùng)
apt install php7.3-fpm php7.3-common php7.3-zip php7.3-curl php7.3-mbstring php7.3-xml php7.3-xmlrpc php7.3-json php7.3-mysql php7.3-pdo php7.3-gd php7.3-imagick php7.3-ldap php7.3-imap php7.3-intl php7.3-cli php7.3-recode php7.3-tidy php7.3-opcache php7.3-bcmath
Hoặc có thể dùng câu lệnh rút gọn này, hãy thêm các module khác trong dấu {}
sudo apt install php7.3-{fpm,common,mbstring,xmlrpc,soap,gd,xml,intl,mysql,cli,zip,curl,bcmath,bz2} -y
Sau khi cài đặt hoàn thành, để kiểm tra phiên bản PHP đang sử dụng được cài đặt trên máy, hãy sử dụng câu lệnh
php -v
Output :
[email protected]:~# php -v
PHP 7.3.11-0ubuntu0.19.10.4 (cli) (built: Apr 8 2020 18:58:29) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.11-0ubuntu0.19.10.4, Copyright (c) 1999-2018, by Zend Technologies
File cấu hình mặc định PHP
/etc/php/7.3/fpm/php.ini
Tham khảo thêm cách cài đặt PHP 7.x trên Ubuntu 18.04, và chuyển đổi các phiên bản PHP đang sử dụng trên cùng Server
Sau khi cài đặt PHP hoàn thành là bạn đã cài đặt đủ các thành phần trong LEMP Stack, các thành phần cần thiết cho Web Server bao gồm LINUX, NGINX, MySQL/MariaDB, PHP
D. Cấu hình Nginx
1. Chỉnh sửa file cấu hình mặc định trên Nginx
Sau khi thực hiện các bước bên trên là bạn đã cài đặt tất cả các thành phần LEMP stack cần thiết, nhưng chúng ta vẫ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
Tìm file Virtual host Nginx trong thư mục /etc/nginx/sites-available
, sử dụng lệnh nano để mở file qua command
sudo nano /etc/nginx/sites-available/default
Tìm và thay đổi các trường dữ liệu trong file cấu hình default theo bên dưới
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name default_server;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Save và thoát file
Trong đó :
- Listen : Xác định cổng nào Nginx sẽ lắng nghe. Trong trường hợp này, nó sẽ lắng nghe trên cổng 80, cổng mặc định cho HTTP
- Thay đổi server_name default_server bằng tên miền
- Thêm “index.php” ngay dòng index
- Sửa đường dẫn phù hợp
- Chỉnh sửa nội dung trong location ~ \.php$
2. Cấu hình Virtual host trên Nginx ( Tùy chọn )
Điều này được thực hiện ở cấp độ khối máy chủ (các khối máy chủ tương tự như các máy chủ ảo Apache).
Để thực hiện việc này, hãy mở tệp cấu hình khối máy chủ mới trong thư mục /etc/nginx/sites-available/
. Trong ví dụ này, file cấu hình khối máy chủ mới được đặt tên là mzengineer.com.conf
, bạn cũng có thể đặt tên theo tên gì mà bạn muốn
sudo nano /etc/nginx/sites-available/mzengineer.com.conf
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name mzengineer.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Save và exit,
Để cho phép Block máy chủ mới của bạn hoạt động hãy tạo một liên kết tượng trưng từ tệp cấu hình khối máy chủ mới của bạn trong thư mục /etc/nginx/sites-available/ vào thư mục /etc /nginx/sites-enable/ qua dòng lệnh
sudo ln -s /etc/nginx/sites-available/mzengineer.com.conf /etc/nginx/sites-enabled/
Nếu bạn cần hãy hủy liên kết cấu hình mặc định bằng lệnh
sudo unlink /etc/nginx/sites-enabled/default
Lưu ý :
Nếu bạn cần sử dụng lại cấu hình mặc định, chúng ta có thể tạo lại liên kết tượng trưng qua dòng lệnh
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
3. Kiểm tra file cấu hình Nginx
Sau khi thực hiện chỉnh sửa file cấu hình Nginx, bạn cần kiểm tra lại lỗ cú pháp (nếu có) trong file cấu hình mới bằng lệnh
sudo nginx -t
Nếu hiển thị như bên dưới là thành công, file cấu hình mới không gặp lỗi khi hoạt động
[email protected]:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khi đã sẵn sàng, chúng ta sẽ cần tải lại Nginx để thực hiện các thay đổi cần thiết, để tránh gián đoạn quá trình truy cập, bạn có thể sử dụng lệnh
sudo systemctl reload nginx
Hoặc khởi động lại Nginx bằng lệnh
sudo systemctl restart nginx
E. Kiểm tra cài đặt PHP với Nginx
Tạo file info.php
, save file ở thư mục đường dẫn /var/www/html
sudo nano /var/www/html/info.php
Sau đó thêm đoạn code bên dưới vào file info.php
, xem thêm sử dụng lệnh nano để biết cách chỉnh sửa file
<?php
phpinfo( );
?>
Save và exit,
Khởi động lại php-fpm và Nginx bằng lệnh
sudo systemctl restart php7.3-fpm
sudo nginx -s reload
Bây giờ bạn có thể kiểm tra cài đặt Nginx và PHP thông qua file info.php
bằng trình duyệt, hãy mở trình duyệt lên, sau đó nhập http://your_IP/info.php
hoặc http://your_domain/info.php
, chúng ta 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, nếu xuất hiện như hình bên dưới thì bạn đã thiết lập PHP xử lý với Nginx thành công.

Lưu ý :
Sau khi xem các thông tin cần thiết, bạn nên xóa file info.php
để tránh sự dòm ngó từ bên ngoài, hạn chế sự xâm nhập trái phép từ các hacker nhé, sử dụng lệnh bên dưới để remove file info.php, thay đổi đường dẫn lưu source code nếu cần thiết, ở đây MZE sử dụng đường dẫn mặc định là /var/www/html
sudo rm /var/www/html/info.php
F. Cho phép LEMP bật khi khởi động
1. Kiểm tra trạng thái hoạt động Nginx, MySQL, PHP
sudo systemctl status mysql
sudo systemctl status nginx
sudo systemctl status php7.3-fpm (hãy thay phiên bản php phù hợp câu lệnh)
Khi cài đặt Nginx, MySQL, PHP-FPM mặc định sẽ khởi động cùng hệ thống khi reboot, nếu chưa được bật khởi động cùng hệ thống, bạn hãy sử dụng các lệnh bên dưới
sudo systemctl enable mysql
sudo systemctl enable nginx
sudo systemctl enable php7.3-fpm (hãy thay phiên bản php phù hợp câu lệnh)
G. Bật Firewall (Tùy chọn)
Nếu bạn sử dụng UFW (Uncomplicated Firewall) trên máy chủ của mình, hãy bật tường lửa cho phép lưu lượng truy cập web
Liệt kê các cấu hình ứng dụng trên UFW
sudo ufw app list
Output : có 3 profile có sẵn cho Nginx trên UFW
[email protected]:~# sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Trong đó:
- Nginx Full : profile này sẽ mở cả 2 port 80 và 443 trên UFW
- Nginx HTTP : profile này sẽ mở port 80
- Nginx HTTPS : profile này sẽ mở port 443
Trước khi bật tường lửa UFW, hãy đảm bảo bạn thêm quy tắc cho SSH, nếu không bạn có thể bị khóa khỏi máy chủ nếu bạn kết nối từ xa
sudo ufw allow OpenSSH
- Kiểm tra trạng thái Firewall trên Ubuntu, trường hợp chưa bật Firewall bạn sẽ nhận được thông báo
inactive
sudo ufw status
Output :
Status: active
To Action From
-- ------ ----
Nginx HTTP ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Nginx HTTP (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
2. Bật chức năng Firewall
sudo ufw enable
3. Tắt chức năng Firewall
sudo ufw disable
4. Kiểm tra các cổng được kích hoạt cho Nginx (Nginx Full profile)
sudo ufw app info "Nginx Full"
5. Cho phép traffic các cổng trên Firewall với Nginx Full profile
sudo ufw allow in "Nginx Full"
H. Phân quyền thư mục và file
Chúng ta cần phân quyền để sau này có thể cài đặt source code chạy website, thì folder đó phải được gán quyền sở hữu của user www-data
sudo chown -R www-data:www-data /var/www/html
Trong đó:
/var/www/html
: là Document root mặc định của Nginx, bạn có thể thay thế đường dẫn này cho phù hợp với vị trí lưu trữ source code
Lời kết
LEMP stack là một nền tảng mạnh mẽ cho phép bạn có thể 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.
Như vậy trong bài viết này, MZE đã hướng dẫn bạn làm thế nào để cài LEMP trên Ubuntu, và các tùy chỉnh Nginx, cấu hình PHP để sử dụng, bạn cần lưu ý vấn đề phân quyền folder của user www-data nhằm tránh các lỗi trong quá trình sử dụng.
Nếu bài viết có ích hãy Like và Share, và đừng quên đánh giá bài viết bên dưới nhé.
Nguồn MzEngineer.com