WordPress 告别 MySQL:Docker SQLite WordPress

news2024/12/25 9:10:12

本篇文章聊聊,如何将这个持续诞生和维护了 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java EE】关于Spring MVC 响应

文章目录 🎍返回静态页面🌲RestController 与 Controller 的关联和区别🌴返回数据 ResponseBody🎋返回HTML代码片段🍃返回JSON🍀设置状态码🎄设置Header🌸设置Content-Type&#x1f…

012Node.js自定义模块文件名不是index.js引入的方法

nodejs默认会找node_modules对应模块db里的index.js //var dbrequire(db) //错误,因为nodejs默认会找node_modules对应模块db里的index.jsvar dbrequire(db); //没有错误,是因为在DB目录的CMD下执行了npm init --yes,生成了package.json文…

【VIC水文模型】模型输入/输出参数简介

VIC水文模型输入参数简介 输入数据1.1 背景参数1.2 植被分类及属性配置1.3 土壤数据库制作1.4 气象数据库制作1.5 区域控制文件1.6 汇流文件制作 输出数据参考 VIC水文模型是基于空间分布网格化的分布式水文模型。通过将研究区域网格化,分别考虑每个计算网格内裸土和…

单片机之ESP8266模块

目录 ESP8266简介 前言 ESP8266的工作模式 ESP8266引脚说明 ESP8266测试 步骤 单片机与esp8266交互 前言 收到数据的格式 AP模式 服务器模式 外部执行命令 代码内执行命令 代码部分 客户端模式 外部执行命令 内部执行命令 代码部分 STA模式 服务器模式 外…

Springboot+Vue项目-基于Java+MySQL的企业客户管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Android 车载应用开发概述

前言 介绍 Android 车载应用开发 文章目录 前言一、Android Automotive OS 概述二、Android Automotive OS 架构三、常见的车载应用1、系统应用1)SystemUI是什么开发工作 2)Launcher是什么开发工作 3)Settings是什么开发工作 4)多…

SQL分组查询(Oracle)及SQL完整的查询语句

文章目录 dql--数据查询语言简单查询条件查询排序查询分组查询分组函数(聚合函数)分组查询 完整的查询语句执行顺序! DML--数据操纵语言DDL--数据定义语言dcl--数据控制语言tcl--事务控制语言 dql–数据查询语言 简单查询 SQL简单查询 条件…

JavaWeb--前端--03Vue入门

Vue入门 1 Vue概述2 快速入门3 Vue指令3.1 v-bind和v-model3.2 v-on3.3 v-if和v-show3.4 v-for3.5 案例 4 生命周期 1 Vue概述 个完整的html页面包括了视图和数据,数据是通过请求 从后台获取的,那么意味着我们需要将后台获取到的数据呈现到页面上&#…

Redis-键值设计

Redis-键值设计 1.设置key的规范 遵循基本格式:【业务名称】:【数据名】:【id】 可读性强,在客户端的情况下使用:如果前缀相同会分目录层级长度不超过44字节 string数据结构的三种类型,在44字节之内是embstring 内存…

1.5MHz,1.2A COT 架构同步降压变换器只要0.16元,型号:LN3435

推荐原因 1.5MHZ的开关频率,可以使用小电感,1.2A满足多数应用,价格感人,只要0.16元 产品概述 LN3435是一款电流模COT架构同步降压开关稳压器。 输入范围为 2.7V-6.0V,可提供 1.2A 的连续输出电流。 内部集成了低内阻…

【Excel2LaTeX】复杂表格制作的解决方案

刚开始用LaTeX写论文,遇到的第一道坎就是绘制表格,较小的普通表格可以通过简单的语法实现,但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具:Excel2LaTeX插件,下载地址&#x…

SQL系统函数知识点梳理(Oracle)

这里写目录标题 函数系统函数转换函数to_date()to_char()将数值转换成字符格式 添加货币符号将日期转换成字符 其他不常用的转换函数 字符型函数连接函数大小写转换函数大写转换小写转换首字母大写,其余的小写 替换函数去除空格函数截取函数填充函数获取字符长度函数…

35、链表-LRU缓存

思路: 首先要了解LRU缓存的原理,首先定下容量,每次get请求和put请求都会把当前元素放最前/后面,如果超过容量那么头部/尾部元素就被移除,所以最近最少使用的元素会被优先移除,保证热点数据持续存在。 不管放…

宿州市水环境投资 | 邀您参加2024全国水科技大会暨技术装备成果展览会

嘉宾简介 田 云 宿州市水环境投资建设有限公司 董事长兼总经理 报告题目:宿州市主城区水环境智慧水务建设交流 男,回族,1976年6月生,新疆克拉玛依人,2007年4月加入中国共产党,1999年7月参加工作&a…

docker安装clickhouse数据库

1.创建目录 mkdir -p /data/clickhouse/data mkdir -p /data/clickhouse/conf mkdir -p /data/clickhouse/log2.拉取镜像 docker pull clickhouse/clickhouse-server3.创建临时容器 docker run -d --rm --name clickhouse-server --ulimit nofile262144:262144 clickhouse/c…

ELK日志分析系统之Kafka

目录 一、消息队列基本介绍 1、为什么需要消息队列(MQ) 2、使用消息队列的好处 1.解耦 2.可恢复性 3.缓冲 4.灵活性 & 峰值处理能力 5.异步通信 3、Kafka消息队列的两种模式 1.点对点模式 2.发布/订阅模式 二、Kafka基本介绍 1、Kafka定义 2、Kafka概念 3、…

IO流高级流

前言 缓冲区能够提升输入输出的效率 虽然FileReader和FileWriter中也有缓冲区 但是BufferedReader和BufferWriter有两个非常好用的方法. 缓冲流 字节缓冲流 import java.io.*;public class BufferedStreamDemo {public static void main(String[] args) throws IOExceptio…

网工基础协议——TCP/UDP协议

TCP和UDP的不同点: TCP(Transmission Control Protocol,传输控制协议); UDP(User Data Protocol,用户数据报协议); TCP:传输控制协议,面向连接可靠的协议,只能适用于单播通信&…

Remote Desktop Web修改密码,自动填写域前缀

C:\Windows\Web\RDWeb\Pages\zh-CN\password.aspx 内 添加 value“ITinfra” CMD或者powershell 重启IIS服务; iisreset

【漏洞复现】飞企互联-FE企业运营管理平台 ProxyServletUti接口处存在任意文件读取漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…