Webinoly - LEMP stack đơn giản mạnh mẽ

Webinoly mình tình cờ biết tới khi lượt lờ phần support của EasyEngine, thấy một thành viên giới thiệu về Webinoly, nếu không chờ được EEv4 thì có thể dùng thử xem thế nào

webinoly-author-cristhian-martinez-ochoa

Webinoly ra mắt vào 28/08/2017 và thời điểm mình bắt đầu viết bài này thì họ vừa ra v1.1.0 được vài hôm (04/12/2017) 😀

Hiện tại đã được 6 năm phát triển, do đây là LEMP stack auto mình dùng hiện tại, nên cố gắng cập nhập lại bài này thường xuyên

(đoạn này nổ tí, tác giả QROkes cũng từng comment vào chính bài viết này hé)

Giới thiệu về Webinoly

Webinoly v1.17.8 chạy mặc định trên Nginx v1.24 + MariaDB v10.11 (MySQL) + PHP v8.2 (đã hỗ trợ PHP 8.3) + HTTP/2, tác giả QROkes luôn sử dụng các nguồn chính thức, đảm bảo sự ổn định máy chủ

Webinoly có thể chạy trên x86_64, arm64, thậm chí chỉ có IPv6 cũng chạy, siêu đa năng

Ở 2023 mình nghĩ là nên dùng Ubuntu v22.04, nó đã tối ưu, cài đặt sẵn rất nhiều thứ, cả về hiệu năng, bảo mật và tốc độ, cũng rất thông dụng, dùng trên Ubuntu v20.04 thì hơi cũ

Ports Configuration

  • 22/TCP (Inbound/Outbound)
  • 25/TCP (Outbound)
  • 80/TCP (Inbound/Outbound)
  • 443/TCP (Inbound/Outbound)
  • 587/TCP (Outbound) *Optional for SMTP
  • 11371/TCP (Outbound) *GPG Keys
  • 22222/TCP (Inbound) *Admin area

Mặc định phần lớn các nhà cung cấp VPS đều mở sẵn tất cả các port, các dịch vụ kiểu Oracle, Google, Amazon …. khóa theo mặc định thì bạn vào mở các port theo yêu cầu ở trên là được 😀

Cài đặt

Việc cài đặt Webinoly rất đơn giản, chỉ 1 dòng lệnh, tuy thế sau nhiều năm sử dụng, chạy trên đủ các loại VPS, đủ các hãng, mình đề xuất nên cài đặt các lệnh tuần tự như bên dưới, sẽ hạn chế tối đa chuyện cài đặt gặp lỗi

Cập nhập OS

sudo apt update && sudo apt upgrade -y && sudo reboot

Sau khi cập nhập OS thì tự reboot lại VPS cho sạch sẽ

Cập nhập locale

locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Kể từ thời Webinoly mặc định dùng PHP v8, nếu không cập nhập locale, trên 1 số VPS, đôi lúc cài đặt PHP sẽ bị lỗi

Cài đặt Webinoly

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

Cài đặt mặc định, Webinoly đã tự cấu hình server, các thông số liên quan tới mạng, ping, bbr, cho tới các thứ liên quan tới PHP, Nginx …

Khi dùng 1 thời gian, bắt đầu quen dần, bạn có thể custom các cấu hình, như lựa chọn phiên bản PHP, MySQL …

Tắt firewall

sudo apt remove iptables-persistent -y
sudo ufw disable
sudo iptables -F

Cá nhân mình cũng chẳng bao giờ nhìn, hay học các lệnh về firewall trên OS, một số nhà cung cấp VPS như Oracle mặc định bật firewall ngay trong Ubuntu OS, nên tắt đi cho đỡ phiền

Nếu thích dùng firewall, có thể chặn thông qua firewall của Cloudflare hoặc từ chính nhà cung cấp VPS, nó chặn từ trước khi vào VPS, đỡ tài nguyên và hiệu quả hơn

Sau khi cài đặt xong, có thể chạy 1 lệnh để kiểm tra tổng quát các thứ

