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, họ nói 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.18.4 chạy mặc định trên PHP v8.3.9 + MariaDB v11.4.2 + Nginx v1.26.1 + HTTP/3, 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

Ở 2024 Webinoly đã hỗ trợ Ubuntu 24.04 LTS, mình có dùng thử thì thấy bản mặc định Ubuntu 24.04 cài ít thứ linh tinh và dùng khá ít RAM, bạn nào thích nghịch có thể dùng thử, chạy ở trang cần ổn định cao thì dùng Ubuntu 22.02 cho chắc 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ì 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 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 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 6.8.0-38-generic (buildd@lcy02-amd64-049) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #38-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun  7 15:25:01 UTC 2024
Description:    Ubuntu 24.04 LTS
Codename:       noble
RAM: 1Gb
SWAP: 1Gb

CPU Model: AMD EPYC 7542 32-Core Processor
pc-i440fx-5.1  CPU @ 2.0GHz
Architecture: AuthenticAMD
QEMU (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   20G  5.4G   14G  29% /

[NGINX]
Branch: stable
Version: 1.26.1
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: 195m
open_file_cache_valid: 30s
open_file_cache max: 1000
open_file_cache inactive: 10s

[PHP]
Info: PHP 8.3.9 (cli) (built: Jul  5 2024 12:04:09) (NTS)
memory_limit:  256M
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: mariadb from 11.4.2-MariaDB, client 15.2 for debian-linux-gnu (x86_64) using  EditLine wrapper
phpMyAdmin: 5.2.1

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

[Internal]
mail:[email protected]
global-access-log-off:true
default-response:blackhole
php-ver:8.3
mysql-ver:11.4
app-version:1.18.4
status-api:wys
swap-owner:webinoly
linux-optim:true
pre-packs:true
nginx:true
cron-ads:1720621659
server-version:1.11
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:QldCOUFSaEV3NGhGRmFTbwo=
mysql-admin:ekYydjdEMVVvOU9NWmVGUQo=
mysql:true
mysql-optim:true
mysql-tool-pma:true
default-site:blackhole

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, 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ị này 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

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

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

Tốc độ cải thiện thêm kha khá, cụ thể thì bạn nào dùng Webinoly thì sẽ cảm nhận được

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

Sau nhiều năm dùng vô số tool, script, thậm chí tự cấu hình riêng, hiện tại mình rất thích dùng Webinoly, chạy ổn định, thêm vào đó chế độ backup và restore server hiệu quả, trong trường hợp chán chán nhà cung cấp VPS cũ, mình chỉ cần chạy ít lệch là đã có thể chuyển toàn bộ cấu hình thèng bibica.net sang VPS mới mà không cần cấu hình lại, tổng thời gian chuyển sang VPS mới chỉ tầm 10-15 phút

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é 😛

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