Tăng tốc toàn diện cho bibica.net năm 2022

Tổng thể combo hiện tại của bibica.net cho năm 2022 là

  1. UpCloud Singapore Ubuntu v22.04 LTS
  2. Webinoly v1.16.7 - Nginx v1.22.1 + MariaDB v10.6.11 (MySQL) PHP 7.4.33
  3. Cloudflare - sử dụng DNS, SSLcache file tĩnh (css,js)
  4. Perfmatters để  tối ưu hiệu xuất cho WordPress
  5. FlyingPress để cache ở cấp độ Nginx 
  6. Jetpack để cache xử lý hình ảnh

Bài viết này sẽ ghi chi tiết các bước, chủ yếu để mình nhớ 😀 hoặc bạn nào thích làm theo cũng được 😀

// 1 ý khá vui, đó là UpCloud, Webinoly 2 dịch vụ mình đang dùng, ở bài viết giới thiệu về họ, vì 1 lý do thần thánh nào đó (ờ, là google) họ đã biết mà vào comment bên dưới bài viết 😀

VPS UpCloud tại Singapore

Chọn hệ điều hành Ubuntu v22.04 LTS, gói rẻ nhất $5/ 28 ngày, 1 CPU, 1GB RAM, 25GB HDD 

Cài đặt Google BBR

wget --no-check-certificate -O /opt/bbr.sh https://github.com/teddysun/across/raw/master/bbr.sh
chmod 755 /opt/bbr.sh
/opt/bbr.sh

Có vẻ như Ubuntu mới nhất đã được cài sẵn rồi, không bật chủ động lên thôi, active lên là được

Cài đặt Webinoly v1.16.7 (Sep 7 2022)

Các câu lệnh ở bài viết ngày xưa khi mình giới thiệu thì giờ tác giả update lại hết, làm phải ngồi xem lại … khá lú người 😀

wget -qO weby qrok.es/wy && sudo bash weby

Phiên bản v1.16.7 chạy tất cả mọi thứ đều là mới nhất, tiếc là vài plugin mình đang dùng, chạy php > 8.0 lỗi tung tóe, nên phải hạ cấp PHP xuống 7.4 😛

Hạ cấp PHP xuống 7.4

sudo stack -php-ver=7.4

Bật SFTP

sudo webinoly -login-www-data=on

Remove redis và memcached cho nhẹ vì không dùng tới

sudo apt-get remove memcached -y
sudo apt-get remove redis-server -y

Cài đặt zip, unzip, htop

sudo apt install zip -y
sudo apt install unzip -y
sudo apt install htop -y

Trông có vẻ Ubuntu v22.04 LTS mới quá, hình như có sẵn luôn rồi 😛

Chỉnh về múi giờ Việt Nam

timedatectl set-timezone Asia/Ho_Chi_Minh

Cài đặt WordPress

site bibica.net -wp

Tắt HTTP Authentication

sudo httpauth bibica.net -wp-admin=off

Cấu Hình SSL Signed By Cloudflare

Chép 2 file bibica.net.key và bibica.net.pem trong thư mực /root/ssl/ ở server cũ sang server mới

nano /etc/nginx/sites-available/bibica.net

Thêm đoạn code bên dưới vào đầu của file config

server {
listen 80;
listen [::]:80;
server_name bibica.net www.bibica.net;
return 301 https://$host$request_uri;
}

Thêm dòng bên dưới trong server {}, bên trên server_name

listen 443 ssl http2;
listen [::]:443 ssl http2; 
ssl_certificate /root/ssl/bibica.net.pem;
ssl_certificate_key /root/ssl/bibica.net.key;
ssl_protocols TLSv1.2 TLSv1.3;
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload';

Chạy tiếp dòng bên dưới để reload lại nginx, để thay đổi có hiệu lực

nginx -t
service nginx reload

Thiết Lập Một Cronjob Thực Từ Linux’s

crontab -e

Set chạy 1 phút 1 lần cho wp-cron

*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Ctrl + O -> Enter -> Ctrl + X để save và thoát ra

Backup Và Restore Bằng Duplicator Pro Từ Server Cũ

Download 2 file archive.zip và installer.php về

Xong xuôi thì vào thư mục cài đặt domain của bibica.net bằng lệnh cd

cd /var/www/bibica.net/htdocs

Xóa tất cả các file và thư mục có sẵn:

rm -rf *

Chép 2 file archive.zip và installer.php được tạo ra bởi Duplicator Pro (lấy ở bước trên) vào thư mục /var/www/bibica.net/htdocs

