NỘI DUNG
Yêu cầu:
- Máy chủ Ubuntu 22.04
- IP public
- Domain/subdomain đã trỏ về IP public để cài đặt SSL
Thành phần được cài đặt trong bài viết này
- NGINX
- MariaDB
- PHP và các Module
- PHP Pools (nâng cao)
- phpMyAdmin (nâng cao)
- CertBot (nâng cao)
- WP-CLI (nâng cao)
- Redis Cache (nâng cao)
Các bước cài LEMP Stack trên Ubuntu 22.04
Bước 1: SSH vào máy chủ VPS
Đầu tiên bạn hãy truy cập vào máy chủ bằng giao thức SSH. Nếu bạn chưa biết cách SSH bạn hãy tham khảo bài viết bên dưới.
Hướng dẫn đăng nhập vào VPS Linux với giao thức SSH.
Bước 2: Cập nhật hệ thống
apt update && apt upgrade
Bước 3: Cài đặt NGINX webserver
Thường NGINX mình sẽ combine, tuy nhiên ở bài này mình sẽ cài từ apt insall. Do combine sẽ mất khá nhiều thời gian
apt install nginx
Sau khi cài đặt xong NGINX bạn hãy khởi động và kích hoạt dịch vụ lên
systemctl enable nginx
systemctl start nginx
systemctl restart nginx
systemctl status nginx
Thông báo xuất hiện
root@ubuntu-2204:~# systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-05-18 09:05:02 +07; 4h 48min ago Docs: man:nginx(8) Main PID: 27468 (nginx) Tasks: 2 (limit: 1034) Memory: 4.7M CPU: 454ms CGroup: /system.slice/nginx.service
Ngay bây giờ bạn hãy truy cập IP trên trình duyệt. Nếu hiện như ảnh bên dưới là đã cài NGINX thành công. Trường hợp nếu hệ thống bạn có trang bị Firewall. Bạn hãy mở port Firewall để dịch vụ lắng nghe.
- Đối với iptables
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
- Đối với UFW
ufw allow http
ufw allow https
Bước 4: Cài đặt cơ sở dữ liệu MariaDB
Mình sẽ sử dụng MariaDB làm máy chủ cơ sở dữ liệu. Bạn hãy cài đặt với lệnh sau.
apt install mysql-server
Sau khi cài đặt xong MariaDB xong, dịch vụ sẽ hoạt động. Và bạn có thể quản lý dịch vụ bằng các lệnh sau.
systemctl enable mariadb
systemctl restart mariadb
systemctl status mariadb
Thông báo xuất hiện
root@ubuntu-2204:~# systemctl status mariadb ● mariadb.service - MariaDB 10.6.7 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-05-16 13:10:48 +07; 2 days ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 17087 (mariadbd)
Cấu hình bảo mật MariaDB
mysql_secure_installation
- Tạo file cấu hình đăng nhập mysql (không nhất thiết)
vi /etc/.my.cnf
Sau đó thêm vào nội dung này vào
[client]
password="passwd-root-mysql"
user=root
[mysqld]
Bước 5: Cài đặt PHP
Trong tập lệnh này mình sẽ chọn cài PHP 8.1 và các extension đi kèm.
apt install php8.1-fpm php8.1 php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-intl php8.1-bcmath unzip -y
Bước 6: Thiết lập PHP Pools
Trong bài viết này mình sẽ tạo Pools tương ứng với wesbite và user. Nếu bạn có nhiều hơn 1 website thì bạn hãy tạo thêm các pool và user tương ứng.
- Xoá file mặc định
rm -rf /etc/nginx/sites-enabled/default
- Tạo USER cho mỗi website
Mỗi trang web cần chạy với tư cách người dùng khác nhau vì mục đích bảo mật và độc lập. Vì vậy bạn hãy tạo các tài khoản người dùng và chỉ định người dùng www-data
cho các nhóm tương ứng.
Điều này cho phép máy chủ web tương tác với người dùng và ngược lại. Không cấp cho người dùng khác nhau những đặc quyền đăng nhập hoặc liên kết bất kỳ thông tin nào. Để tạo người dùng, hãy chạy lệnh sau
useradd website1
usermod -a -G website1 www-data
- Chỉ định quyền cho thư mục
Tiếp theo bạn hãy tạo thư mục cho web riêng biệt và gán quyền như sau
Lưu ý: Nếu bạn muốn thêm website hãy tạo user và thư mục tương ứng là được.
Các quyền của Unix là 770. Mỗi người dùng và nhóm liên kết của người dùng có đầy đủ quyền (7) trên thư mục. Cài đặt này hạn chế người dùng website1
mkdir -p /home/website1
chown -R website1:website1 /home/website1
chmod 770 /home/website1
- PHP-FPM Pools
Bạn hãy copy pools php mặc định ra ra sửa lại như sau
cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/fpm-website1.conf
- Xoá bỏ pool cũ đi
rm -rf /etc/php/8.1/fpm/pool.d/www.conf
- Cấu hình Pools cho website 1
Mỗi groups sẽ có user liên kết với Unix socket. Vì vậy bạn cần mở từng file và sửa lại tương ứng như sau.
vi /etc/php/8.1/fpm/pool.d/fpm-website1.conf
Thay đổi các dòng sau:
- Thay đổi dòng trên cùng, bên trong dấu ngoặc từ
[www]
sang[website1]
cho pool 1 - Thay đổi dòng
user = www-data
thànhuser = website
1 - Thay đổi dòng
group = www-data
thànhgroup = website1
- Thay đổi dòng
listen = /run/php/php8.1-fpm.sock
thành/run/php/php8.1-fpm-website1.sock
Sau khi hoàn tất bạn hãy khởi động lại php-fpm bằng lệnh sau
systemctl restart php8.1-fpm
Bước 7: Cài đặt phpMyAdmin
phpMyAdmin là một ứng dụng dùng để quản lý cơ sở dữ liệu dưới dạng giao diện. Giúp bạn quản lý Database trực quan hơn. Từ đó dễ dàng kiểm soát và quản lý. Để cài đặt bạn hãy thực hiện như sau
- Cập nhật hệ thống và cài phpMyAdmin bằng lệnh sau
apt install phpmyadmin -y
Một hộp thoại xuất hiện hỏi bạn chọn webserver để cài. Nếu webserver bạn không có ở đây, bạn không tick và nhấn Tab
để di chuyển xuống chữ OK
để cài.
Một hộp thoại xuất hiện, hộp thoại này sẽ tạo một một người dùng với tên phpmyadmin
và đặt mật khẩu cho người dùng này. Bạn chọn OK
Sau đó đặt mật khẩu cho người dùng.
Sau khi hoàn tất, một cơ sở dữ liệu mới có tên là phpmyadmin được tạo và người dùng cơ sở dữ liệu phpmyadmin có các đặc quyền cần thiết để quản lý cơ sở dữ liệu này. Bạn có thể đăng nhập vào MariaDB và kiểm tra những đặc quyền mà người dùng phpmyadmin đã được cấp.
mysql -u root
show grants for phpmyadmin@localhost;
- Tạo Nginx Server Block cho phpMyAdmin
Để truy cập phpmyadmin từ giao diện bạn cần tạo một file cấu hình như sau.
vi /etc/nginx/conf.d/phpmyadmin.conf
Sau đó thêm cấu hình bên dưới vào file. Và hãy thay pma.vpscanban.com
bằng server_name của bạn.
server { listen 80; listen [::]:80; server_name pma.vpscanban.com; root /usr/share/phpmyadmin/; index index.php index.html index.htm; access_log /var/log/nginx/phpmyadmin_access.log; error_log /var/log/nginx/phpmyadmin_error.log; location / { try_files $uri $uri/ /index.php; } location ~ ^/(doc|sql|setup)/ { deny all; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /\.ht { deny all; } }
Thư mục phpMyAdmin nằm tại /usr/share/phpmyadmin/
. Sau khi lưu xong bạn kiểm tra lại file cấu hình nginx xem có lỗi không bằng lệnh nginx -t
Bước 8: Cài đặt CertBot
Certbot là một ứng dụng Let’s Encrypt phổ biến nhất và có trong hầu hết các bản phân phối Linux chính, bao gồm khả năng cấu hình tự động thuận tiện cho Apache và Nginx. Sau khi cài đặt, tìm nạp chứng chỉ và cập nhật cấu hình Apache/Nginx của bạn.
Để cài đặt bạn thực hiện lệnh sau
apt install certbot python3-certbot-nginx
Python3-certbot-nginx là plugin Nginx cho Certbot. Bây giờ hãy chạy lệnh sau để lấy và cài đặt chứng chỉ TLS.
certbot --nginx --agree-tos --redirect --hsts --staple-ocsp -d example.com --email you@example.com
Chú thích:
- Nginx: Sử dụng trình xác thực và trình cài đặt Nginx
- Agree-tos: Đồng ý với các điều khoản dịch vụ của Let’s Encrypt
- Redirect: Thực thi HTTPS bằng cách chuyển hướng 301.
- Hsts: Thêm tiêu đề Nghiêm ngặt-Truyền tải-Bảo mật vào mọi phản hồi HTTP.
- Staple-ocsp: Bật Ghim OCSP.
- Must-staple: Thêm phần mở rộng OCSP Must Staple vào chứng chỉ.
- -d được theo sau bởi một danh sách các tên miền, được phân tách bằng dấu phẩy. Bạn có thể thêm tối đa 100 tên miền.
- Email: Email được sử dụng để đăng ký và liên hệ khôi phục.
Bước 9: Cài đặt WP-CLI
WP-CLI là một tính năng được ra đời và phát triển từ những năm 2011 , với WP-CLI bạn có thể dễ dàng thao tác quản lý website WordPress của mình một cách đơn giản thông qua giao diện dòng lệnh (Command). Với cách thức thông thường , khi các bạn cần cài đặt Plugins, Themes, hay chỉnh sửa liên quan đến WordPress các bạn cần phải truy cập vào trình quản trị WordPress và thực hiện các thao tác bằng cách click chuột.
Để cài đặt bạn hãy nhập các lệnh như sau.
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
Bước 10: Cài đặt Redis Cache
Redis là phần mềm một mã nguồn mở được dùng để lưu trữ dữ liệu có cấu trúc, có thể sử dụng như một database, bộ nhớ cache hay một message broker. Nó là hệ thống lưu trữ dữ liệu với dạng KEY-VALUE rất mạnh mẽ và phổ biến hiện nay. Redis nổi bật bởi nó hỗ trợ nhiều cấu trúc dữ liệu cơ bản như: hash, list, set, sorted set, string. Tất cả dữ liệu được ghi lại và lưu trên RAM, do đó tốc độ đọc ghi dữ liệu sẽ rất nhanh.
- Cài đặt Redis Server
apt install redis-server -y
- Cấu hình Redis
Bạn hãy mở file redis.conf, tìm các dòng dong và sửa lại.
vi /etc/redis/redis.conf
Nếu RAM bạn nhiều và bạn muốn tăng cho Redis bạn hãy tăng ở giá trị maxmemory
maxmemory 256mb
maxmemory-policy allkeys-lru
- Cài đặt Redis PHP Extension
apt install php-redis
Các bước cài đặt WordPress trên LEMP Stack Ubuntu 22.04
Bước 1: Tạo Database
Bạn hãy truy cập vào mysql và tạo database mới cho website.
mysql -u root -p
CREATE DATABASE website1;
CREATE USER 'user_website1'@'localhost' IDENTIFIED BY 'my-passswd';
GRANT ALL PRIVILEGES ON website1.* TO 'user_website1'@'localhost';
Bước 2: Tạo file vhost NGINX domain
vi /etc/nginx/sites-available/website1.conf
Lưu ý: Thay server_name vpscanban;
bằng server_name của bạn
server { server_name vpscanban.com; access_log /var/log/nginx/website1.access.log; error_log /var/log/nginx/website1.error.log; root /home/website1; index index.php; try_files $uri $uri/ /index.php?$query_string; location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm-website1.sock; include snippets/fastcgi-php.conf; } }
Bước 3: Tải core mã nguồn WordPress và cài đặt
Bạn hãy di chuyển vào thư mục sau đó tải về mã nguồn từ trang chủ. Mình sẽ chủ thích từng lệnh sau.
cd /home/website1
wget https://wordpress.org/latest.zip
unzip latest.zip
mv /home/website1/wordpress/* /home/website1
chown -R website1:website1 /home/website1
Bước 4: Cài đặt chứng chỉ SSL cho website
Lưu ý: Thay vpscanban.com
bằng tên miền của bạn
certbot --nginx --agree-tos --redirect --hsts --staple-ocsp -d vpscanban.com --email you@vpscanban.com
Bước 5: Cài đặt Redis Cache cho website WordPress
Để cài đặt redis trên wordpress, bạn hãy cài đặt một Pluginc ó tên là Redis Object Cache. Sau đó mở file wp-config.php
và thêm vào đoạn sau.
define('WP_CACHE_KEY_SALT', 'vpscanban.com');
Tiếp đến bạn vào admin WordPPress, Settings => Redis và kích hoạt lên.
Như vậy mình đã hoàn tất bài Hướng dẫn cài LEMP Stack trên Ubuntu 22.04. Hy vọng bài viết trên sẽ giúp các bạn cài đặt một máy chủ web riêng thành công.
Ở bài viết tiếp theo, mình sẽ hướng dẫn bạn thiết lập NGINX FastCGI cache trên WordPress để tối ưu hiệu xuất cho website. Rất mong được sử ủng hộ của các bạn.
Chúc bạn thực hiện thành công