Hướng dẫn cài đặt thủ công LEMP Stack (Linux,Nginx,MariaDB,PHP) trên Ubuntu
- 21-08-2024
- Toanngo92
- 0 Comments
Mục lục
Giới thiệu khái niệm LEMP Stack
Linux: Linux là một hệ điều hành miễn phí và mã nguồn mở, ban đầu được phát triển dựa trên UNIX. Ubuntu là một trong nhiều phiên bản khác nhau của Linux, được gọi là “bản phân phối” (distributions). Một số bản phân phối phổ biến khác bao gồm Debian, Red Hat và Arch. Mỗi bản phân phối của Linux đều có thư viện phần mềm riêng, dùng để cài đặt các ứng dụng khác. Tất cả các thành phần của LEMP stack đều có sẵn trong thư viện tiêu chuẩn của Ubuntu.
Máy chủ NGINX: NGINX là một trong những máy chủ web mã nguồn mở phổ biến nhất. NGINX được phát âm là “Engine-x” (đây là lý do tại sao chữ E được sử dụng trong từ viết tắt LEMP). NGINX sử dụng kiến trúc dựa trên sự kiện (event-driven) thay vì kiến trúc dựa trên quy trình/luồng (process/thread) của Apache. NGINX nhanh hơn và hiệu quả hơn Apache, nhưng không cho phép cấu hình từng trang web riêng biệt. Nó không được triển khai rộng rãi như Apache.
MariaDB: MariaDB là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), được phát triển từ ứng dụng MySQL. Đây là một phần mềm mã nguồn mở do Quỹ MariaDB phát triển và được cung cấp miễn phí. Không giống như MySQL thuộc sở hữu của Oracle, MariaDB tuân theo triết lý mã nguồn mở một cách chặt chẽ hơn. MariaDB tương tự như MySQL và sử dụng các lệnh SQL và truy vấn giống nhau. Tuy nhiên, MariaDB có nhiều tính năng mới hơn và được coi là vượt trội hơn MySQL về hiệu suất và tính tiện dụng.
PHP: Ngôn ngữ PHP được sử dụng trong stack này để lập trình và kịch bản phía máy chủ. PHP thường được sử dụng để xây dựng các trang web vì mã PHP có thể dễ dàng nhúng vào trong các tệp HTML. Ubuntu sẽ diễn giải mã PHP bằng một bộ xử lý PHP. Người dùng có thể cài đặt và sử dụng phần mềm PHP miễn phí theo giấy phép PHP. Thay vì PHP, các nhà phát triển có thể chọn sử dụng Perl hoặc Python. Cả ba ngôn ngữ này đều hoạt động tốt với phần còn lại của LEMP stack. Tuy nhiên, hướng dẫn này chỉ tập trung vào PHP.
Hướng dẫn cài đặt LEMP Stack
Bài viết hướng dẫn này mô phỏng việc cài đặt NGINX, MariaDB, PHP trên ubuntu
Bước 1: đăng nhập máy chủ thông qua SSH:
ssh root@{IP} -p {port}
Bước 2: kiểm tra apt package và cập nhật phiên bản mới nhất:
sudo apt update && sudo apt upgrade
Bước 3: tiến hành cài đặt NGINX
sudo apt install nginx
#kiem tra version nginx sau khi cai dat thanh cong
nginx -v
# xác thực trạng thái dịch vụ nginx có đang chạy không
sudo systemctl status nginx
Sau bước này, nếu cài đặt đúng, bạn có thể truy cập được IP public của Server.
Để xem danh sách các lệnh trong nginx, có thể sử dụng lệnh:
nginx -h
Output:
nginx version: nginx/1.18.0 (Ubuntu)
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/share/nginx/)
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
-g directives : set global directives out of configuration file
Để cấu hình nginx, các bạn quan tâm tới path này: /etc/nginx/nginx.conf (đây là tệp cấu hình mặc định cảu nginx, trong này sẽ tiến hành gọi tiếp các tệp cấu hình khác)
Để kiểm tra lại cấu hình xem thành công chưa, sử dụng lệnh:
nginx -t
Bước 4: tiến hành cài đặt MariaDB
sudo apt install mariadb-server
# Kiểm tra xem cài đặt thành công chưa, nếu truy cập được vào CSDL là thành công
mariadb
show database;
exit
# hoặc có thể dùng lệnh
mysql
Bước 5: cài đặt PHP-FPM package cho NGINX
Lưu ý: không sử dụng package php, vì package này tối ưu cho apache, server chúng ta sử dụng nginx nên cài đặt php-fpm kèm php là hợp lý
# mặc định sẽ cài 7.4
sudo apt install php php-fpm
# Nếu muốn cài một phiên bản nhất định, sử dụng lệnh dưới
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php #them ppa
sudo apt install php8.2 php8.2-fpm
Bước 6: cài đặt một số extension cho PHP (tùy chọn)
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc
Đến công đoạn này, cơ bản chúng ta đã có thể bắt đầu thêm website vào Server.
Hướng dẫn thêm website PHP vào server và cấu hình NGINX, MariaDB:
Bước 1: Tạo thư mục gốc của website
sudo mkdir -p /var/www/html/example.com/public_html
Bước 2: Cấu hình tệp nginx.conf để khớp định tuyế của người dùng truy cập vào tên miền với thư mục mã nguồn tương ứng
sudo cp /etc/nginx/sites-enabled/default /etc/nginx/sites-available/example.com.conf
Cấu hình tệp example.com.conf vừa tạo:
- Xóa cấu hình máy chủ hiện có: Xóa tất cả cấu hình máy chủ hiện tại (không có dòng chú thích) cho đến dòng “Virtual Host configuration for example.com”. Thay đổi tên của dòng chú thích này để phản ánh đúng tên miền của bạn. Bỏ chú thích các dòng còn lại. Tất cả các thay đổi tiếp theo sẽ xảy ra bên trong khối mã bắt đầu bằng
server
. - Giữ nguyên cấu hình
listen
: Những dòng này cho NGINX biết phải lắng nghe các kết nối đến trên cổng 80. - Thay đổi giá trị
server_name
: Đặt giá trịserver_name
thành tên miền của bạn. Nhập tên miền với cả dạng có và không có tiền tốwww
, để khách truy cập có thể sử dụng cả hai cách. - Đặt
root
thành tên của thư mục gốc mới được tạo cho miền: Ví dụ, với example.com, thư mục gốc là/var/www/html/example.com/public_html
. - Đặt giá trị của
index
: Với hầu hết các trang web, giá trị củaindex
nên làindex.html
. Tuy nhiên, với WordPress và các trang web khác sử dụng PHP, nó phải được thay đổi thànhindex.php
. - Giữ nguyên khối
location /
: Cấu hìnhtry_files
yêu cầu NGINX kiểm tra xem tệp được yêu cầu có thực sự tồn tại trước khi xử lý yêu cầu hay không. Nếu tệp không tồn tại, NGINX sẽ trả về lỗi 404. - Thêm một khối mã cho
location ~* \.php$
: NGINX áp dụng cấu hình này cho tất cả các tệp có phần mở rộng.php
trong miền. Ký hiệu*
cho biết tên tệp PHP không phân biệt chữ hoa chữ thường. - Thay đổi tên của
fastcgi_pass
: Đặt tên củafastcgi_pass
để chỉ ra socket mà PHP sẽ lắng nghe các yêu cầu mới. Socket này được tìm thấy tạiunix:/run/php/php<release_num>-fpm.sock
, trong đórelease_num
là số phiên bản PHP. Ví dụ: nếu phiên bản PHP là 8.1,fastcgi_pass
sẽ làunix:/run/php/php8.1-fpm.sock
. Để xác định phiên bản PHP, bạn có thể sử dụng lệnhphp -v
. - Đặt chỉ thị
include
thànhsnippets/fastcgi-php.conf
: Đây là tên của tệp cấu hình xử lý việc xử lý PHP. - Thêm một khối
location
cho~ /\.ht
: Điều này cho NGINX biết không phục vụ bất kỳ tệp.htaccess
nào.
Ví dụ:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/html/example.com/public_html;
index index.html;
location / {
# cau hinh wordpress
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Adjust the PHP version if necessary
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
Để cho phép tên miền này trong cấu hình NGINX, tiến hành liên kết với thư mục sites-enabled thông qua lệnh:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Để gia tăng bảo mật, có thể unlink site mặc định (tùy chọn):
sudo unlink /etc/nginx/sites-enabled/default
Bước 3: tạo và cấu hình cơ sở dữ liệu cho website
Truy cập MARIADB:
mariadb -u root
Output:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.7-MariaDB-2ubuntu1 Ubuntu 22.04
...
MariaDB [(none)]
Tạo CSDL:
CREATE DATABASE your_db;
Tạo user mariadb sử dụng để tương tác với CSDL:
CREATE USER 'your_username' IDENTIFIED BY 'your_password';
Gán quyền làm việc với bảng cho user vừa tạo:
GRANT ALL ON your_db.* TO 'your_username';
Thoát MARIADB:
quit
Ngoài ra, các bạn có thể cài đặt thêm mysql_secure_installation (tiện ích dựng sẵn) để cấu hình bảo mật cho mysql
Xem thêm: mysql_secure_installation – MariaDB Knowledge Base
mysql_secure_installation
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] n
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Bước 4: Cài đặt certbot Let’s EnCrypt
Cài đặt Cerbot:
sudo apt update
sudo apt install certbot python3-certbot-nginx
Đảm bảo Filewall cho phép các traffic https:
sudo ufw status # optional
sudo ufw allow 'Nginx HTTPS' # optional
sudo ufw deny 'Nginx HTTP' # optional
sudo ufw allow 'Nginx Full' # optional
Đăng ký SSL cho tên miền mới với certbot
sudo certbot --nginx -d example.com -d www.example.com
Test certbot gia hạn hoạt động có ổn định không:
/usr/bin/certbot renew --dry-run
Tạo cronjob để certbot tự động gia hạn khi tên miền hết hạn:
crontab -e
0 5 * * * /usr/bin/certbot renew --quiet