LCMP Minimal : Debian – Caddy – MariaDB – PHP for bibica.net

Đây là phiên bản cài đặt server tối giản, chủ yếu chỉ để chạy WordPress trên các VPS < 1 GB RAM, 1 vCore, nhưng vẫn đảm bảo tốc độ, chịu tải và độ mượt tốt cho thèng bibica.net (khi dùng cho các VPS nhiều vCore hoặc nhiều RAM hơn thì chỉ chỉnh sửa lại vài dòng cơ bản là đủ)

Lý do đầu tiên là mình mới biết tới Reinstall OS, tình cờ thấy bản Debian 12 chỉ dùng khoảng ~100 RAM khi vừa khởi tạo 😀 các OS khác chưa làm gì đã loanh quanh 150-200MB RAM, dùng Debian là đã tiết kiệm được 50-100MB RAM mà không cần phải làm gì rồi (muốn tiết kiệm hơn nữa thì có thể dùng Debian 11, chỉ dùng khoảng 60-70MB RAM khi vừa khởi tạo)

Tiếp theo mình chọn webserver Caddy, cấu hình domain rất ít, hỗ trợ sẵn SSL và HTTP/3, không phải tinh chỉnh gì cả, trên WordPress chạy ổn định và mượt mà 😀

PHP hiện tại dùng bản v7.4, vì các plugin đang có mặt ngoài trị trường, dùng PHP 8.2, đôi khi chạy lỗi, và mình không muốn mất thời gian cho mấy chuyện này, khi nào PHP 8.2 thông dụng thì đổi lại sau

Về hiệu năng, qua bài test loader.io, PHP 8.2 nhanh hơn khoảng 5% so với PHP 7.4, ở điều kiện 50 người cùng kết nối liên tục vào database, khi vài người truy cập thì gần như không có sự khác biệt

Để tối ưu về lượng RAM sử dụng MariaDB là sự lựa chọn dễ hiểu, nhưng chọn phiên bản nào thì hơi đắn đo, trong lúc google thì thấy AWS RDS cũng vừa cập nhập lên MariaDB 10.11, công ty tầm vóc thế giới, cần độ ổn định siêu cao cho khách hàng, họ còn tự tin lên hẳn 10.11, không có lý do gì người dùng cuối dùng bản cũ hơn =))

Sau khi bốc phét các kiểu 1 tràng ở trên, cấu hình mặc định LCMP minimal của thèng bibica.net như sau

  • Debian 11/12
  • Caddy v2.8.4
  • PHP 7.4.33
  • MariaDB 10.11.8

Cài đặt LCMP Minimal

Phần lớn đều dùng các thông số mặc định, chỉ thay đổi các thứ mà mình thấy thực sự có hiệu quả, khá tương đồng với bài cài đặt LCMP trước đây, ở bài cũ mình giải thích đầy đủ các câu lệnh cài đặt rồi, bạn nào thích có thể đọc qua, bài này mình chỉ đi ngắn gọn phần cài đặt, không giải thích thêm

  • Cập nhập OS và khởi động lại VPS
sudo apt update && sudo apt upgrade -y && sudo reboot
  • Cài đặt LCMP minimal (support x86_64, ARM64, IPv4)
sudo wget https://go.bibica.net/lcmp-minimal -O server.sh && sudo chmod +x server.sh && sudo ./server.sh

Cài đặt WordPress

1. Tạo file cấu hình Caddy WordPress

Thay example.com bằng domain của bạn ở các đoạn code bên dưới

nano /etc/caddy/conf.d/example.com.conf
  • Điền vào nội dung bên dưới
www.example.com {
    redir https://example.com{uri}
}
example.com {

# Set this path to your site's directory.
    root * /var/www/example.com/htdocs
# ssl cloudflare
#    tls /etc/ssl/example.com.pem /etc/ssl/example.com.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/php7.4-fpm.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
        }
    }
}

Ctrl+O -> Enter -> Ctrl+X để save và exit.

  • Khởi động lại Caddy
systemctl restart caddy

2. Cài đặt Wordpress

Thay example.com bằng domain của bạn ở các đoạn code bên dưới

mkdir -p /var/www/example.com/htdocs
cd /var/www/example.com/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/example.com/htdocs
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Lúc này bạn có thể gõ domain example.com vào trình duyệt để cài đặt tài khoản admin

3. Cài đặt Jetpack Photon (sử dụng trên domain api.example.com)

Thay api.example.com bằng domain của bạn ở các đoạn code bên dưới

nano /etc/caddy/conf.d/api.example.com.conf
  • Điền vào nội dung bên dưới
