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 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ủ
Ở 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:bibica@gmail.com 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
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
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ơ
Trong trường hợp sử dụng lâu dài, thi thoảng bạn sẽ gặp tình huống bản backup cũ và bản script mới nó không cùng 1 phiên bản, có thể gặp 1 số thông báo lỗi nhất định, lúc này có thể chạy lại lệnh reset
để chỉnh sửa lại
sudo webinoly -server-reset
Trước đây sau khi cài đặt Webinoly, mình hay 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
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
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 vẫn 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
- SSL từ Cloudflare
- Releem cấu hình cho MySQL
- 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
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ị!