WordPress SQLite Docker 镜像封装细节:两年后的升级

💡 原文中文,约13800字,阅读约需33分钟。
📝

内容提要

本文介绍WordPress SQLite Docker镜像的更新,基于WordPress 7.0.2、PHP 8.5和SQLite Integration 3.0 RC。新增Rust解析扩展、多架构构建、旧卷升级修复和诊断页面,并处理ID键兼容问题。适合单机、读多写少场景,需注意插件兼容、备份和SQLite版本安全。

🔎

延伸解读

升级旧卷的注意事项

镜像新增的启动脚本会在每次启动时同步 SQLite 关键文件到挂载卷,但只处理默认的 wp-content/database 目录,不会修改自定义 DB_DIR 的所有权。升级旧卷时,数据库文件通常还在,缺的是 db.php 和 MU 插件,脚本会自动补齐。但要注意,镜像提供的 MU 插件会被覆盖,自己的 MU 插件应使用独立文件名。

SQLite 版本安全不容忽视

镜像固定了 WordPress、PHP 和 SQLite Integration 版本,但 SQLite 引擎来自 Debian 系统库,版本可能变化。2026 年需特别关注 SQLite 的 WAL-reset Bug,影响 3.7.0 到 3.51.2,3.51.3 已修复。部署验收不能只看功能下限,要核对诊断页中的实际引擎版本和补丁状态,单独更新插件无法解决引擎层问题。

备份与恢复的要点

SQLite 使用 WAL 模式时,备份不能只复制主文件,否则可能不完整。离线备份最稳妥,先停止写入再打包。不停机备份可用 VACUUM INTO 生成一致副本。升级前应配对保存镜像引用和数据库快照,回退镜像可能无法恢复旧状态。恢复后建议运行 PRAGMA quick_check、integrity_check 和 foreign_key_check 验证完整性。

性能与并发限制

Rust 解析扩展的 15.45 倍加速只是 Parser 微基准,不能直接换算成页面性能,最终收益需实测。SQLite 适合单机、读多写少场景,同一时间只有一个写事务,WAL 模式要求所有访问者位于同一台机器,不适合网络文件系统。持续长事务和并发写入会较早遇到锁竞争,监控时要关注锁错误、写入延迟和 WAL 文件增长。

Q&A

WordPress SQLite Docker 镜像的当前版本是什么?

当前版本基于 WordPress 7.0.2、PHP 8.5 和 SQLite Integration 3.0.0-rc.8,标签为 7.0.2-plugin-v3.0.0-rc.8。

如何启动 WordPress SQLite Docker 容器?

使用 docker run 命令,例如:docker run -d --name sqlite-wordpress --restart unless-stopped -p 127.0.0.1:8080:80 -v "$(pwd)/wordpress:/var/www/html" ghcr.io/soulteary/sqlite-wordpress:7.0.2-plugin-v3.0.0-rc.8,然后访问 http://localhost:8080 完成安装。

WordPress SQLite 镜像适合哪些场景?

适合单机、读多写少、小规模站点,如个人博客、小型内容站、演示环境和开发测试。多实例和高并发写入场景建议使用 MySQL、MariaDB 或 PostgreSQL。

SQLite Integration 3.0 的 Rust 解析扩展有什么作用?

Rust 解析扩展(wp_mysql_parser)用 Rust 实现 MySQL 词法分析和语法解析的热点路径,提高解析速度。驱动会自动检测扩展,存在则使用原生实现,否则回退纯 PHP。

如何检查 WordPress SQLite 的运行状态?

登录后台,打开「工具 → SQLite Diagnostics」页面,可以查看原生扩展、SQLite 引擎、连接参数、数据库文件占用、PHP 环境、drop-in 和集成插件版本等信息。

SQLite 与 MySQL 在结果键名上有什么差异?如何修复?

MySQL 通常按查询中写出的形式返回键名(如 id),而 SQLite 返回真实声明名(如 ID)。镜像提供了 sqlite-select-id-key-fix.php,通过 query Filter 将查询改写为显式别名(如 P.id AS "id"),以兼容读取小写键的插件。

如何备份 WordPress SQLite 数据库?

离线备份:停止容器后打包持久化目录(如 wordpress 目录)。不停机备份:使用 SQLite 的 Online Backup API 或 VACUUM INTO 生成一致副本,避免直接复制活跃文件。

SQLite 的 WAL 模式有什么注意事项?

WAL 模式允许读写并行,但同一时间只有一个写事务,且所有访问者需在同一台机器,不适合网络文件系统。长时间读事务会阻止检查点,导致 WAL 文件增长。synchronous=NORMAL 在断电时可能丢失最近提交的事务。

如何升级旧数据卷到新版本?

新版本增加了 docker-entrypoint-sqlite.sh,每次启动时自动同步 SQLite 关键文件到挂载卷,包括 db.php 和 MU 插件。升级前建议备份,升级后检查数据库完整性。

SQLite 引擎版本有什么安全要求?

SQLite 官方披露了一个 WAL-reset Bug,影响 3.7.0 到 3.51.2,修复版本为 3.51.3 及以上,以及 3.44.6 和 3.50.7。部署时应核对实际引擎版本,确保已修补。

🏷️

标签

➡️

继续阅读