WordPress SQLite Database

Tình cờ đọc được 1 bài viết về Docker SQLite WordPress của 1 tác giả người Trung Quốc, khá là thích, nên viết thành 1 bài giới thiệu và hướng dẫn cài đặt cho bạn nào quan tâm

Mình quan điểm dùng SQLite là bạn muốn tiết kiệm RAM, chạy trên các hệ thống 256-512MB RAM, cài trên docker nó không tối ưu cho ý tưởng này, nếu thích bạn có thể chạy qua docker, cài vào 1 phát xong luôn

Ở bài này mình cài đặt qua bản rút gọn của LCMP Minimal, sử dụng SQLite làm database, chủ yếu chỉ để chạy WordPress trên các VPS < 512 RAM, 1 vCore, cấu hình tùy chỉnh sẽ đơn giản hơn, trên docker mỗi lần cấu hình thêm sửa cái gì, google các lệnh ốm người luôn

Sử dụng thực tế thì mình thấy không có vấn đề gì với hiệu năng của SQLite, có lẽ trừ trường hợp trang của bạn có hàng triệu comment, vài chục ngàn bài viết, số lượng comment liên tục, thì hãy lo lắng hiệu năng có vấn đề, còn ở quy mô nhỏ hơn, tầm ngàn bài viết, SQLite cân thoải mái, thực tế lúc cài đặt nhiều sản phẩm khác nhau, mình có thấy vài người dùng SQLite làm database, dữ liệu lên tới vài chục GB, họ nói vẫn chạy phà phà 😀 mình cũng có thử chuyển hết bài viết, comment hiện tại trên thèng bibica.net sang bản SQLite này, thì thấy database dùng cỡ …. 10 MB

Ưu điểm:

  1. Không cần cài MySQL / MariaDB làm database, nên ăn tài nguyên hệ thống ít hơn, hạn chế các lỗi liên quan khi thiếu RAM, sập database ….
  2. Backup và restore cực kì đơn giản, chỉ cần copy nguyên thư mục gốc về, upload sang VPS mới là xong

Khuyết:

  1. Cấu hình thường khá phức tạp, có điều các tác giả viết plugin xử lý cả rồi, người dùng cuối down về chạy là được
  2. Plugin nào đó liên quan tới database chạy sẽ bị lỗi (Simply Static chẳng hạn)
  3. Hiệu năng có thể bị suy giảm ở các trang có lượng bài viết, bán hàng hay có lượng tương tác comment cực nhiều

Do đây là phiên bản rất tối giản, mình nghĩ nên cài trên Debian 11 là hợp lý nhất

Cấu hình VPS UpCloud – Developer plans – €4.5/mo

  • OS Debian GNU/Linux 11 (Bullseye)
  • Caddy v2.8.4
  • PHP 7.4.33
  • CPU: 1
  • RAM: 1 GB
  • HDD: 20 GB
  • Băng thông: 1 TB
  • Location: Singapore

Cài đặt LCMP Minimal (SQLite)

  • 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 (SQLite)
sudo wget raw.githubusercontent.com/bibicadotnet/LCMP-Minimal/main/setup_sqlite.sh -O server.sh && sudo chmod +x server.sh && sudo ./server.sh

Cài đặt WordPress

Demo trên domain sqlite.bibica.net, thay sqlite.bibica.net bằng domain của bạn ở các đoạn code bên dưới

  • Trỏ DNS về IP của VPS

2024 07 23 01 34 46

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

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

# Set this path to your site's directory.
    root * /var/www/sqlite.bibica.net/htdocs
# ssl cloudflare
#    tls /etc/ssl/sqlite.bibica.net.pem /etc/ssl/sqlite.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/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
        }
    }
    import wordpress_security
}

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

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

2. Cài đặt Wordpress

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

mkdir -p /var/www/sqlite.bibica.net/htdocs
cd /var/www/sqlite.bibica.net/htdocs
wp core download --allow-root
wget --no-check-certificate https://raw.githubusercontent.com/aaemnnosttv/wp-sqlite-db/master/src/db.php -O /var/www/sqlite.bibica.net/htdocs/wp-content/db.php
mv /var/www/sqlite.bibica.net/htdocs/wp-config-sample.php /var/www/sqlite.bibica.net/htdocs/wp-config.php
chown -R caddy:caddy /var/www/sqlite.bibica.net/htdocs
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

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

2024 07 23 01 42 54

Mặc định lúc này database của WordPress sẽ nằm trong thư mục /wp-content/database

2024 07 23 01 44 02

Speedtest kiểm tra cơ bản

Để ổn định các thứ, mình sẽ reboot lại VPS 1 phát rồi kiểm tra vài bài test cơ bản

2024 07 23 01 47 54

Do không dùng MySQL / MariaDB làm database, cài đặt xong WordPress chỉ dùng ~150 MB RAM

2024 07 23 01 52 12

Chạy thử bài test 100 kết nối mỗi giây từ loader.io

2024 07 23 01 54 20

Hiệu năng chịu tải tương tự như khi dùng MariaDB làm database, tốc độ trung bình ~ 6s

Mình có thử backup toàn bộ thèng bibica.net, thử nghiệm nhanh trên core của WordPress, các phần cơ bản chạy cực mượt, xem bài ở tình huống không cache gần như tức thời, hơi bất ngờ vì trên MariaDB mình phải tinh chỉnh lại khá nhiều thông số thì mới đạt tốc độ cài đặt mặc định của SQLite

Đôi vấn đề gặp phải là nếu bạn dùng 1 plugin nào đó cần kết nối vào database mà code hơi ngu như phần Archives, kiểu nó load các bài theo năm tháng, tính tổng các bài trong nằm … dữ liệu load ra hơi chậm 1 tẹo, phần này thì đơn giản kiếm plugin khác chạy là được, không có vấn đề gì đặc biệt

Kết luận

Trước đây thì mình khá rén hiệu năng của SQLite, mà sau khi dùng Artalk làm phần comment cho thèng bibica.net, chạy gần 1 năm nay, không gặp bất cứ vấn đề gì liên quan tới hiệu năng, nói chính xác hơn mình nghĩ khó có trang blog nào có thể chạm tới kịch trần giới hạn của SQLite, vì blog nó rất cơ bản, đa phần là xem bài, chưa kể phần lớn chúng ta sẽ cache qua Cloudflare hoặc 1 plugin bất kì thì thoải mái cả

Mình nghĩ SQLite làm database thoải mái, thậm chí là quá thừa ở phần lớn các nhu cầu 😀 tất nhiên thì vẫn chỉ nên dùng nó trên các trang blog cá nhân, còn làm cho khách, hay cơm gạo thì cứ chạy MySQL / MariaDB như thông thường cho nhàn, đỡ tốn thời gian đi xử lý các lỗi (nếu có)

Tổng thể hài lòng với hiệu năng của SQLite, có lẽ 1 thời gian nữa, khi WordPress chính thức hỗ trợ SQLite, mình sẽ chuyển sang dùng cho nhà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ị!