Chạy file installer.php để restore, info database lấy ở /var/www/bibica.net/wp-config.php

Cấu hình Cloudflare 

Tạo 2 rule:

  1. https://bibica.net/wp-content/cache/*
    Cache Level: Bypass
  2. https://bibica.net/wp-content/*
    Cache Level: Cache Everything

Ý tưởng của 2 rule này sẽ cache mọi thứ ở thư mục wp-content (các file tĩnh), trừ thư mục cache bên trong thì không cache

Caching Tiered Cache: Bật Argo Tiered Cache

Cấu hình Perfmatters 

Về cơ bản thì như hình 😀 đa phần mình tắt các thứ không dùng, chứ cũng không hẳn là tối ưu cái gì nhiều

Cấu hình Nginx FlyingPress 

location ~* \.html$ {
  charset UTF-8;
  add_header x-flying-press-cache HIT;
  add_header x-flying-press-source Nginx;
  add_header cache-control "no-cache, must-revalidate, max-age=0";
}

set $flying_press_cache 1;
set $flying_press_url "/wp-content/cache/flying-press/$http_host/$request_uri/index.html";
set $flying_press_file "$document_root/wp-content/cache/flying-press/$http_host/$request_uri/index.html";

if ($request_method = POST) {
  set $flying_press_cache 0;
}

if ($is_args) {
  set $flying_press_cache 0;
}

if ($http_cookie ~* "(wp\-postpass|wordpress_logged_in|comment_author|woocommerce_cart_hash|edd_items_in_cart)") {
  set $flying_press_cache 0;
}

if (!-f "$flying_press_file") {
  set $flying_press_cache 0;
}

if ($flying_press_cache = 1) {
  rewrite .* "$flying_press_url" last;
}

Tạo file flying-press.conf nội dung như trên, sau đó chép nó vào thư mục /etc/nginx/sites-available

sudo nano /etc/nginx/sites-available/bibica.net

Thêm vào bên trong server {} dòng code

# FlyingPress configuration
include /etc/nginx/sites-available/flying-press.conf;

Sau đó reload lại nginx, để thay đổi có hiệu lực

nginx -t
service nginx reload

Tổng thể file config sau khi sửa chữa, cuối cùng của sẽ như bên dưới 