api.example.com {
#    tls /etc/ssl/example.com.pem /etc/ssl/example.com.key
    handle_path /* {
        rewrite * /example.com/wp-content/uploads/{uri}
        reverse_proxy https://i0.wp.com {
        header_up Host {upstream_hostport}
        }
    }
}
  • Khởi động lại Caddy
systemctl restart caddy

Muốn tạo thêm trang khác thì chạy tuần tự lại các bước và tạo thêm database mới là được

# setup database
db_pass_root="Thisisdbrootpassword"
db_name="wordpress_database_name_new"
db_user="wordpress_user_new"
db_pass="password_pass_new"
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}'"

VPS cấu hình cao

Mặc định cấu hình bản LCMP minimal dành cho các VPS < 1 GB RAM, 1 vCore, nếu bạn dùng trên VPS vCore nhiều hơn, RAM nhiều hơn, thì có thể sửa lại 1 chút

nano /etc/php/7.4/fpm/pool.d/www.conf

Sẽ thấy 2 dòng bên dưới

pm = dynamic
pm.max_children = 6
  • Đổi sang dùng static, pm.max_children có thể set bằng hoặc x2 số lượng vCore đang có
pm = static
pm.max_children = 4

Tiếp theo gõ tiếp

nano /etc/php/7.4/fpm/php.ini

Kéo xuống dưới sẽ thấy các thông tin liên quan tới Opcache cache

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=10
  • Trên WordPress, số lượng code PHP thường ít, để 128MB là đủ, bạn có thể quan sát qua các plugin như WP OPcache, nếu thấy dùng gần hết 100MB, VPS thừa RAM thì có thể tăng thêm
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
  • Chỉnh sửa xong thì cần reset lại PHP để các thay đổi có hiệu lực
systemctl restart php7.4-fpm

Trên VPS 4 vCore và 4GB RAM thường mình dùng cấu hình này, VPS 1 GB RAM thì dùng theo cài đặt mặc định

Speedtest kiểm tra cơ bản

Thử nghiệm trên VPS UpCloud – Developer plans – €4.5/mo chạy WordPress v6.6 mới nhất, theme mặc định, không dùng bất kì hình thức cache nào, domain sử dụng haproxy.tech

  • OS Debian 11
  • 1 CPU
  • 1 GB RAM (849MB)
  • 20 GB HDD
  • Location: Singapore

2024 07 20 17 47 54

Caddy hỗ trợ http/3 theo mặc định rất ổn định

2024 07 20 17 50 55

Ở file cấu hình Caddy, mình ưu tiên nén các file tĩnh (.js .css) qua zstd, lý do là khi xem review, thấy mọi người khen zstd nén tốt hơn gzip một chút, không có nhiều ý nghĩa lắm

2024 07 20 18 02 31

Thử nghiệm ở bài test loader.io khá cục súc với 100 kết nối liên tục mỗi giây, nó vẫn có thể hoàn thành bài test với tốc độ trung bình khoảng 6s, khá tương tự với Webinoly

Ưu và khuyết của LCMP minimal

LCMP minimal không khác gì so với phiên bản LCMP trước đây, chỉ đổi sang dùng Debian OS nên các câu lệnh, quản trị server quen thuộc, dùng ít RAM hơn, còn lại khá tương tự

Nếu bạn dùng bản LCMP minimal này thì mình đề xuất dùng thêm

  1. SSL từ Cloudflare
  2. Releem cấu hình thêm 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

Ưu và khuyết của LCMP minimal gần như là cùng song hành, do chỉ cài đặt các thứ tối thiểu, nên nó vô cùng thiếu tính năng, nếu không muốn nói là không có bất kì tính năng nào cả, muốn gì phải tự cài vào

Bù lại cho chuyện này, nó sẽ rất hiếm lỗi, cài đặt xong thì gần như không cần nhìn tới server nữa

2023 10 18 5 19 44

Sau khi cài đặt đầy đủ các thứ như trên thì thèng bibica.net dùng loanh quanh ~700MB RAM ở VPS 4GB RAM, hoạt động nặng nhất là khi Simply Static Pro tạo file tĩnh và Duplicator Pro tạo backup trang, lượng RAM sử dụng có thể lên tới ~ 950MB

2023 10 18 13 35 44

Trên VPS 1 GB RAM thì thường dùng khoảng 500MB, hoạt động nặng nhất là khi Simply Static Pro tạo file tĩnh và Duplicator Pro tạo backup trang, lượng RAM sử dụng loanh quanh ~ 550MB

2023 10 18 5 21 31

MySQL sau khi được Releem tinh chỉnh trong 5-7 ngày, phần lớn sẽ kéo được MySQL Latency xuống dưới 2ms, cá nhân khá hài lòng với con số này

Sau 15-30 ngày, khi mọi cấu hình liên quan tới database ổn định hoàn toàn, bạn có thể tắt Releem đi cho nhẹ, đỡ các thao tác lưu check log ….

Tổng kết

Đây là bản cài đặt server mình khá hài lòng và đang dùng cho thèng bibica.net 😀 do chỉ cài đặt các thứ cốt lõi, nên thời gian cài đặt rất nhanh, khoảng 2,3 phút, cấu hình siêu đơn giản, nhẹ, mượt, đủ dùng trên các trang chạy WordPress dạng blog cơ bản 😀

Khá tự tin giới thiệu mọi người sử dụng bản cài đặt này 😀


Related Posts

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