WordPress 告别 MySQL:Docker SQLite WordPress

本篇文章聊聊,如何将这个持续诞生和维护了 21 年的开源软件“脱离数据库”运行,让它能够更加轻量、适合低成本离线运行。

写在前面

2003 年,Michel Valdrighi 基于 b2/cafelog 创建了开源软件 WordPress,并在 GPL 协议下发布。

随后的二十年里,WordPress 一路狂奔,逐渐变成了全球使用量最大的 CMS,一边是老用户吐槽的过于臃肿的 “口诛笔伐”,一边是用户量的不断攀升,在 WordPress 插件市场中出现过非常多关于性能和成本优化的方案。

使用 SQLite 替代 WordPress 默认使用的 MySQL 就是其中不可不提的方案。

  • 自 2009 年开始,社区用户 Justin Adie 就推出了能够替代 MySQL 的 PDO (SQLite) For WordPress,支持了 2.x 版本的 WordPress。
  • 2013 年开始,社区用户 Kojima Toshiyasu 推出了上面程序的改进版本,能够支持 3.x ~ 4.1 版本的 WordPress。
  • 随后 WordPress 使用的 PHP 版本进行了漫长的切换和升级,社区中许多的插件想要正确使用,都需要一些额外的工作,而这个时候,上面这些插件的作者或许是早已不再使用 WordPress ,所以插件的更新就停在了十年前,直到 2018~2019 年,WordPress 社区因为“插件和本体不兼容”的原因,批量禁用了这些插件的下载。
  • 在 2022 年 9 月,官方发布了一篇有趣的文章 Let’s make WordPress officially support SQLite,由官方支持的 SQLite 数据库替代方案有了相对稳定的保障。

不过,目前官方还未提供开箱即用的 SQLite 容器镜像,甚至在项目中也没有安装使用方案,所以我花了一些时间,折腾了一个开箱即用的开源项目,基于官方镜像,进行 SQLite 集成,让我们能够在本地脱离“MySQL / MariaDB 数据库” 来运行 WordPress。

项目代码开源在 soulteary/docker-sqlite-wordpress,欢迎自取和一键三连。

使用 SQLite 运行 WordPress 的意义

在这个地球上,不论你想创建一个大或者小一些的网站,简洁或复杂一些的网站,WordPress 都能够满足你。目前公开的市场份额统计中,WordPress 占据了网站市场的 43.3%,CMS 市场的 62.8%,大概有 4.72 亿个站点基于它运行。

常见的网站类型包含:

  • 单页登陆网站
  • 很少更新的,寥寥几页的公司网站。(带有管理功能的“静态站点”)
  • 简单的用户博客
  • 复杂的新闻网站
  • 电子商务网站
  • 成熟的 CMS 解决方案

不论 WordPress 的使用场景如何变化、受欢迎程度如何变化,唯一不变的是这些网站总是要使用 MySQL、MariaDB 这类数据库来进行数据存储。这个“限制”让 WordPress 必须运行在一些资源相对充盈的环境。

但其实如果你只有几千个用户、几千个帖子,并不需要使用 MySQL 或者 MariaDB,使用 SQLite 可以让运行资源要求降低到在手机或者路由器中运行你的网站。

之所以选择 SQLite ,因为它是一个几乎完美的选择:

  • 它是全球使用最广泛的数据库,并且是跨平台的,不论是在各种 PC、服务端程序,还是在你的手机应用中。
  • 默认情况下,它被包含在所有的 PHP 构建中。除非你在构建的使用明确禁用它。
  • 使用它可以让 WordPress 能够脱离 MySQL / MariaDB 运行在纯粹的 PHP 运行环境中,降低服务端托管成本、能源消耗和性能成本。

让我们简单来了解下它的原理和当前方案面临的问题吧。

原理和问题

想要在 WordPress 中使用 SQLite 作为数据存储后端并不复杂,目前所有的实践几乎都是使用“插件”搭配 wp-content/db.php 这个方式,来替换内置的数据库抽象层,经过大量的测试验证,这个方法是可行的。

不过,或许 WordPress SQLite 支持应该在 WordPress Core 核心支持中,而非插件中,因为数据库选择应该是首次安装站点时去确定的事情,不应该在事后完成,额外的数据库迁移动作还是非常麻烦的。

所以,官方推出了开源项目 WordPress/sqlite-database-integration,虽然目前的使用方式还是插件模式,但是后续随着完整的语法兼容(SQLite 和 MySQL 对齐),完整的应用测试覆盖后,会被直接应用到 WordPress 主干也是非常有可能的。

快速上手实践

为了解决上面插件“首次安装 WordPress不能使用 SQLite”,避免我们在“传统 WordPress 安装后迁移数据”这类麻烦事,以及,为了避免和社区里已经存在的各种三方版本的长时间的维护问题。