# WebinolyNginxServerStart
server {
listen 80;
listen [::]:80;
server_name bibica.net www.bibica.net;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2; 
ssl_certificate /root/ssl/bibica.net.pem;
ssl_certificate_key /root/ssl/bibica.net.key;
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload';

  server_name bibica.net www.bibica.net;
  
  access_log off;
  error_log /var/log/nginx/bibica.net.error.log;
  
  root /var/www/bibica.net/htdocs;
    
  index index.php index.html index.htm;
  
  include common/auth.conf;

  # FlyingPress configuration
  include /etc/nginx/sites-available/flying-press.conf;

  # WebinolyCustom
  # WebinolyCustomEnd
  
  include common/php.conf;
  include common/wpcommon-noauth.conf;
  include common/locations.conf;
  include common/header.conf;
  include /var/www/bibica.net/*-nginx.conf;
}
# WebinolyNginxServerEnd

Cài đặt xong xuôi thì reboot lại 1 phát, sau đó kiểm tra lại các thứ xem có vấn đề gì không 😛

reboot

2022-11-18_15-28-21

Cài đặt tất cả mọi thứ, mà tasks khá ít

Ý nghĩa của việc cấu hình như trên

Cấu hình như trên thì file tĩnh dạng css, js sẽ được Cloudflare cache, các file hình ảnh sẽ được Jetpack, tất cả đều ở tầm vóc thế giới, thậm chí hình ảnh có thể tự xử lý đủ các kích thước khác nhau, không cần phải tạo các ảnh thumbnail nhỏ ở từng khu vực như truyền thống

Trang web thậm chí được cache về dạng html, sau đó được cache ở cấp cấp độ Nginx, cũng sẽ tốn rất ít tài nguyên, server chỉ tốn tài nguyên nhiều khi người quản trị viết bài, cập nhập gì đó nặng, còn end user vào đọc bài, tìm kiếm …. sẽ khá là nhẹ nhàng

Kiểm tra tốc độ truy cập

Chạy bench.sh kiểm tra phần cứng và tốc độ của VPS

wget -qO- https://bibica.net/speedtest | bash

Tốc độ sau khi cài đặt xong xuôi vài ngày

2022-11-20_11-57-58

Tốc độ đi phần lớn các khu vực đều có download, upload, ping rất ổn, ấn tượng nhất là tốc độ về Việt Nam, hiện tại đã được ~ 1Gb 😀

2022-11-18_15-42-56

Ở 1 số thời điểm, VPS của UpCloud có vẻ bị quá tải, ping từ Sing <-> US ~ 250ms, ghẻ quá 😀 Việt Nam giờ ping sang US cũng < 200ms cả, tốc độ I/O thậm chí giảm xuống mức ~ 7x-8x 

2022-11-18_16-36-37

TTFB thực sự cao ở bài test performance từ keycdn

Truy cập thực tế tại Việt Nam thì có lẽ không cần bàn, khi server tại Singapore, sử dụng thêm Cloudflare cache file tĩnh, gần như ấn chuột, click chuột là chạy, bất kể có dùng cache plugin thêm vào hay không

2022-11-18_16-42-11

Tốc độ thấp nhất có thể đạt được là 38 ms 😀

2022-11-18_16-45-59

Các thao tác truy xuất trực tiếp vào database như search cũng rất nhanh, đa phần < 1s để cho ra kết quả

Tốc độ khi tìm kiếm

2022-11-24_15-03-15

Đây có lẽ là phần gây lú nhất, vì tốc độ khi search trên bibica.net trên desktop nhanh 1 cách hãi hùng, search thử 1 từ khóa bất kì, chỉ mất khoảng 0.5s để cho ra kết quả

Điểm sốGTmetrix

2022-11-24_15-07-21

Khoản điểm số thì chủ yếu để lòe nhau là chính, kiểu test trên server tại Hong Kong thì 100% các kiểu, chứ test server US xuống 8x ngay :]]

Kiểm tra độ chịu tải

1 điểm rất mạnh của Webinoly trước đây mình dùng, là nó rất ổn định, xác xuất VPS ít RAM gây lỗi database Centmin Mod thi thoảng còn gặp, chứ Webinoly hiếm cực kì, chưa kể nó chịu tải gần như là tốt nhất trong tất cả thể loại LEMP stack auto

2022-11-18_16-53-25

Cụ thể với cấu hình mặc định, nó có thể chịu tải cùng lúc 30 truy xuất vào database mà chỉ mất ~ 5s, dễ hiểu hơn thì nếu có 30 người đồng loại comment vào bài này, thì sau ~5s có thể xử lý được 30 comment này, nghe thì có vẻ phò, nhưng thực tế hiệu có trang nào 1s có ~ 6 tương tác như thế 😀

2022-11-18_17-08-25

Trong 1 tình huống giả định khác, là có 1.000 người cùng lúc vào đọc bài, không tương tác comment hay search …. thậm chí nó có thể chịu tải thoải mái, khi tốc độ truy cập trung bình chỉ 1.5s

Và cái quan trọng nhất vẫn là cách Webinoly xử lý, nó có thể bị quá tải khi quá nhiều người vào …. nhưng ít nhất thì nó không bị sập hoàn toàn, hay văng lỗi database ra như nhiều LEMP stack auto khác 😀

Ah, cũng nói cho bon mồm là chính, chứ thèng bibica.net hiện tại 1 ngày chắc có 3-5 người vào xem bài , cơ bản với combo thần thánh UpCloud Singapore + Webinoly v1.16.7 + Ubuntu v22.04 LTS, gần như tất cả khách vào bibica.net đều đạt tốc độ tối đa, sẽ không thấy độ trễ gì cả, config khác thì râu ria cho vui mồm là chính

Tính tương thích

1 ưu điểm khác cũng rất quan trọng, Webinoly làm rất ít tính năng, siêu đơn giản, nên nó rất ít lỗi và cực hiếm đụng chạm tới plugin nào, cụ thể FlyingPress trên Centminmod mình chạy thì thấy bị lỗi nhẹ, trên cấu hình Nginx mất 2-3 phút mới tự xóa cache, mà trên Webinoly có sự thay đổi F5 lại là tự xóa, chuyển sang chạy trên PHP, F5 lại thêm 1 cái là thành Nginx, chạy mượt lắm

Mình cũng từng dùng Webinoly 1 domain mà 1-2 năm mình không vào luôn, trang vẫn hoạt động ầm ầm 😛

Tổng kết

Nói ngắn gọn là tuyệt vời 😛 không có gì để phàn nàn 😀

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied