本文特色图像由Unsplash上的Dominik Lückmann提供。

要想要更加深度地自定义WordPress站点,自己动手修改主题和插件显然是不可避免的。然而,改动站点代码的时候直接在主站操作并不是一个良好的实践,这可能会导致修改期间,站点的访问体验受到影响。如果你正巧在写数据库相关的代码,那甚至有可能威胁数据库安全。虽说小站点并不必要像支付宝的大型系统一样要求高可用性,但是在本地整一个简要的开发环境还是会大大提升开发体验的。

焊接Blocksy的时候,我图省事不想设置nginx或Apache,使用的是IIS+MySQL的方案。在Windows上,IIS确实要优于nginx/Apache的。并不是说性能上如何如何——开发环境也不需要在意服务器的性能——而是指配置难度。nginx是要手写nginx.conf的,有一定学习成本。当然你可以说上网抄不就完事了嘛,可我IIS用GUI管理工具一条龙配置不也挺香的吗?总之,这套方案伴随着我整完了Blocksy的焊接和之后的小维护。(基本上都是在更新yukicat-attach的版本)

但在准备更新到Sakurairo时,我放弃了这套方案。原因其实说来挺蠢的。我在把MySQL开放给内网的机器的时候,把localhost的访问权限取消了,直接导致我无法访问我的MySQL服务器,然后什么救援方案都救不回来。(在那台得到了权限的内网机器上访问不知道为什么特别的慢当然更主要的原因是我懒得在上面装mysql shell)于是我直接GTMD删掉了MySQL(重新配置还有很多坑,当时准备IIS+MySQL方案时搞了好久才解决,毅然转投Docker。

本文的特色图像是一个三次元的dock

那么,docker是个什么东西,为什么我们要用docker呢?

从单词字面意思上理解,dock一般翻译为“码头;月台”,而docker是在这些地方工作的工人的称呼。所以docker其实并不是图标的“货轮”的意思。虽然但是,这个图标还是挺可爱的。并且,docker也像图标描述的,像把货物放在标准的集装箱里运输一样,把应用打包在标准化的容器中部署。

就我理解,docker为我们提供了这些东西:

  • 独立的沙箱环境:docker为每一个应用准备了一个沙箱容器,也就是“打包应用的集装箱”。应用之间互相不影响,应用也不影响宿主环境。docker在每个平台上采用了尽可能低开销的方式来做到这一点。另外,不想在电脑上安装太多东西的朋友也应该会喜欢docker的隔离机制。
  • 自动化的部署流程:指导docker构建应用容器的docker镜像中包含部署应用的流程。在独立的沙箱中,这些部署命令可以稳定地运行。也就是说,只需要打一条或者几条命令,你的docker就会蹭蹭地设置好了
  • 活跃的镜像社区:在docker hub上,你能为你要用的大部分应用找到打包好了的docker镜像,比如这篇文章中要使用到的WordPress、MySQL。(你甚至能在docker里面使用docker)

而docker-compose就是连打命令行的功夫都能给你省下的工具。不过,docker-compose更加常见的用途是把多个docker容器结合在一起用。而你只需要念出docker-compose up这句咒语,就可以把他们构建起来。

综上所述,docker-compose能够稳定地、快速地建立一个WordPress开发环境。与IIS+MySQL的解决方案相比,建立速度快到不知道哪里去了。有了docker-compose就再也不能用“我环境坏了”的理由咕咕咕了(笑

那么,具体该怎么做呢?

  1. 安装docker
  2. 安装docker-compose
  3. 找一个文件夹,把docker-compose.yml放进去
  4. 启动命令行工具,定位到这个文件夹,然后运行docker-compose up
  5. docker-compose会根据docker-compose.yml中的设置自行启动各个docker容器,并将它们的控制台输出转发出来。输入Ctrl+C会关闭关联的所有docker容器。顺利的话这一步你的应用就部署好了。

此外还有操作docker-compose的几个基本指令:

  • 如果你不需要看控制台输出,在启动时可以使用docker-compose up -d,需要关闭时用docker-compose stop
  • 当你需要删除docker-compose构建的docker容器时,使用docker-compose down注意:这个是删除而不是关闭命令。
  • 想知道有哪些与文件夹内的docker-compose.yml相关的docker容器正在运行,可以使用docker-compose ps

我构建WordPress开发环境用到的docker-compose.yml,其实就是复制了docker官方提供的WordPress的设置。这个文件会在配置文件所处目录下创建一个叫/www/的文件夹。这个文件夹就是WordPress网站的根目录。为什么要把根目录暴露出来呢?因为这样Visual Studio Code才能读到WordPress的代码,从而给你提供代码提示。如果你直接打开主题目录的话会出来一堆未定义函数的警报的。

关于这个文件夹,你还需要注意一下权限问题。

Linux下要修改这个文件夹的权限才能让IDE访问编辑;

Windows要注意在Docker Desktop中开放docker容器对这个文件夹的权限,如果没有开放的话,docker-compose是不会顺利运行的。具体做法是:打开Settings->找Resources选项卡下的File Sharing,确认docker-compose.yml所在的文件夹或所在的文件夹的父目录在这个列表内。

此外,docker官方提供的这个WordPress镜像似乎ftp用不了,因此不能通过zip安装主题与插件,也不能升级WordPress(或安装语言包),不过我不需要用到就没有管。

最后是我用的docker-compose.yml的地址啦:

Github链接

jsDelivr转发

[license]