我创建了一个 GitHub 开源项目 soulteary/docker-sqlite-wordpress:

  • 基于 WordPress 官方 Docker 镜像构建,做加法,跟着官方走,而不是自己维护 WordPress 的镜像,更可靠,维护成本也更低
  • 基于 GitHub Action,来进行干净、透明的构建,避免黑箱操作,每个人都能够放心的使用,不用担心有“中间人”

使用方法很简单,我们可以使用下面的方法来下载镜像:

# 下载最新版本的镜像
docker pull soulteary/sqlite-wordpress
# 下载指定版本
docker pull soulteary/sqlite-wordpress:6.5.2

然后使用下面的命令来运行一个开箱即用,不需要 MySQL 这类数据库的 WordPress:

docker run --rm -it -p 8080:80 -v `pwd`/wordpress:/var/www/html soulteary/sqlite-wordpress

然后,我们打开浏览器,访问 http://localhost:8080 就能够开始著名的 “1 分钟安装” 流程,来完成网站的初始化,开始安装插件、主题,撰写你的文章内容啦。

熟悉的“安装界面”

当然,如果你是“声明式”爱好者,我们也可以使用下面的容器配置文件:

version: '3'

services:

  wordpress:
    image: soulteary/sqlite-wordpress:6.5.2
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./wordpress:/var/www/html

看起来是不是和 WordPress 官方推荐的配置类似,但是更简单呢?将上面的内容保存为 docker-compose.yml ,然后执行 docker compose up -d 就能够在浏览器开始你的 WordPress 之旅啦。

WordPress 新版本后台

得益于 SQLite 的低资源消耗和高效率,我们不论是打开后台、还是网站界面,速度都会非常的快。

WordPress 2024 网站主题

其他:性能相关

由于 PHP 的类 “Serverless” 运行机制,除了一些“缓存”相关的资源使用外,我们可以使用非常少的资源来跑 WordPress 程序。绝大多数的程序使用资源会在你的页面渲染结束后被释放回操作系统,让其他应用来使用。

如果我们使用 docker stats 来查看系统资源使用,在闲置的时候,CPU 使用率普遍是 0.1% ~ 1%,内存消耗则在 80MB~200MB。在当前硬件资源情况下,提供丰富软件功能生态的 WordPress,或许显得还挺划算的。

最后

本篇文章就先写到这里,下一篇文章里,我们深入聊聊最佳实践。这里有很多好玩的地方,比如:

  • 你可以把它当作 AI 应用流程中获取固定内容的“Bucket”,玩过 RAG 的同学是不是很熟悉。
  • 你可以把它当作一个多人协作的内容发布中心,在确定终稿后,大家再发布到各种内容平台中。
  • 你可以把它当作一个配置中心,用来控制其他程序的行为。
  • 你甚至可以拿它当作一个带管理界面的图床。

–EOF


我们有一个小小的折腾群,里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。

我们在里面会一起聊聊软硬件、HomeLab、编程上、生活里以及职场中的一些问题,偶尔也在群里不定期的分享一些技术资料。

关于交友的标准,请参考下面的文章:

苏洋:致新朋友:为生活投票,不断寻找更好的朋友

当然,通过下面这篇文章添加好友时,请备注实名和公司或学校、注明来源和目的,珍惜彼此的时间 😄

苏洋:关于折腾群入群的那些事


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年04月17日
统计字数: 4088字
阅读时间: 9分钟阅读
本文链接: https://soulteary.com/2024/04/17/say-goodbye-to-mysql-docker-sqlite-wordpress.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/565122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ARM Trace32(劳特巴赫) 使用介绍 12.1 -- Trace32 读写 64位地址】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 读写 64位地址读 64 位地址写64位地址Trace32 读写 64位地址 在使用TRACE32进行调试时,有时需要读取或操作64位的地址,特别是在处理64位的处理器或操作系统时。以下是如何在TRACE32中读取64位地址的一般方法。 读 64 位地…

Hadoop大数据处理技术-配置连接篇

​2024/4/17 Hadoop学习前的准备 3)连接虚拟机 上一节配置完成了基础的虚拟机配置及网络配置 下面我们开始建立连接 我们为什么要与虚拟机建立链接呢? 连接虚拟机就好像跟亲友联系一样 总得找个便捷又好用的工具才行 Secure CRT就像是一把能打开通向…

高斯过程回归【详细数学推导】

机器学习笔记 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例】 第八章 主成分分析【PCA降维】 第九章 隐马尔可夫模型 第十章 奇异值分解 第十一章 熵…

AI-数学-高中-39空间向量-2空间向量法(法向量)