sudo webinoly -info
[Operating System]
OS Info: Linux version 5.15.0-84-generic (buildd@lcy02-amd64-005) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #93-Ubuntu SMP Tue Sep 5 17:16:10 UTC 2023
Description:    Ubuntu 22.04.3 LTS
Codename:       jammy
RAM: 1Gb
SWAP: 1Gb

CPU Model: AMD EPYC 7542 32-Core Processor
Architecture: AuthenticAMD (x86_64)
Cores: 1
Threads per core: 1

Hostname: ubuntu-1cpu-1gb-sg-sin1
File descriptors (OS): 9223372036854775807
File descriptors (root): 1048576
File descriptors (nginx/per process): 65535

[Disk Usage]
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vda2      ext4   25G  6.0G   18G  26% /

[NGINX]
Branch:
Version: 1.24.0
worker_processes: auto
worker_connections: 20000
worker_rlimit_nofile: 65535
client_max_body_size: 100m

[NGINX Cache Settings]
FastCGI 200: 30d
FastCGI 3xx/4xx: 1m
FastCGI inactive: 7d
FastCGI max-size: 197m
open_file_cache_valid: 30s
open_file_cache max: 1000
open_file_cache inactive: 10s

[PHP]
Info: PHP 8.2.10 (cli) (built: Sep  2 2023 06:59:22) (NTS)
memory_limit:  192M
post_max_size:  101M
upload_max_filesize:  100M
max_file_uploads:  20
max_execution_time:  60

Process Manager:  dynamic
pm.max_children:  6
pm.start_servers:  2
pm.min_spare_servers:  2
pm.max_spare_servers:  4

[MYSQL]
Info: mysql  Ver 15.1 Distrib 10.11.5-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper
phpMyAdmin: 5.2.1

[Webinoly]
Default site: default
Tools site: default
Tools port: 22222
Timezone: Undefined
SMTP: None

[Internal]
global-access-log-off:true
php-ver:8.2
mysql-ver:10.11
app-version:1.17.5
status-api:wys
swap-owner:webinoly
linux-optim:true
pre-packs:true
nginx:true
cron-ads:1696301128
server-version:1.8
nginx-optim:true
tools-port:22222
nginx-tool-ssl:true
nginx-tool-bkp:true
php:true
php-optim:true
php-tool-postfix:true
php-tool-redis:true
php-tool-memcached:true
mysql-client:true
mysql-root:cUFVRTh0Y2lGRnZ1RTkyZgo=
mysql-admin:QkhUWmszWndXVWlSZTAxcwo=
mysql:true
mysql-optim:true
mysql-tool-pma:true

Các con số tác giả tinh chỉnh, dựa vào cấu hình phần cứng của VPS, cân bằng rất tốt giữa hiệu năng, bảo mật và tốc độ, rất hoàn hảo cho 1 hệ thống cơ bản, gần như không cần thiết phải thay đổi bất cứ điều gì, thứ duy nhất Webinoly không cấu hình là các thông số liên quan tới MySQL MariaDB, có thể dùng Releem để tự cấu hình lại các giá trị cho tối ưu hơn

Cài đặt WordPress trên Webinoly

site example.com -wp
  • Trong đó “example.com” thay bằng domain của bạn

Tác giả cũng cài đặt sẵn symbolic link, trên ssh bạn gõ thư mục root sẽ thấy đường dẫn thư mục chính

2023-10-03_10-06-31

Truy cập vào thư mục trên các domain hay cấu hình nginx đều rất nhanh, đỡ phải nhớ vị trí các thư mục con

Config /etc/nginx/sites-available
Root /var/www/example.com/htdocs

Dùng các tool khác, mình sẽ phải ghi nhớ thư mục config, thư mục root của domain xem nằm ở đâu, dùng Webinoly thì chỉ cần gõ thư mục root là thấy rồi, đây là 1 điểm rất nhỏ, chỉ tầm 1 dòng code bổ xung, mà không thấy tool script auto nào khác làm cả 😀

Tắt HTTP Authentication

sudo httpauth example.com -wp-admin=off

