Hướng dẫn cài đặt LEMP Stack trên Ubuntu 20.04 và WordPress từ A-Z

7
0

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
Hướng dẫn cài đặt LEMP Stack và WordPress từ A-Z

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
Hướng dẫn cài đặt LEMP Stack và WordPress từ A-Z

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.

Hướng dẫn cài đặt LEMP Stack và WordPress từ A-Z

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

Screenshot 2021 09 04 at 16.26.39

Sau đó đặt mật khẩu cho người dùng.

Screenshot 2021 09 04 at 16.27.50

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;
Screenshot 2021 09 04 at 16.28.45

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ủ.

Screenshot 2021 09 04 at 16.34.57
  • 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 [email protected]

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.
Screenshot 2021 09 04 at 16.38.28
  • 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.

Screenshot 2021 09 04 at 16.36.44

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;
Screenshot 2021 09 04 at 16.40.50

Bây giờ bạn hãy truy cập vào phpMyAdmin bằng tài khoản vừa tạo nhé.

Screenshot 2021 09 04 at 16.41.54

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'; 
Screenshot 2021 09 05 at 13.58.33

Kiểm tra Database vừa tạo đã có chưa bằng lệnh show databases;

Screenshot 2021 09 05 at 13.59.49

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.

Screenshot 2021 09 05 at 14.05.08
Screenshot 2021 09 05 at 14.05.18

Nhập vào thông tin Database đã tạo ở 6.1

Screenshot 2021 09 05 at 14.05.41
Screenshot 2021 09 05 at 14.05.56

Đặt thông tin cho website.

Screenshot 2021 09 05 at 14.06.31
Screenshot 2021 09 05 at 14.08.06

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
Screenshot 2021 09 05 at 14.10.22

Ảnh minh qua sử dụng wp-cli để xem theme, plugin và user.

Screenshot 2021 09 05 at 14.11.16

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.

Browser Page Object Cache Levels 1024x585 1

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.

Screenshot 2021 09 05 at 14.32.45

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.

Đỗ Trung Quân
WRITTEN BY

Đỗ Trung Quân

Nguồn nội dung này đến từ Website DoTrungQuan.info

Trả lời