GitHub Đây là phiên bản cài đặt LCMP Linux-Caddy-MariaDB-PHP trên WordPress, hỗ trợ sẵn HTTP/3, SSL, phiên bản cụ thể AlmaLinux 9 – Caddy v2.7.4 – PHP 7.4.33 – MariaDB 10.11.5
Có rất nhiều script auto ngoài thị trường, nhưng phần lớn chúng chỉ chạy trên các webserver như Apache, Nginx, LiteSpeed (OpenLiteSpeed) … còn Caddy thì mình chưa thấy ai viết cả script auto hoàn chỉnh nào cả
Các bài hướng dẫn cài đặt thì nhiều, nhưng chúng đều ở mức cực kì cơ bản, bài chuyên sâu nhất mình thấy là các lệnh cài đặt Caddy, MariaDB, PHP, Wordpress từ bài hướng dẫn của Teddysun
Phần lớn các câu lệnh cài đặt mình lấy từ bài hướng dẫn của Teddysun, phiên bản cài đặt bên dưới cũng là phiên bản mình đang dùng để cài đặt cho thèng bibica.net, ý tưởng ban đầu là để chạy trên VPS cấu hình thấp, giá rẻ < $5, 1 vCore, 1 GB RAM
Mình đã cố gắng chuyển mọi thứ đang dùng bên Nginx sang Caddy, nhu cầu của mình cũng ở mức cơ bản, trên Nginx chỉ dùng thêm Reverse Proxy FastCgi Cache để custom domain và cache các file ảnh từ Jetpack Photon, Cloudinary, khoản Reverse Proxy thì Caddy làm siêu tốt, nhưng cache thì không hỗ trợ, search thì thấy addon Caddy Http Cache do thành viên sillygod viết bổ xung, dùng để cache khá ổn, ai mà cấu hình chẳng chịt bên trong Nginx thì công đoạn chuyển giao cực hơn, vì gần như phải sửa lại toàn bộ
Trong trường hợp bạn muốn dùng bản PHP hay MariaDB khác hoặc dùng trên VPS nhiều vCore, nhiều RAM hơn thì chỉnh sửa lại 1 tẹo là được
Caddy chào hàng sản phẩm bằng 2 tính năng rất hiếm ở thời điểm nó ra mắt, là hỗ trợ HTTP/2 (hoặc HTTP/3 ở hiện tại) và tự động cấu hình gia hạn SSL, 2 tính năng này được bật mặc định, người dùng không cần cấu hình bất cứ dòng nào, tuy thế với mình, người đang sử dụng gần như mọi dịch vụ từ Cloudflare, nó đã có sẵn HTTP/3 và SSL, 2 tính năng chào hàng của Caddy, gần như vô dụng
Khi sử dụng thực tế, mình gặp chuyện rất quái, mà khi viết xong bài này rồi, vẫn không thể nào giải thích được
Caddy, PHP và MariaDB trên AlmaLinux 9 nó mượt một cách kì lạ, cũng phần cứng thế, cũng cấu hình PHP, MariaDB như thế, cùng data của thèng bibica.net, cùng 1 đường mạng VNPT, trên Nginx nó mượt, nhưng Caddy lại cho cảm giác mượt hơn, dù xét theo thời gian load nhanh chậm, nó gần như tương đồng
Trên Nginx thi thoảng mình gặp tình huống click chuyển trang, đôi khi nó quay khá lâu, còn trên Caddy thì 99% các lần, đều thấy chạy như ăn cướp 😀 đặc biệt là khu vực admin của WordPress, bị trí không cache, ở thao tác viết bài, lưu bài tự động, lưu bài thủ công, xem trước bài viết …. Caddy nhanh hơn rõ rệt, cảm giác cắn vào dabasera rất ngọt 😀
Về điểm này thì Caddy khá giống Litespeed, dùng cảm giác mượt, nhưng không giải thích được nó mượt là làm sao 😀 vì dựa vào các con số benchmarks thì đa phần na ná nhau cả
Ưu điểm:
Do tự cài thủ công, nên gần như muốn gì thì cài vào, có thể setup chạy trên x86_64, arm64 hay only IPv6 thoải mái, kiểm soát lỗi (nếu có) cũng đơn giản hơn, vì tự làm cả =))
Muốn cài thêm addon cho PHP, Candy cũng khá đơn giản, các câu lệnh cơ bản tương tự
Tốc độ và chịu tải khá tương đồng với các script auto đang có ngoài thị trường, các thao tác trong quản trị admin WordPress nhanh hơn khá rõ
Cấu hình trên Caddy rất ít, mở file cấu hình ra, có thể quan sát toàn bộ các cấu hình (trên Nginx dùng Centminmod nhìn cấu hình là nhũn não luôn)
Khuyết điểm:
Cái gì cũng phải …. tự cài 😀 cái gì cũng phải tự học và Google, phải copy, paste 1 đống lệnh cả khi cài đặt lẫn tạo mới trang 😛
Bản thân Caddy thì theo mình là tuyệt vời, nhưng rất nhiều tính năng, Caddy chưa hỗ trợ, thậm chí 1 tính năng khá cơ bản là cache Caddy cũng không có??? các plugin do end user tự viết thêm thì hiệu năng, tính năng, độ ổn định …. thường khá tệ
Nếu chỉ cài đặt WordPress, trên 1 trang cá nhân, quản lý thông thường thì rất đáng trải nghiệm dùng thử, nhưng nếu bạn cấu hình phức tạp phía server, phải đọc 1 đống hướng dẫn từ Caddy, siêu mất thời gian, đôi khi tính năng nào đó, trên các server khác có, mà trên Caddy lại chẳng ai thèm làm 😀
Rất nhiều bài hướng dẫn, review về Caddy nó đều quá cũ, không có tác dụng ở phiên bản hiện tại, tìm kiếm thông tin thực sự mệt mỏi, phần lớn người dùng cũng chỉ cài đặt sơ bộ, chạy ít ngày cho biết rồi dùng lại Apache, Litespeed, Nginx cho quen thuộc …. nên rất khó kiếm bài chuyên sâu nào về Caddy
Để hoàn thành phần cache ở bài viết này, ngoài chuyện xem hướng dẫn bằng tiếng Anh từ trang chủ Caddy, mình phải xem khá nhiều hướng dẫn từ 1 số thành viên người Trung Quốc và Nhật Bản, ơn trời là Google dịch sát nghĩa, đọc hiểu :]] kiểu đơn giản là add thêm plugin cho Caddy, ấn vào xem thì nó yêu cầu cài vào go, sau đó cài xcaddy, sau đó mới cài plugin đó, trong khi trong doc hướng dẫn của Caddy, dùng tùy chọn caddy add-package
là chạy rồi
Cấu hình thử nghiệm:
- OS: AlmaLinux 9, UpCloud 1 GB RAM – Singapore
- OS: AlmaLinux 9, Oracle 4-6-24 GB RAM – Singapore
Cấu hình mình dùng thử khá nhiều, từ tối thiểu 1 GB RAM tới tối đa 24 GB RAM
Bản cài đặt bên dưới mình giải thích khá nhiều, nếu bạn chỉ muốn cài nhanh gọn, chạy là được, có thể xem bản cài đặt mình dùng cho thèng haproxy.tech
Cài đặt LCMP
- Cài đặt wget
sudo dnf install wget -y
sudo wget https://go.bibica.net/lcmp -O lcmp.sh && sudo chmod +x lcmp.sh && sudo ./lcmp.sh
- Nếu VPS của bạn chỉ có IPv6 thì cài đặt bản này
sudo wget https://go.bibica.net/lcmp_ipv6 -O lcmp_ipv6.sh && sudo chmod +x lcmp_ipv6.sh && sudo ./lcmp_ipv6.sh
- Thông tin Database tạo sẵn
Database Root Password: Thisisdbrootpassword Database Name: wordpress_database_name_99999 Database User: wordpress_user_99999 Database Pass: password_pass_99999
Sau khi cài đặt xong, thông tin cơ bản của VPS nó sẽ như hình bên dưới
- Vào thư mục root, sẽ thấy 2 thư mục là www và caddy (set thế để vào các thư mục quan trọng nhanh hơn)
- Mình đã tạo sẵn cấu hình cho domain bibica.net chạy WordPress, domain api.bibica.net là trang images dùng Jetpack Photon, domain i0.bibica.net và i.bibica.net dùng Cloudinary (mở ra tham khảo nếu bạn lần đầu dùng Caddy)
Cài đặt WordPress
Để demo thì mình sẽ tạo 1 trang WordPress mới với domain là lcmp.bibica.net
- Tạo file cấu hình Caddy cho lcmp.bibica.net
nano /etc/caddy/conf.d/lcmp.bibica.net.conf
- Điền vào nội dung bên dưới (sửa lại nội dung dòng 1-2-4-7 theo domain bạn dùng)
www.lcmp.bibica.net { redir https://lcmp.bibica.net{uri} } lcmp.bibica.net { # Set this path to your site's directory. root * /var/www/lcmp.bibica.net/htdocs # ssl cloudflare # tls /etc/ssl/bibica.net.pem /etc/ssl/bibica.net.key encode zstd gzip @disallowed { path /xmlrpc.php path /wp-content/uploads/*.php } rewrite @disallowed /index.php # Serve a PHP site through php-fpm php_fastcgi unix//run/php-fpm/www.sock @static { file path *.css *.js *.ico *.woff *.woff2 } handle @static { header Cache-Control "public, max-age=31536000" } @static-img { file path *.gif *.jpg *.jpeg *.png *.svg *.webp *.avif } handle @static-img { header Cache-Control "public, max-age=31536000, immutable" } # Enable the static file server. file_server { precompressed zstd gzip index index.html } log { output file /var/log/caddy/ssl_access.log { roll_size 100mb roll_keep 3 roll_keep_for 7d } } }
Mặc định Caddy sẽ tự tạo và renew SSL + HTTP3, demo mình cũng để Caddy tự làm
Nếu thích dùng ssl ngoài như Cloudflare thì bỏ dấu # đằng trước tls /etc/ssl/bibica.net.pem /etc/ssl/bibica.net.key, chép file .pem .key của bạn vào thư mục /etc/ssl/ (tương tự cấu trúc thế là được)
- Khởi động lại Caddy
systemctl restart caddy
- Dùng WP-CLI để download và cài đặt WordPress cho nhanh
mkdir -p /var/www/lcmp.bibica.net/htdocs cd /var/www/lcmp.bibica.net/htdocs wp core download --allow-root wp core config --dbhost=localhost --dbname=wordpress_database_name_99999 --dbuser=wordpress_user_99999 --dbpass=password_pass_99999 --allow-root chown -R caddy:caddy /var/www/lcmp.bibica.net/htdocs find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \;
- Lúc này có thể đổi DNS, vào lcmp.bibica.net sẽ thấy có SSL, hiện ra trang cài đặt WordPress
- Vì lý do nào đó, nếu chưa có ssl, có thể khởi động lại Caddy để tạo lại ssl
systemctl restart caddy
Cấu hình reverse proxy cho Jetpack Photon
Nếu bạn đang custom domain cho Jetpack Photon thì có thể dùng cấu hình reverse_proxy bên dưới
- Tạo file cấu hình Caddy cho api.bibica.net
nano /etc/caddy/conf.d/api.bibicad.net.conf
- Điền vào nội dung bên dưới
api.bibica.net { tls /etc/ssl/bibica.net.pem /etc/ssl/bibica.net.key handle_path /* { http_cache { cache_type in_memory # cache_type file # path /var/www/bibica.net/cache match_path / default_max_age 3153600000s status_header api.bibica.net } rewrite * /bibica.net/wp-content/uploads/{uri} reverse_proxy https://i0.wp.com { header_up Host {upstream_hostport} } } }
Mình đang sử dụng thêm addon Caddy Http Cache để cache cho Caddy (với mong muốn tốc độ sẽ nhanh hơn)
cache_type in_memory
là đang lưu cache trực tiếp vào RAM, trong trường hợp bạn muốn lưu cache vào ổ cứng thì xóa dòng đó đi, xóa tiếp dấu # ở 2 dòng # cache_type file # path /var/www/bibica.net/cache
để chuyển sang lưu trên ổ cứng
status_header
là tiêu đề cache, báo HIT, MISS …
match_path /
là cache tất cả mọi thứ, do trên domain api.bibica.net chỉ dùng ảnh từ Jetpack Photon, nên mình cấu hình như thế
Giá trị rewrite
và reverse_proxy
thì đổi lại theo link Jetpack Photon của bạn
Cấu hình reverse proxy cho Cloudinary
Nếu bạn đang custom domain cho Cloudinary thì có thể dùng cấu hình reverse_proxy bên dưới
- Tạo file cấu hình Caddy cho i.bibica.net
nano /etc/caddy/conf.d/i.bibicad.net.conf
- Điền vào nội dung bên dưới
i.bibica.net { header -Cache-Control header -server-timing header -Content-Disposition header -Content-Type header -Vary header -accept-ranges header -access-control-allow-origin header -access-control-expose-headers header -content-dpr header -etag header -last-modified header -timing-allow-origin header -x-content-type-options header -x-request-id header Cache-Control "public, max-age=315360000, immutable" tls /etc/ssl/bibica.net.pem /etc/ssl/bibica.net.key handle_path /* { http_cache { cache_type in_memory # cache_type file # path /var/www/bibica.net/cache match_path / default_max_age 3153600000s status_header i.bibica.net } rewrite * /xinclub/f_webp,q_auto:best/img/{uri} reverse_proxy https://res.cloudinary.com { header_up Host {upstream_hostport} } } }
Tương tự như cấu hình cho Jetpack Photon, mình chỉ bổ xung thêm các giá trị header -
là xóa dòng header đó đi
Sử dụng thực tế hàng ngày thì có thể cài thêm
- Releem tự 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
Giải thích các lệnh bên trong file setup x86_64, ARM64
- IPv4 thông thường thì dùng nameserver Google và Cloudflare
# Set nameserver google, cloudflare echo -e "nameserver 8.8.8.8\nnameserver 1.1.1.1" > /etc/resolv.conf
- IPv6 thì dùng nameserver trex.fi
# Set nameserver trex.fi echo -e "nameserver 2001:67c:2b0::4\nnameserver 2001:67c:2b0::6" > /etc/resolv.conf
- Cập nhập OS và cài đặt 1 số thứ râu ria
# Update sudo dnf update -y sudo dnf install epel-release -y sudo dnf install htop -y sudo dnf install zip -y sudo dnf install unzip -y sudo dnf install screen -y sudo dnf install wget -y
- Đổi về giờ Việt Nam
# Set time Viet Nam timedatectl set-timezone Asia/Ho_Chi_Minh
- Bật BBR
# Enable TCP BBR congestion control cat <<EOF > /etc/sysctl.conf # TCP BBR congestion control net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr EOF
- Tạo 2GB RAM ảo
# swapfile sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo cp /etc/fstab /etc/fstab.bak echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab sudo sysctl vm.swappiness=10
- Tắt SELINUX
# SELINUX=disabled sed -i 's@^SELINUX.*@SELINUX=disabled@g' /etc/selinux/config setenforce 0
- Tắt firewall
# Off Firewall sudo systemctl stop firewalld sudo systemctl disable firewalld sudo systemctl mask --now firewalld
- Cài đặt Caddy và addon cdp-cache
# Setup Caddy dnf install -y dnf-plugins-core dnf copr enable @caddy/caddy -y && dnf install -y caddy && caddy version caddy add-package github.com/sillygod/cdp-cache mkdir -p /data/www/default mkdir -p /var/log/caddy/ mkdir -p /etc/caddy/conf.d/ chown -R caddy.caddy /data/www/default chown -R caddy.caddy /var/log/caddy/ wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/Caddy/Caddyfile -O /etc/caddy/Caddyfile
Nếu bạn muốn cài thêm addon khác thì dùng cấu trúc tương tự caddy add-package github.com/sillygod/cdp-cache
- Cài đặt Mariadb 10.11
# Setup mariadb 10.11 wget -qO mariadb_repo_setup.sh https://downloads.mariadb.com/MariaDB/mariadb_repo_setup chmod +x mariadb_repo_setup.sh ./mariadb_repo_setup.sh --mariadb-server-version=mariadb-10.11 dnf install -y MariaDB-common MariaDB-server MariaDB-client MariaDB-shared MariaDB-backup lnum=$(sed -n '/\[mariadb\]/=' /etc/my.cnf.d/server.cnf) sed -i "${lnum}acharacter-set-server = utf8mb4\n\n\[client-mariadb\]\ndefault-character-set = utf8mb4" /etc/my.cnf.d/server.cnf systemctl start mariadb db_pass_root="Thisisdbrootpassword" mysql -e "grant all privileges on *.* to root@'127.0.0.1' identified by \"${db_pass_root}\" with grant option;" mysql -e "grant all privileges on *.* to root@'localhost' identified by \"${db_pass_root}\" with grant option;" mysql -uroot -p${db_pass_root} 2>/dev/null <<EOF drop database if exists test; delete from mysql.db where user=''; delete from mysql.db where user='PUBLIC'; delete from mysql.user where user=''; delete from mysql.user where user='mysql'; delete from mysql.user where user='PUBLIC'; flush privileges; exit EOF systemctl stop mariadb
Nếu dùng bản Mariadb khác thì thay mariadb-10.11
bằng con số đó
- Cài đặt PHP 7.4
# Setup php 7.4 dnf config-manager --set-enabled crb dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm dnf module reset -y php dnf module install -y php:remi-7.4 dnf install -y php-cli php-bcmath php-embedded php-gd php-imap php-mysqlnd php-dba php-pdo php-pdo-dblib php-pgsql php-odbc php-enchant php-gmp php-intl php-ldap php-snmp php-soap php-tidy php-opcache php-process php-pspell php-shmop php-sodium php-ffi php-brotli php-lz4 php-xz php-zstd dnf install -y php-pecl-imagick-im7 php-pecl-zip php-pecl-mongodb php-pecl-grpc php-pecl-yaml php-pecl-uuid php-zip chown root.caddy /var/lib/php/session chown root.caddy /var/lib/php/wsdlcache chown root.caddy /var/lib/php/opcache
Muốn dùng bản PHP 8.2 thì thay remi-7.4
thành remi-8.2
Các module
- Tối ưu 1 số giá trị PHP, MariaDB
# Optimization PHP, MariaDB wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/PHP/php.ini -O /etc/php.ini wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/PHP/www.conf -O /etc/php-fpm.d/www.conf wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/MySQL/my.cnf -O /etc/my.cnf
Các thay đổi PHP khá cơ bản, tăng thời gian chạy các file php, tăng giới hạn upload file, không giới hạn hàm nào
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=100000 opcache.max_wasted_percentage=10
pm.max_children = 6 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 4
Về MariaDB, thông số cụ thể tại đây
- Nếu dùng VPS nhiều vCore, nhiều RAM hơn thì có thể tăng opcache lên
opcache.memory_consumption=1024 opcache.interned_strings_buffer=128
FPM Configuration đổi sang dùng static
pm = static pm.max_children = 8
Giá trị pm.max_children
bằng vCore x2, 4 vCore thì pm.max_children = 8
MariaDB cứ dùng bản mặc định như cài đặt, sau đó cài thêm Releem để tự cấu hình là đủ
- Tạo link rút gọn cho 2 thư mục /var/www và /etc/caddy (chuyển nó vào thư mục root)
# Create symbolic link ln -s /var/www /root/ ln -s /etc/caddy /root/
- Bật các dịch vụ và tự khởi động sau khi reboot
# start systemctl enable mariadb systemctl enable php-fpm systemctl enable caddy systemctl start mariadb systemctl start php-fpm systemctl start caddy
- Tạo ssl và file cấu hình caddy mẫu trên domain bibica.net, api.bibica.net, i0.bibica.net, i.bibica.net (phần này không quan trọng)
# setup ssl mkdir -p /etc/ssl/ sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/ssl/bibica.net.pem -O /etc/ssl/bibica.net.pem sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/ssl/bibica.net.key -O /etc/ssl/bibica.net.key # setup bibica.net, api.bibica.net, i0.bibica.net, i.bibica.net mkdir -p /var/www/bibica.net/cache chown -R caddy:caddy /var/www/bibica.net/cache sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/bibica-net-caddy-config/bibica.net.conf -O /etc/caddy/conf.d/bibica.net.conf sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/bibica-net-caddy-config/api.bibica.net.conf -O /etc/caddy/conf.d/api.bibica.net.conf sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/bibica-net-caddy-config/i0.bibica.net.conf -O /etc/caddy/conf.d/i0.bibica.net.conf sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/LCMP-bibicad.net/main/bibica-net-caddy-config/i.bibica.net.conf -O /etc/caddy/conf.d/i.bibica.net.conf systemctl restart caddy
- Cài đặt WP-CLI và Rclone
# setup wp-cli curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp-cli.phar mv wp-cli.phar /usr/local/bin/wp # setup rclone sudo -v ; curl https://rclone.org/install.sh | sudo bash
- Demo tạo crontab cho wp_cron and simply-static
# setup crontab cho wp_cron and simply-static crontab -l > simply-static echo "0 3 * * * /usr/local/bin/wp --path='/var/www/html' simply-static run --allow-root" >> simply-static echo "*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1" >> simply-static crontab simply-static
Set 1 phút chạy 1 lần wp_cron, 3h sáng hàng ngày tự chạy simply-static
- Tạo database
# setup database db_pass_root="Thisisdbrootpassword" db_name="wordpress_database_name_99999" db_user="wordpress_user_99999" db_pass="password_pass_99999" mysql -uroot -p${db_pass_root} -e "CREATE DATABASE ${db_name} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" mysql -uroot -p${db_pass_root} -e "GRANT ALL ON ${db_name}.* TO '${db_user}'@'localhost' IDENTIFIED BY '${db_pass}'"
Bạn có thể dùng cấu trúc tượng tự như thế, nếu muốn tạo thêm database khác, đổi db_name
, db_user
, db_pass
sang giá trị khác
- Tạo thư mục cài đặt WordPress, phân quyền ….
# make foder bibica.net mkdir -p /var/www/html cd /var/www/html # wp core download --allow-root # wp core config --dbhost=localhost --dbname=$db_name --dbuser=$db_user --dbpass=$db_pass --allow-root chown -R caddy:caddy /var/www/html find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \;
Quan trọng nhất là dòng chown -R caddy:caddy /var/www/bibica.net/htdocs
, để Caddy có thể truy xuất các file và thư mục, phân quyền các thư mục, file bên trong thì thật ra WordPress cũng tự quản lý được cả 😀
- Hiện thông tin database
# show info database green() { echo -e '\e[32m'$1'\e[m'; } green "Database Root Password: $db_pass_root\nDatabase Name: $db_name\nDatabase User: $db_user\nDatabase Pass: $db_pass"
Đoạn này tô xanh phần thông tin database vừa tạo ra cho dễ nhìn, tiện copy điền các thông tin vào WordPress thôi
Hiệu năng và các vấn đề
Hiện tại mình dùng Cache Rules Cloudflare để tạo cache cho toàn trang, nên không còn quan tâm tới chuyện cấu hình phía server lắm, đủ dùng cho khoảng 5-10 kết nối cùng lúc là quá thừa ở sử dụng thực tế, tại khó có chuyện thèng bibica.net trong 1s có 5-10 comment, mà chuyện này thì bạn cài đặt mặc định đã đáp ứng được 😀
Nếu không có bài này, sợ ít ai biết là thèng bibica.net bữa giờ đang chạy qua Caddy và thèng api.bibica.net, i0.bibica.net, i.bibica.net đang chạy qua Caddy Http Cache á 😀
Nếu thích, bạn cũng có thể thử hiệu năng của phiên bản LCMP, bằng cách cài vào 1 trang WordPress mặc định, trên cùng 1 cấu hình, sau đó so với các tool, script auto chạy Apache, Nginx, LiteSpeed (OpenLiteSpeed) … mình thử sơ bộ thì thấy khá tương đồng với Webinoly, 100 kết nối mỗi giây trên WordPress mặc định tốc độ trung bình ~ 3.4s
Trên Caddy việc cấu hình siêu đơn giản, nhưng vấn đề là bạn phải …. biết, bạn không biết thì nó quá là phức tạp, vì phải tìm hiểu gần như mọi thứ, quan trọng nhất là số lượng người dùng Caddy không nhiều, chỉ rộ lên ở giai đoạn 2017-2021 …. khi mình search thì thấy các bài viết xuất bản ờ 2022-2023 rất ít
Các file cấu hình Caddy bên trên, liên quan tới reverse_proxy, rewrite, handle_path, http_cache … nhìn vào bạn sẽ thấy nó siêu ngắn, tầm 10-15 dòng code, trên Nginx chức năng tương tự thì đa phần ~100 dòng, thậm chí file cấu hình WordPress trên Caddy có thể rút gọn xuống 20-30 dòng, rất dễ để đọc
Vấn đề là trên Nginx, nó quá thông dụng, nên các code mẫu đầy ra 😀 google phát hướng dẫn tận răng, copy paste là xong 😛 thậm chí rất nhiều tool, script auto, tự động cấu hình cài đặt sẵn, bạn không phải chỉnh sửa dòng code nào luôn
Trên Caddy thực tế thì mình mất khá nhiều thời gian để nhét dòng nào vào …. vị trí nào 😀 tại nhét không đúng vị trí là văng lỗi ^_^ dựa vào thời gian chụp tấm ảnh trên, thì thời gian hoàn thành bài này, mất khoảng 4-6 ngày cho các đoạn code liên quan tới cache, vì mình cũng chịu, chẳng biết addon cache nào chạy đúng ý, cứ phải cài vào, xem doc, nhét từng dòng vào theo cách tác giả viết … sau đó chạy thử nghiệm hiệu năng …..
Sử dụng thì mình thấy mọi tính năng mà Caddy có, đều vận hành rất tốt, còn những thứ mà Cadddy không có, thì nó thực sự tệ
Khá nhiều thứ Caddy xử lý không nổi, cụ thể nhất về công nghệ nén BR mà hiện tại Cloudflare đang dùng, mình đọc lướt thì Caddy không xử lý được, thời gian nén file còn lâu hơn cả thời gian load trực tiếp file thì chịu rồi 😛
Hay như vấn đề cache, Nginx có FastCgi Cache, hiệu năng mạnh, tính năng phong phú, Caddy cũng làm không nổi, phiên bản cache-handler của họ, sửa lại từ bản gốc của Souin, hay như phiên bản Caddy Http Cache mình đang dùng ở bài này, so sánh với FastCgi Cache trên tình huống cụ thể là cache ảnh dạng tĩnh qua reverse proxy, sau đó load qua Cloudflare thì chậm hơn khoảng 0.2-0.4s khi load cùng lúc khoảng 100 tấm ảnh (do test trực tiếp bằng đường truyền mạng, nên sai số có thể có), ở điều kiện load cùng lúc 10-30 tấm ảnh thì khá tương đồng, đôi lúc cảm giác Caddy Http Cache nhanh hơn FastCgi Cache 1 tẹo không đáng kể
Đấy là mình chưa bàn chuyện cache cho 1 trang động như WordPress nhé, mình có thử search Caddy cache WordPress thì không ra 1 bài hướng dẫn nào để làm luôn, phần lớn các bài viết cũ, đều chỉ nói mài dùng Caddy cache file tĩnh thôi, đừng cache mí trang động, bọn teo chưa xử lý được :]]
Google thêm 1 chút thì mình thấy đa phần mọi người dùng Caddy để làm reverse proxy trên Docker là chính, vì nó tự tạo ssl nhàn 😀 thực tế trang file.bibica.net mình cũng setup kiểu này cho nhàn 😀
Còn dùng thuần Caddy như một webserver để chạy web thì cực ít luôn
Quan trọng nhất là vấn đề lòng tin, một webserver ra mắt từ 2015, sau 8 năm phát triển mà các tính năng cơ bản nhất vẫn chưa có (hoặc chưa đi vào ổn định), tính năng, sửa lỗi liên tục như thế thì gần như không trang thương mại, cơm gạo nào dám dùng
Tổng kết
Mình vẫn rất có thiện cảm với Caddy, vì với người không biết tí gì về webserver như mình, đọc cấu hình Nginx hay Caddy không khác gì cả, đều phải google đủ kiểu 😛 Caddy đọc ít và ngắn hơn, dễ quan sát hơn 😛 hiệu năng ở các phiên bản hiện tại rất tốt, thực sự mượt mà, dùng trên các trang cá nhân, nghịch phá thì mình hoan nghênh, vì khá là vui 😀 trên các trang cần ổn định thì cứ như trước giờ là được, không cần đú Caddy làm gì cho phiền
Do đây là lần đầu tiên mình cấu hình toàn bộ phần server, nên bài này hơi dài dòng, và mang tính nói nhảm khá nhiều 😀
Update
08/10/2023: sử dụng cài đặt mặc định MySQL từ CloudPanel (hiệu năng liên quan tới database tốt hơ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ị!