Mặc định Webinoly sử dụng “HttpAuth” để tạo thêm 1 lớp login cho các trang như wp-admin, với mình là không cần thiết, thành ra mình tắt tính năng này đi

Trong trường hợp muốn bảo mật thêm cho Wordpress, làm theo bài này hiệu quả hơn

Cài đặt SSL

Bạn có thể cài ssl bằng lệnh bên dưới

sudo site example.com -ssl=on

Nếu cần có thể tạo Wildcard SSL, dùng được cho tất cả các domain và subdomain đi kèm

sudo site example.com -ssl=on -wildcard

Dù các tác giả đã cấu hình tự renew SSL, nhưng mình thấy khá phiền, nếu bạn thường xuyên tạo xóa SSL trên các domain giống nhau, Let’s Encrypt rất hay báo lỗi

Dùng TLS certificate signed by Cloudflare, chỉ phải tạo SSL 1 lần duy nhất từ Cloudflare, sau đó có thể dùng khóa .key và .pem này cho cả domain chính và tất cả subdomain, thời gian sử dụng tới 15 năm, đỡ rất nhiều thời gian đi xử lý các thứ liên quan tới ssl 

Xong xuôi thì bạn vào domain.com để cài đặt WordPress như thông thường

2022-11-20_07-22-06

  • Vậy là cơ bản chúng ta đã cài xong WordPress 😀

Hiệu năng

Ở bài viết cũ, mình có cập nhập khá nhiều về các bài test hiệu năng, liên quan tới tốc độ, chịu tải trên Webinoly, sau 5-6 năm biết tới và sử dụng, mình thấy không cần thiết thêm vào ở bài này nữa, trong tất cả các bài test về hiệu năng, Webinoly đứng đầu ở việc giữ tỷ lệ uptime khi trang bị quá tải, tốc độ và chịu tải của nó xuất sắc 😀

Sử dụng thực tế bạn có thể cài thêm Monitor service PHP, Mysql, Nginx, giúp tự khởi động lại dịch vụ nếu chẳng may lỗi xảy ra

Nay mình có thử tạo 1 con VPS ở Linode để test LCMP, lý do là bên Linode , VPS 1GB RAM của họ, được tới 958MB lận, các hãng khác giảm sao đa chỉ còn 870MB, cài hoàn chỉnh cấu hình mặc định và 1 trang WordPress mới hoàn toàn, tổng dung lượng RAM sử dụng cho toàn bộ hệ thống chỉ ~ 291MB, thèng LCMP mình chỉ cài các thứ cơ bản nhất, chạy WordPress tương tự, cũng đã dùng ~ 360MB rồi 😛

2023-10-05_11-27-56

Vấn đề hiệu năng ở bài test loader.io, trên UpCloud 1GB RAM, cài 1 trang WordPress mặc định, 100 kết nối mỗi giây, tốc độ trung bình khoảng 3.4s,

Hôm nay mình thử trên VPS Linode cấu hình 1 GB RAM tương tự, tốc độ trung bình ~3.3s, khá tương đồng và hợp lý

Mình thử đổi lại cấu hình MySQL, theo các đề xuất từ Releem, cụ thể là mình dùng đề xuất như bên dưới trên trang bibica.net, cũng cài khá nhiều plugin và cũng đã có ~ 200 bài viết

[mysqld]
thread_cache_size = 32
table_open_cache = 2048
sort_buffer_size = 8M
innodb = force
innodb_stats_on_metadata = OFF
innodb_buffer_pool_instances = 8
innodb_log_buffer_size = 10M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 6
join_buffer_size = 8M
max_allowed_packet = 64M
read_rnd_buffer_size = 16M
read_buffer_size = 2M
bulk_insert_buffer_size = 64M
max_connections = 512
myisam_sort_buffer_size = 128M
explicit_defaults_for_timestamp = 1
open_files_limit = 65535
table_definition_cache = 1024
table_open_cache = 2048
log_bin_trust_function_creators = 1
disable_log_bin
innodb_adaptive_flushing_lwm = 25.000000
innodb_max_dirty_pages_pct = 70.000000
innodb_autoextend_increment = 48
transaction_prealloc_size = 8192
key_buffer_size = 8M
query_cache_type = 0
query_cache_size = 0
query_cache_limit = 1048576
query_cache_min_res_unit = 4096
innodb_buffer_pool_size = 128M
innodb_buffer_pool_chunk_size = 2M
thread_stack = 524288
max_heap_table_size = 830472192
tmp_table_size = 830472192
innodb_log_file_size = 25165824

