转载自广联在线微信公众号。请扫描本页底部二维码关注和查看原文。
在 WordPress 中开启 Memcached 缓存支持,可以加快网站访问速度。具体原理和配置请参考 WordPress 文档。本文着重介绍下在 Docker 方式部署的 WordPress 5.7 服务器上安装 Memcached 的方法步骤。
Docker 容器的 Linux 环境中包含一套 dpkg 和 apt 的包管理工具,所以如果在运维 Docker 部署的业务时临时需要用到什么软件,一般情况可以跟 Ubuntu 一样办法,使用 apt install 命令来安排常用软件。
- 先准备好一个 Docker 方式部署的 WordPress 网站实例。
- 进入 docker 容器的运行环境。
[root@ip-172-31-35-228 centos]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ce6a0bf360d wordpress:latest "docker-entrypoint.s…" 5 days ago Up 5 days 0.0.0.0:8010->80/tcp, :::8010->80/tcp ubuylogi_wordpress_1
b6bd40497f6f mysql:5.7 "docker-entrypoint.s…" 5 days ago Up 6 minutes 3306/tcp, 33060/tcp ubuylogi_ubuy_db_1
[root@ip-172-31-35-228 centos]# docker exec -it 4ce6a0bf360d /bin/bash
root@4ce6a0bf360d:/var/www/html# cd
root@4ce6a0bf360d:~# vim
bash: vim: command not found
可以看到,vim 等一些常用的工具并不存在
- 直接用 apt-get update 更新源。
root@4ce6a0bf360d:~# apt update
Get:1 http://security.debian.org/debian-security bullseye-security InRelease [44.1 kB]
Get:2 http://deb.debian.org/debian bullseye InRelease [113 kB]
Get:3 http://deb.debian.org/debian bullseye-updates InRelease [36.8 kB]
Get:4 http://security.debian.org/debian-security bullseye-security/main amd64 Packages [29.4 kB]
Get:5 http://deb.debian.org/debian bullseye/main amd64 Packages [8178 kB]
Fetched 8401 kB in 2s (5057 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
root@4ce6a0bf360d:~#
- 先安装等下要用到的一些工具软件。apt install -y vim wget
~# apt install -y vim wget :
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libgpm2 vim-common vim-runtime xxd
……
- 同样方法安装 zlib1g-dev 和 memcached
root@4ce6a0bf360d:~# apt install -y zlib1g-dev memcached
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
……
- 安装 memcached 后别忘了启动服务。
root@4ce6a0bf360d:~# /etc/init.d/memcached start
Starting memcached: memcached.
root@4ce6a0bf360d:~#
- 下载 libmemcached 并编译和安装(以下省略各命令的输出)。
root@4ce6a0bf360d:~# cd
root@4ce6a0bf360d:~# wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
root@4ce6a0bf360d:~# tar -zxvf libmemcached-1.0.18.tar.gz
root@4ce6a0bf360d:~# cd libmemcached-1.0.18
root@4ce6a0bf360d:~/libmemcached-1.0.18# ./configure --prefix=/usr/local/libmemcached --with-memcached
root@4ce6a0bf360d:~/libmemcached-1.0.18# make && make install
……
这一版 libmemcached 在我的环境中编译会出错,如下:
CXX clients/memflush.o
clients/memflush.cc: In function 'int main(int, char**)':
clients/memflush.cc:42:19: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
42 | if (opt_servers == false)
| ~~~~~~~~~~~~^~~~~~~~
clients/memflush.cc:51:21: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
51 | if (opt_servers == false)
| ~~~~~~~~~~~~^~~~~~~~
make[1]: *** [Makefile:5832: clients/memflush.o] Error 1
make[1]: Leaving directory '/root/libmemcached-1.0.18'
make: *** [Makefile:3700: all] Error 2
root@4ce6a0bf360d:~/libmemcached-1.0.18#
原因是 clients/memflush.cc 源文件中有两处指针类型变量与布尔型的对比操作,用vim打开源文件把false改为 NULL 再重新 make 即可。
- 接下来为 php 安装 memcached 插件
root@4ce6a0bf360d:~/libmemcached-1.0.18# pecl install memcached
pecl/memcached can optionally use PHP extension "igbinary" (version >= 2.0)
pecl/memcached can optionally use PHP extension "msgpack" (version >= 2.0)
downloading memcached-3.1.5.tgz ...
Starting to download memcached-3.1.5.tgz (83,015 bytes)
....................done: 83,015 bytes
15 source files, building
running: phpize
Configuring for:
PHP Api Version: 20190902
Zend Module Api No: 20190902
Zend Extension Api No: 320190902
libmemcached directory [no] : /usr/local/libmemcached
zlib directory [no] :
use system fastlz [no] :
enable igbinary serializer [no] :
enable msgpack serializer [no] :
enable json serializer [no] :
enable server protocol [no] :
enable sasl [yes] : no
enable sessions [yes] :
building in /tmp/pear/temp/pear-build-defaultuser2i8dVo/memcached-3.1.5
……
Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20190902/memcached.so'
install ok: channel://pecl.php.net/memcached-3.1.5
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcached.so" to php.ini
root@4ce6a0bf360d:~/libmemcached-1.0.18#
安装过程中,libmemcached 头文件路径填入上面 configure libmemcached 时指定的路径,zlib 头文件路径保持 no (pecl 自动检测),下面除了 sasl 改为 no 之外,其它都按默认。
- libmemcached 安装完成后,需要从上一步输出的最后几行找到memcached so库的安装路径,填入 php 配置文件中。
root@4ce6a0bf360d:~# vim /usr/local/etc/php/php.ini
[Memcached]
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20190902/"
extension = memcached.so
- 接下来可以确认一下 memcached 模块已经被 php 加载。(可能需要重启 php 服务)
root@bd570ad1c1a5:~/libmemcached-1.0.18# php -m | grep mem
memcached
- 最后重启 Docker 容器验证。如果以上步骤都执行成功,WordPress 的 object-cache.php 和 wp-config.php 文件也做了相应正确的设定,就可以在网站后台看到 Memcached 的缓存运行情况——包括命中率等数据的显示了。