文章目录
在部署 Wordpress 前我们要考虑一个问题,就是 PHP 的扩展,比如说我希望在我的 Wordpress 上使用 Memcached,那么我们就不能直接使用 Wordpress 默认的镜像,因为默认的镜像并没有安装相应的 PHP 扩展。
这时我们就可以使用 Dockerfile 来构建一个自定义镜像,在构建过程中就可以安装自己需要的 PHP 扩展,如 Memcached、Redis、Brotli 等等。
接下来我们就开始一步一步的使用 Docker 来部署自己的 Wordpress 站点吧。
部署 Wordpress
正式部署前先说明,由于我曾测试 Memcached 与 Redis,所以 PHP 扩展里我都安装了相应的扩展。正常使用的话可以只安装其中一个,当然了,你要是和我一样都安装了也是可以的。
构建自定义镜像
创建一个目录用作存储与 Wordpress 相关的所有文档并进入该文件夹
mkdir -p ~/docker/wordpress && cd ~/docker/wordpress
创建 Dockerfile 文件
vim Dockerfile
拷贝以下内容
FROM wordpress:php8.3
RUN apt update && apt install -y libmemcached-dev zlib1g-dev libssl-dev libbrotli-dev openssh-client libssh2-1-dev \
&& pecl install memcached \
&& pecl install memcache \
&& pecl install redis \
&& pecl install brotli \
&& pecl install ssh2 \
&& docker-php-ext-enable memcached memcache redis brotli ssh2
注:我在安装 Memcached 扩展时踩了不少的坑,构建镜像时一直报错。原因是 Debian 版本的原因导致的,在 Debian Bookworm 上 libmemcached-dev
这个库从 1.0.18
升级到 1.1.4
。但由于某种原因 1.1.4
似乎无法正确安装,因此 pecl 找不到正确的头文件。解决办法就是多安装 libssl-dev
这个库。
使用命令进行构建一个全新的镜像。
docker build -t wp .
当构建结束后我们就可以查看本地的镜像库里是否存在刚才构建的库。
root@US-DC2:~/docker/wordpress# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wp latest fac03aa93d2a 15 seconds ago 798MB
自定义 PHP 配置参数
主要是解锁上传文件的最大大小,这里请根据自己的实际需求来设定。
在 ~/docker/wordpress
目录下新建一个 custom-config.ini
文件
vim custom-config.ini
将以下配置复制进去后保存退出即可。
upload_max_filesize = 128M
post_max_size = 128M
注:自定义 PHP 配置可以在构建镜像时就将其完成,但是为了方便灵活处理,我个人觉得还是在运行容器时才以文件绑定到容器内比较合适。
Docker Compose
在 ~/docker/wordpress
目录下新建一个 docker-compose.yml
文件
vim docker-compose.yml
将以下内容复制进去后保存退出即可。
version: '3.8'
services:
wordpress:
image: wp
container_name: wordpress
restart: unless-stopped
ports:
- 801:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- ./html:/var/www/html
- ./custom-config.ini:/usr/local/etc/php/conf.d/custom-config.ini
depends_on:
- memcached
# - redis
networks:
- web
mysql:
image: mysql:latest
container_name: mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_ROOT_PASSWORD: rootpasswd
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/config:/etc/mysql/conf.d
networks:
- web
memcached:
image: memcached:latest
container_name: memcached
restart: unless-stopped
command: memcached -m 128 -c 64
networks:
- web
# phpmyadmin:
# image: phpmyadmin:latest
# container_name: phpmyadmin
# restart: unless-stopped
# ports:
# - 802:80
# environment:
# PMA_HOST: mysql
# networks:
# - web
# redis:
# image: redis:latest
# container_name: redis
# restart: unless-stopped
# ports:
# - 6379:6379
# volumes:
# - ./redis:/data
# command: ["redis-server", "--requirepass", "redispasswd"]
# networks:
# - web
networks:
web:
name: web
注:
- 在 wordpress 这个容器上,我们使用了刚刚自己构建的镜像
wp
; - 根据实际情况修改对应的账号、密码、端口等等;
- Volumes 为绑定的文件/卷,举例:
./html:/var/www/html
冒号前的目录有宿主机上的路径,./html
则表示存放docker-compose.yml
文件的目录下的html
文件夹。冒号后的路径则为容器内部的目录; - 演示使用了 Memcached,如果你想使用 Redis 的话,将 Redis 相对应的注释删除并注释 Memcached 相对应的部分;
- 在 Memcached 这个容器里我使用
memcached -m 128 -c 64
这个命令,当我们 Wordpress 站点的数据与访问增大时,请修改相应的值; - phpmyadmin 这个容器是启动一个 Mysql 的 web 管理器,可根据需求来决定是否启动。若要启动,将此块对应的注释删除即可。
启动容器
使用 Docker Compose 一定要确保当前路径是在项目文件夹里,也就是存放 docker-compose.yml
这个文件夹,然后运行以下命令
docker compose up -d
关闭 Docker Compose
docker compose down
查看已启动的容器
docker ps -a
进入 wordpress 容器内部并查看 PHP 扩展是否安装成功
root@US-DC2:~/docker/wordpress# docker exec -it wordpress /bin/bash
root@73e8b6fe128f:/var/www/html# php -m
[PHP Modules]
bcmath
brotli
Core
ctype
curl
date
dom
exif
fileinfo
filter
gd
hash
iconv
imagick
intl
json
libxml
mbstring
memcache
memcached
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
random
readline
redis
Reflection
session
SimpleXML
sodium
SPL
sqlite3
ssh2
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
可以看到相应的 Memcached 与 Redis 等扩展均已成功安装。
注:容器启动成功后会在 ~/docker/wordpress
目录下新建 html
和 mysql
这两个目录用来持久保存 Wordpress 的数据,方便迁移与备份。
代理 Wordpress
通过 Nginx Proxy Manager 可以非常简单的代理刚才启动的 Wordpress 容器。



注:
- Forward Hostname / IP : 如果是代理 Docker 里的容器时,这一栏选择 Docker 的内网 IP 比较适合,查看 Docker 的内网 IP 可以使用
ip addr | grep docker
这个命令。当然了,你直接使用服务器 IP 也是可以的; - Forward Port : 这里填入刚刚在 Wordpress 容器上映射出来的 801 端口;
- Cache Assets、Block Common Exploits、Websockets Support : 这三项请根据实际情况进行勾选,如果前端页面有报错或异常可将对应的项取消勾选。我使用的主题就不能勾选 Cache Assets,一勾选主题的 CSS 样式就会加载异常。
总结
以前使用 LNMP 或者宝塔面板来部署 Wordpress,过程相对复杂,更重要的是数据备份与迁移麻烦。现在使用 Docker 来部署,部署过程简单,最重要的是,如果要将数据从旧服务器迁移到新的服务器,只需将 ~/docker/wordpress
这个目录使用 rsync
传输到新服务器上即可。然后在新服务器安装好 Docker 环境,就可以使用一条命令即可重新上线。