Chạy lại bài test loader.io trên trang WordPress mới hoàn toàn, tốc độ cải thiện khá rõ, từ ~3.3s giờ chỉ còn < 3s 😀

2023-10-05_11-50-02

Tất nhiên, chuyện con số bị sai, hoàn toàn có thể xảy ra, vì các nhà cung cấp VPS có thể tinh chỉnh hiệu năng CPU, cho phép dùng quá mức ở 1 thời điểm nhất định x2 x5 công xuất thực

Để hạn chế chuyện này thì mình cũng đã thử test 3 lần, mỗi lần cách nhau khoảng 5 phút, các con số đều rất ổn định ở mức < 3s, nên có thể kết luận các tinh chỉnh từ Releem là có hiệu quả

Phần hiệu năng mình demo cho bạn nào lần đầu biết tới Webinoly là chính, không nhiều script auto (hay kể là tự cấu hình) qua được bài test 100 kết nối trên VPS 1 GB RAM mà tốc độ <3s được như Webinoly đâu

Cái quan trọng là Webinoly rất khó sập, mình từng thử nhồi nhét 1000-2000 kết nối vào cùng lúc, để nó sập hoàn toàn, xem thế nào, mà vẫn chưa gặp tình huống đó 😀

Backup và restore server

Đây là 1 tính năng được tác giả quảng cáo là “Moving or migrating a site or the whole server has never been so easy!”

Trước đây mình không quan tâm lắm tới tính năng này, vì các cấu hình Nginx, PHP, MySQL mình dùng, nó chỉ là 1 file cấu hình đơn giản, thường chỉ cần tạo 1 bash script nhỏ, cài đặt lại 1 server mới hoàn toàn cũng chỉ mất ít phút

Ở các trang WordPress như thèng bibica.net, SSL mình dùng của Cloudflare, data thì mình dùng Duplicator Pro nên việc backup và restore sang server mới rất đơn giản,

Câu chuyện phát sinh là cách đây ít ngày, mình đổi sang dùng gói BudgetKVMVN-2 của GreenCloud, SSL phải dùng Let's Encrypt, kèm theo đó là cấu hình chằng chịt các subdomain phụ cho các dịch vụ như Artalk, Umami, Jetpack Photon, WireGuard Easy

Nhất là công đoạn cấu hình Reverse Proxy cho Jetpack sau đó dùng FastCgi Cache để cache lại các ảnh, cần sửa khá nhiều thứ nhỏ trong các file cấu hình Nginx

Nếu dùng cách trước đây là tạo bash script để auto cài đặt, thì sơ sơ mình phải chép lại cấu hình của 15-20 file nhỏ, khá là phiền, nhất là công đoạn backup lại các SSL từ Let's Encrypt, nhìn vào khá lú 😀

Nên vào coi lại tính năng backup và restore server của Webinoly

Nhìn sơ lược thì khá ổn, các cấu hình SSL, Nginx, MySQL, data kèm database của các trang đều được lưu lại, thao tác cũng rất đơn giản

  • Ở VPS gốc, tạo 1 bản backup bằng lệnh bên dưới
sudo webinoly -backup=local -export

File backup sẽ được lưu trữ xuống thư mục root(/root/webinoly_full_backup_2023-12-01-08:18:55)

  • Trên VPS mới, cài đặt bằng Webinoly tùy chọn -clean
sudo wget -qO weby qrok.es/wy && sudo bash weby -clean
  • Upload file webinoly_full_backup lên VPS mới, sau đó chạy lệnh import tại server mới
sudo webinoly -backup=local -import=full -file=/root/webinoly_full_backup_2023-12-01-08_18_55