原作者视频:【空间向量】【一数辞典】2空间向量法(重要)_哔哩哔哩_bilibili 法向量(高中阶段所有与面的关系,都可以通过法向量去证明和解答): 是空间解析几何的一个概念,垂直于平面…

JAVA学习笔记28(常用类)

1.常用类 1.1 包装类 1.包装类的分类 ​ 1.针对八中基本数据类型相应的引用类型–包装类 ​ 2.有了类的特点,就可以调用类中的方法 2.包装类和基本数据类型的转换 ​ *装箱:基本类型 --> 包装类型 //手动装箱 int n1 100; Integer integer ne…

上市公司-企业数据要素利用水平数据集及参考文献(2010-2022年)

01、数据介绍 企业数据要素利用水平是指企业在其生产经营活动中,对数据的收集、处理、分析和应用的能力及效果。这种利用水平的高低直接反映了企业在数字化时代中的竞争力和创新能力。 本数据参考《中央财经大学学报》史青春(2023)老师的研…

Excel文件解析--超大Excel文件读写

使用POI写入 当我们想在Excel文件中写入100w条数据时,我们用普通的XSSFWorkbook对象写入时会发现,只有在将100w条数据全部加载入内存后才会用write()方法统一写入,这样效率很低,所以我们引入了SXSSFWorkbook进行超大Excel文件的读…

javaWeb项目-网吧网咖管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA简介 JavaSc…

本地环境通过ssh通道连接服务器数据库,实现本地客户端和代码可以访问数据库

使用方法: ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 搭建隧道的账号搭建隧道的ip 可以增加参数-v,输出更多的信息 ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 -v 搭建隧道的账号搭建隧道的ip 有时候,测试环境的数据库不允许…

深度卷积神经网络的整体运行流程(以alexnet为例)

0.基础概念(复习一下) 1.小批量随机梯度下降 目的: 希望找到最佳的参数,使损失函数最小。 使损失函数对w求导(b就是x等于1的w),一个小批次的/eta(学习率)*小批次的平均…

hexo配置教程、主题使用及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

目录 UDP协议 UDP协议的报文结构及注意事项 UDP报文结构中的校验和字段 1. 校验和主要校验的内容 2. UDP校验和的实现方式 3. CRC(循环冗余校验)算法 4. MD5(Message Digest Algorithm 5) UDP协议 上一篇文章提过&#xf…

Linux cmake 初窥【1】

1.开发背景 linux 下编译程序需要用到对应的 Makefile,用于编译应用程序,但是 Makefile 的语法过于繁杂,甚至有些反人类,所以这里引用了cmake,cmake 其中一个主要功能就是用于生成 Makefile,cmake 的语法更…

吴恩达深度学习 (week5,6)

文章目录 一、训练开发测试集二、机器学习基础三、 正则化初步介绍四、Dropout 正则化五、其他正则化方法六、归一化输入介绍七、梯度消失与梯度爆炸八、神经网络的权重初始化九、梯度数值逼近和检验十、上述学习总结第一题 划分训练/开发/测试集第二题 开发和测试集分布第三题…

谷粒商城学习笔记

1.系统架构 2.环境准备 21.安装Linux 1.VirtualBox: https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-Win.exe 2.安装 Vagrant 1).Vagrant 下载地址: https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.msi https://www…

Obsidian 快速安装

看网上Obsidian 很好用,但自己下载总是中断,烦的要死,一度以为要开魔法…… 直到我找到了这个网站Thoughts (teambition.com) yeah~ 亲测有效,大概不到2min吧. 快速开始~,成功水了一片

海外服务器被恶意攻击怎么办

如果您的海外服务器遭受了恶意攻击,以下是一些应对措施和步骤,立即隔离服务器。如果您察觉到服务器受到恶意攻击,立即隔离服务器,将其与网络隔离,以防止攻机进一步扩散。通知服务器提供商,以便他们能够提供…

大小写不规范引起的LVS问题

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: LVS常见问题解析 综合网表不规范,大小写混用常导致LVS问题,比如两个端口clk和CLK只有大小写区别,PR工具是可以识别为两个端口的,只不过Calibre LVS默认不区分大小写,会报错。 …

第二部分-Foundation基础-学习导航

专题地址:MacOS一站式程序开发系列专题 第一部分:基础入门-学习导航 ObjectiveC-第一部分-基础入门-学习导航 第二部分:Foundation基础学习导航 Foundation框架-13-数据对象:主要讲述NSRange, NSString, NSValue, NSNull, NSD…

从旺店通·企业奇门到用友BIP通过接口配置打通数据

从旺店通企业奇门到用友BIP通过接口配置打通数据 接入系统:旺店通企业奇门 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化智能化…