Tổng thể combo hiện tại của bibica.net cho năm 2022 là
- UpCloud Singapore Ubuntu v22.04 LTS
- Webinoly v1.16.7 – Nginx v1.22.1 + MariaDB v10.6.11 (MySQL) PHP 7.4.33
- Cloudflare – sử dụng DNS, SSL và cache file tĩnh (css,js)
-
Perfmatters để tối ưu hiệu xuất cho WordPress
- FlyingPress để cache ở cấp độ Nginx
- 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:
- https://bibica.net/wp-content/cache/*
Cache Level: Bypass - 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
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
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 😀
Ở 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
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
Tốc độ thấp nhất có thể đạt được là 38 ms 😀
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
Đâ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
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
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ế 😀
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 😀
Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.
• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.
• ✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!