Thời gian cài đặt và restore lại toàn bộ mọi thứ khá nhanh, mình thử trên Oracle ổ cứng 50MB/s cũng mất chỉ ít phút 😀

Webinoly Stack Server was built using your imported configuration!
Database successfully imported!
MySQL/MariaDB has been successfully Optimized by Webinoly!
MySQL/MariaDB settings has been updated successfully!
Webinoly Full Server Backup imported successfully!

Lúc này chỉ việc đổi lại DNS sang server mới là xong, mình có chạy thử thì thấy mọi thứ diễn ra mượt như bơ

Trước đây sau khi cài đặt Webinoly, mình phải dùng Duplicator Pro để cài lại các trang WordPress, dùng qua cơ chế backup của Webinoly, tự động toàn bộ các thứ luôn, không phải điền lại thông tin gì cả :]]

Cá nhân do mình chỉnh sửa 1 chút ở cấu hình PHP và MySQL, dùng thêm 1 số addon ngoài chạy qua docker như Artalk, Umami, WireGuard Easy … nên cần cài đặt thêm ít dòng, nhưng cơ bản các bước mệt mỏi nhất là các cấu hình nginx, domain, ssl, data và database thì Webinoly làm hết rồi, khiến việc chuyển đổi server thực sự rất nhàn 😛

Webinoly là script rất hiếm hoi, khi có tính năng backup và restore toàn bộ các cấu hình của cả server, các script khác thì đa phần chỉ có tính năng backup data và database của 1 trang web thôi

Tính năng Backup, restore server và reverse proxy là 2 điểm cộng cực lớn của Webinoly

Các câu lệnh khác

Tác giả hỗ trợ rất nhiều thứ như cấu hình cài đặt riêng, hiện tại mình dùng cách này để tự cài đặt các cấu hình hay dùng, như chủ động cài PHP 7.4, MySQL 10.3 và 1 số cấu hình nhỏ khác

External Database đây là thứ ngày xưa mình dùng để chạy trên 2 con VPS Oracle cấu hình cực yếu

Replace Content, có thể dùng nó để đổi lại domain bên trong các bài viết, tìm kiếm và thay thế 1 đoạn text cụ thể

Về FastCGI Cache mặc định cho WordPress thường mình ít dùng, đa phần mình dùng Cache Rules Cloudflare hoặc FlyingPress

Bật tắt rất đơn giản bằng tùy chọn -cache=on hoặc -cache=off

# Enable Custom Cache
sudo site example.com -cache=on

# Disable Custom Cache
sudo site example.com -cache=off

Trong trường hợp lỡ xóa hoặc chưa cài đặt Memcached và Redis thì có thể cài đặt lại

sudo stack -redis
sudo stack -memcached

Reverse Proxy site là tính năng mình dùng cực nhiều trên Webinoly, thường mình sẽ kết hợp với FastCGI Cache, giúp cache các file ảnh tốt hơn

Bạn có thể xem thêm tất cả cách lệnh khác tại phần hướng dẫn của tác giả, mình chỉ liệt kê 1 số thứ hay dùng thôi

Cập nhập phiên bản Webinoly mới nhất

sudo webinoly -update

Bật SFTP

sudo webinoly -login-www-data=on

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

timedatectl set-timezone Asia/Ho_Chi_Minh

Hạ cấp PHP xuống 7.4 (nó sẽ chậm hơn so với v8, bù lại nó tương thích với nhiều addon, plugin hơn)

sudo stack -php-ver=7.4

Xóa website khỏi hệ thống (thay example.com bằng domain bạn muốn xóa)

sudo site example.com -delete

Thông tin trang web

sudo site example.com -info

Reverse Proxy site (tính năng này mình sẽ nói kĩ hơi 1 xíu, vì nó khá thú vị )

Giả sử bạn có 1 VPS đang dùng Webinoly dùng server tại Singapore, cho tốc độ truy cập tại Việt Nam nhanh nhất

Tiếp theo bạn có 1 VPS khác, có thể ở US….  truy cập tại Việt Nam chậm hơn

