NỘI DUNG
Có nhiều bạn inbox hỏi mình cách cài đặt LEMP và một số thành phần phụ khác như phpmyadmin, redis, certbot, wp-cli… Tuy nhiên hôm nay mình mới có thời gian để tổng hợp và viết lại chia sẻ đến các bạn.
Ở bài viết này mình sẽ tổng hợp tất cả những thành phần thường sử dụng nhất trên LEMP Stack. Và bên dưới là các thành phần mình sẽ cài kèm theo để sử dụng.
Các thành phần được cài đặt trong hướng dẫn
- Máy chủ Ubuntu 20.04 (Được tài trợ bởi Azdigi)
- NGINX làm webserver
- PHP-FPM pools
- MariaDB
- phpMyAdmin
- Certbot: Cài đặt SSL miễn phí
- Cài đặt WordPress
- Cài đặt WP-CLI
- Cài đặt Redis
1. Cập nhật hệ thống
sudo apt update sudo apt upgrade
2. Cài đặt NGINX
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 -y
- Sau khi cài xong NGINX bạn bật auto-start bằng lệnh sau
systemctl enable nginx
- Khởi động NGINX
systemctl start nginx
- Kiểm tra trạng thái NGINX
systemctl status nginx
Output:
root@sv:~# 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 Sat 2021-09-04 11:05:04 CEST; 1min 11s ago
Docs: man:nginx(8)
Main PID: 1695 (nginx)
Tasks: 2 (limit: 1074)
Memory: 5.1M
CGroup: /system.slice/nginx.service
├─1695 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1696 nginx: worker process
- Kiểm tra phiên bản NGINX
root@sv:~# nginx -v nginx version: nginx/1.18.0 (Ubuntu)
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.
- iptables
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
- UFW firewall
ufw allow http
3. Cài đặt MariaDB Database Server
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 mariadb-server mariadb-client -y
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.
- Khởi động cùng hệ thống
systemctl enable mariadb
- Khởi động dịch vụ
systemctl start mariadb systemctl restart mariadb
- Kiểm tra dịch vụ
systemctl status mariadb
Output:
root@sv:~# systemctl status mariadb
● mariadb.service - MariaDB 10.3.31 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-09-04 11:10:36 CEST; 1min 45s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: 2707 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 32 (limit: 1074)
Memory: 66.8M
CGroup: /system.slice/mariadb.service
└─2707 /usr/sbin/mysqld
Cấu hình bảo mật MariaDB
mysql_secure_installation
Kiểm tra phiên bản MariaDB
root@sv:~# mariadb --version mariadb Ver 15.1 Distrib 10.3.31-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Tạo file cấu hình đăng nhập mysql (không quan trọng)
vi /root/.my.cnf
[client] password="passwd-root-mysql" user=root [mysqld]
4. Cài đặt PHP
Ở đây mình sẽ cài đặt PHP7.4 và các extension đi kèm.
apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl php7.4-soap -y
Sau khi cài đặt xong php hoàn tất, bạn sử dụng các lệnh sau để quản lý dịch vụ:
- Khởi động cùng hệ thống
systemctl enable php7.4-fpm
- Khởi động lại php
systemctl start php7.4-fpm systemctl restart php7.4-fpm
- Kiểm tra trạng thái dịch vụ PHP
systemctl status php7.4-fpm
root@sv:~# systemctl status php7.4-fpm
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-09-04 11:18:25 CEST; 2min 6s ago
Docs: man:php-fpm7.4(8)
Main PID: 14170 (php-fpm7.4)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1074)
Memory: 9.2M
CGroup: /system.slice/php7.4-fpm.service
├─14170 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
├─14171 php-fpm: pool www
└─14172 php-fpm: pool www
5. Cài đặt phpMyAdmin (Không quan trọng)
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 update 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.dotrungquan.site
bằng server_name của bạn.
server { listen 80; listen [::]:80; server_name pma.dotrungquan.site; root /usr/share/phpmyadmin/; index index.php index.html index.htm index.nginx-debian.html; 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/php7.4-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
root@sv:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successfu
- Khởi động lại nginx
systemctl reload nginx
Truy cập vào trình duyệt để kiểm tra phpMyAdmin. Lưu ý để truy cập được từ domain thì bạn phải trỏ sub về IP máy chủ.
- Cài đặt TLS Certificate
Để bảo mật giao diện web phpMyadmin, chúng ta có thể cài đặt chứng chỉ TLS Let’s Encrypt miễn phí. Cài đặt ứng dụng khách Let’s Encrypt từ kho phần mềm Ubuntu 20.04 như sau. Ở đây mình sử dụng certbot
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 pma.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.
- Khắc phục lỗi đăng nhập phpMyAdmin
Hoàn tất các bước trên bạn vẫn chưa thể vào được phpMyadmin, mà cần xử lý một lỗi sau.
Truy cập lại vào mysql và tạo tài khoản sau.
create user admin@localhost identified by 'my-passwd'; grant all privileges on *.* to admin@localhost with grant option; flush privileges; exit;
Bây giờ bạn hãy truy cập vào phpMyAdmin bằng tài khoản vừa tạo nhé.
6. Tạo Website đầu tiên
Do triển khai cho nhiều website nên mình sẽ sử dụng PHP-FPM Pools cho việc bảo mật và quản lý. Bạn cũng nên làm như vậy để bảo mật cho từng site. Mình có viết một bài riêng về php-fpm pools. Bạn hãy thực hiện theo link bên dưới để thực hiện và tạo website
Lưu ý: Nếu bạn gặp lỗi 502 bad gateway trên phpMyAdmin bạn hãy tạo user, pool và sock cho phpmyadmin. Sau đó kết nối lại file cấu hình
Sau khi đã tạo xong vhost cho mỗi website theo hướng dẫn ở trên hoàn tất. Mình sẽ bắt đầu đi tạo một website WordPress mặc định để chạy trên máy chủ này.
6.1. Tạo cơ sở dữ liệu và người dùng.
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';
Kiểm tra Database vừa tạo đã có chưa bằng lệnh show databases;
6.2. Tải mã nguồn WordPress
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 /var/www/site1 wget https://wordpress.org/wordpress-5.8.zip unzip wordpress-5.8.zip mv /var/www/site1/wordpress/* /var/www/site1/ chown -R nginx:nginx /var/www/site1/
- Lệnh 1: di chuyển vào thư mục Document root của website, tuỳ vào cách cấu hình mã bạn hãy đặt tương ứng
- Lệnh 2: Tải mã nguồn wordpress về bằng lệnh wget
- Lệnh 3: Giải nén file ra
- Lệnh 4: Vơi mã nguồn download từ trang chủ, khi giải nén nó sẵn bên trong một thư mục là wordpress. Vì vậy cần di chuyển ra document root.
- Lệnh 4: Chỉnh lại Owner tương ứng cho user:group
Bây giờ bạn hãy truy cập domain/sub để cài đặt WordPress.
Nhập vào thông tin Database đã tạo ở 6.1
Đặt thông tin cho website.
7. Cài đặt WP-CLI để quản trị WordPress (không quan trọng)
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
Ảnh minh qua sử dụng wp-cli để xem theme, plugin và user.
8. 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.
8.1. Cài đặt Redis server
apt update apt install redis-server -y
8.2. 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
maxmemory 256mb maxmemory-policy allkeys-lru
8.3. Cài đặt PHP Extension
apt install php-redis
Kiểm tra kết nối đến Redis server
redis-cli 127.0.0.1:6379> ping PONG
Một số lệnh kiểm tra redis server
redis-cli info redis-cli info stats redis-cli info server
8.4. Cài đặt Redis trên 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', 'website1.dotrungquan.site');
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 đặt LEMP Stack và WordPress từ A-Z. 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.