如果是在机器上直接部署的wordpress,升级只需要在后台点击升级即可.
如果使用docker部署wordpress当然也可以在后台点击升级,但是这样就破坏了docker部署项目的”不可变基础设施”的原则,带来的问题就是当你使用同一个镜像启动了两个应用,但是应用内部的代码可能是不一样的.如果新版本的wordpress用到了特定PHP版本的某个特性,老版本的镜像中不一定有这个特性.
因此,升级wordpress应该使用直接升级镜像的方式.但是在升级时,有几个需要注意的地方:
- 数据库不可以在当前容器内
- 挂载内容可能发生了变化的目录`- ./wp-content:/var/www/html/wp-content`
- 如果修改了配置文件,需要挂载配置文件`- ./wp-config.php:/var/www/html/wp-config.php`(配置文件中的值一般都取自于环境变量,很少会有修改的情况)
但是,当首次启动服务的时候,本地并没有wp-content文件夹和wp-config.php文件,应该怎么办呢?
只需要先临时启动一个wordpress容器,再将容器中的这个文件夹和文件复制出来即可.
以下是我启动wordpress的docker-compose.yml
services:
wordpress:
image: wordpress #这里也可以指定版本
restart: always
ports:
- 1524:80
environment:
WORDPRESS_DB_HOST: 192.168.1.100:3306
WORDPRESS_DB_USER: admin
WORDPRESS_DB_PASSWORD: admin123456
WORDPRESS_DB_NAME: wordpress_demo
volumes:
- ./wp-content:/var/www/html/wp-content
# - ./wp-config.php:/var/www/html/wp-config.php #如果改了配置文件,就加上这个
下面开始升级
备份数据库和程序
如果你懒得备份程序,问题也不大,但是一定要记着备份数据库,尤其时当你的数据在容器里的情况,有些人搞不明白容器保存数据的逻辑,甚至没把数据库的数据映射到本地,这样一重启数据库容器,所有数据就都没了.
下载最新镜像
docker compose pull wordpress
这个命令中的wordpress是docker-compose.yml的服务名,image后面写的是什么版本,这里下载下来的就是什么版本
停止原容器
docker compose down wordpress
启动新容器
docker compose up -d
手动访问一次网站
为什么要手动访问网站呢?因为如果该版本的wordpress升级时,改动了数据库,但是我们的数据库中并没有这些改动,就会导致表和程序不匹配.
wordpress有一个升级数据库的机制,在数据库的wp_options表中,有一个option_name字段,里面保存着当前数据库的版本.
当每次运行程序时,wordpress程序会用自己的版本号和数据库中的版本号做对比,如果数据库的版本号比较低,则会触发升级数据库逻辑.
升级完毕
over.