Bạn có thể dùng VPS Webinoly làm proxy cho con VPS US này, lúc này truy cập tới VPS US sẽ nhanh hơn

Cụ thể domain bạn dùng ở VPS US là: bibica-us-server.com, IP là: 209.94.63.217, VPS Webinoly IP là 95.111.195.228

Trên VPS Webinoly gõ lệnh

sudo site bibica-us-server.com -proxy=[95.111.195.228:80]

Ở trang quản trị domain bibica-us-server.com, DNS ban đầu là 209.94.63.217, giờ bạn đổi sang IP của VPS Webinoly là 95.111.195.228

Lúc này truy cập thực tế tới trang bibica-us-server.com sẽ đi từ IP 95.111.195.228 -> 209.94.63.217

Cụ thể nếu bạn ping tới 95.111.195.228 là 40, 209.94.63.217 là 200, lúc này khi ping tới bibica-us-server.com sẽ giảm từ 200 ban đầu, xuống còn khoảng ~ 60

Tiếp theo bạn cần xử lý nhỏ thêm một tí, không thì mọi comment, bài viết  trên bibica-us-server.com đều hiện ra là IP 95.111.195.228

Mở file config domain tại server bibica-us-server.com, ví dụ của mình là /etc/nginx/sites-available/bibica-us-server.com

Bên trong server {…} thêm vào dòng bên dưới

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;

Tiếp theo khởi động lại nginx

service nginx reload

Lỗi?

Tùy thuộc bạn sử dụng bao nhiêu tính năng trên Webinoly để có thể thấy lỗi 😀 vì tác giả viết thêm rất nhiều tùy chọn, chưa kể cách viết qua file bash nó rất khó quản lý, nên nếu bạn gặp lỗi gì đó, cũng rất dễ xảy ra

Cụ thể như mình hay dùng Reverse Proxy, cấu hình chằng chịt các giá trị cache, sau đó nếu mình xóa domain này đi, nó vẫn còn sót lại 1 vài cấu hình bên trong, chứ không bị xóa đi hoàn toàn

Các lỗi này thì mình hiểu, và có thể tự sửa thủ công, nên cũng không gặp vấn đề gì khi sử dụng

Đôi lỗi liên quan tới chuyện cấu hình cài đặt riêng ở file webinoly.conf, kiểu mình set wp-admin-auth:false ở đây rồi, mà cài xong vẫn thấy nó đang ON, phải tắt thủ công lại =))

Cũng là lỗi mình có thể chủ động thấy và tự sửa được

So với nhiều script khác mình từng dùng, tỷ lệ lỗi của Webinoly mình đánh giá là rất ít

Tổng kết

Cá nhân đánh giá Webinoly là là top đầu trong các script dạng tự config auto, cân đối được giữa bảo mật, tốc độ, chịu tải và rất dễ sử dụng

Hiện tại mình rất thích dùng Webinoly, phần vì các câu lệnh của họ rất phù hợp để bạn tự làm thành 1 file bash, nếu muốn move thèng bibica.net sang 1 VPS mới, mình chỉ cần chạy đúng 1 dòng lệnh, là tất cả cấu hình cho bibica.net, api.bibica.net, i0.bibica.net, i.bibica.net đều tự động hết, đổi DNS lại phát là xong, siêu nhanh

Nếu bạn dùng Webinoly, mình đề xuất dùng thêm

  1. SSL từ Cloudflare
  2. Releem cấu hình cho MySQL
  3. Monitor service PHP, Mysql, Nginx giúp tự khởi động lại dịch vụ nếu chẳng may lỗi xảy ra

Lúc này bạn cực hiếm phải login vào quản trị phía server để tinh chỉnh thêm gì nữa, mọi thứ gần như có thể tự vận hành ổn định

Vì 1 lý do thần thánh nào đó, các comment cũ tại bài này không hiểu sao bị lú hết =)) chắc do mình backup thủ công lại vài lần nên bị lỗi, mọi người thông cảm hé 😛

Update 01/12/2023

Cập nhập tính năng Backup và restore server, một tính năng tuyệt vời mà dùng Webinoly 5 năm rồi mình mới biết =))

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