好久没有正经写一篇技术向的文章了,不知道是不是有人注意到本站的访问一度中断过几天,而现在似乎访问速度快了不少了?是的,本站在2025年03月03日完成了Docker化迁移(顺便给服务器重装了系统),现在你们看到的网站其实已经部署在Docker里面了。

其实看过之前两篇笔记的应该知道,本人属于技术大白水平(啥都知道一点,但是不会使用),所以直接用的是腾讯云的轻量应用服务器提供的wordpress应用模板,但是centos7.8+mysql5.7+BT panel+LNMP的环境实在是太过经典老旧且难以上手。在centos停止支持后继续磕磕绊绊用到服务器几乎卡到用不下去之后,我知道是时候该弄一套易于迁移的WP站点了,不然以后每一次清理服务器的时候都得全部重新部署一遍环境,麻烦不说,还难以保证完美迁移效果,于是说干就干(拖了估计得有半年),准备把网站装进Docker。

容器可以简单理解为软件层面的虚拟化。虚拟机监控程序虚拟化硬件,而容器虚拟化操作系统。
以下描述引自 Docker 网站:“容器是一个标准的软件单元,它将代码及其所有依赖项打包,从而使应用程序能够快速、可靠地从一个计算环境运行到另一个计算环境。 Docker 容器映像是轻型、独立的可执行软件包,其中包括运行应用程序所需的一切内容:代码、运行时、系统工具、系统库和设置。”

从通俗易懂的角度来说,docker是应用层面的虚拟机,我们只需要将应用需要接口开放给docker即可在不同的设备上任意运行、迁移(当然Docker相比于虚拟机,它少了虚拟机系统这一层,所以Docker在资源利用率和运行速度上都优于虚拟机)。除了执行速度和效率占优以外,Docker另一个非常吸引人的地方就是可以通过它构建各种自己想要的应用,并且这些构建完的镜像可以直接拷贝到任何一台装有Docker的系统上,不用做任何的修改,仍能直接运行。正如Docker的口号一般:Build,Ship,and Run Any App,Anywhere!

由于Wordpress需要运行独立的数据库容器后端,在这里我们为了后续的数据迁移方便选用的是Docker Compose统一进行构建。

一、准备工作

使用Docker的最大好处就是不用再在服务器系统上装一堆东西了,于是关于准备工作我们只剩下了在服务器上安装Docker这一项。但是注意docker并不能直接用包管理器比如apt/yum来安装,要么会安装上古早版本,要么会报错没有该软件包,这里建议参考Docker官网手册进行安装,以下列出OpenCloudOS 9(CentOS)以及Debian的实现代码:

# OpenCloudOS 9/CentOS安装Docker
# 添加软件源:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker软件包:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动docker服务并打开开机自启动:
sudo systemctl enable --now docker
# Debian 11/12 安装Docker
# 添加Docker官方GPG密钥:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加软件源:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 安装docker软件包:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 安装后docker服务会自动打开并开机自启动,如未启动:
sudo systemctl enable --now docker

如果是像我一样需要迁移现有的Wordpress网站,则还需要在后台管理界面里导出网站数据,并备份wp-content文件夹并准备用于上传到新的服务器中。

二、正式部署

既然采用的是Docker Compose部署,这里就直接贴上我的compose.yaml配置参考,相信各位应该看注释就能大概明白意思:

services:
   wp_mysql:                   # 服务1:mysql
     image: mysql:lts    # 使用镜像 mysql:latest版本
     restart: always     # 容器服务宕机后总是重启
     volumes:
       - /root/docker/wordpress/mysql:/var/lib/mysql   # 数据持久化
     ports:
       - "3306"
     networks:
       - mywordpress     #网络名称为mywordpress
     environment:        # 环境配置
       MYSQL_ROOT_PASSWORD: xxxxxxxx #数据库root用户密码
       MYSQL_DATABASE: wordpress #wordpress数据库名称

   wordpress:          # 服务2:wordpress
     depends_on:       # wordpress服务启动时依赖mysql服务,所以会自动先启动mysql服务
       - wp_mysql
     image: wordpress:latest    # 使用镜像 wordpress:latest最新版
     restart: always
     volumes:
       - /root/docker/wordpress/html:/var/www/html   # 数据持久化
     ports:
       - "xxxx:80"          #端口映射xxxx:80
     networks:
       - mywordpress
     environment:        # 环境
       WORDPRESS_DB_HOST: wp_mysql:3306     # wordpress连接db的3306端口
       WORDPRESS_DB_USER: root    # 数据库用户为root
       WORDPRESS_DB_PASSWORD: xxxxxxxx   # 数据库root密码
       WORDPRESS_DB_NAME: wordpress    #数据库名字是wordpress
networks:
  mywordpress: #创建网路mywordpress

接下来只需要在compose.yaml目录运行命令:

sudo docker compose up -d

WordPress站点应该就在你设置的端口成功运行了,你可以访问“服务器ip:xxxx”是否进入WP初始化界面来验证这一点。

如果是初次安装使用,到这一步就可以正常使用了,如果按照我的配置,下一次迁移只需要备份/root/docker/wordpress文件夹下的html和mysql文件夹即可实现网站整体搬迁。

如果是已有数据迁移,则这里还需要进行两步(在WP初始化安装完成后),一是将旧的wp-content文件夹复制进/root/docker/wordpress/html中,二是与之前导出界面同样的,使用WP自带的导入器导入之前导出的xml文件,理论上你的文章、你的插件配置、你的菜单配置等等应该都会同步进去(哪怕你目前没有安装或启用那个插件)。

如果需要使用域名访问网站,切记需要在初始化安装前就配置好反向代理以及SSL,否则会报错(安装时WP似乎会把网址作为硬链接写入mysql导致后续无法配置SSL导致报错)

三、其他事项

文件权限问题:从别的服务器搬来的文件很可能你的容器并没有操作权限导致比如更新插件、上传媒体库等操作提示错误,可以将整个网站目录提权即可:

sudo chmod 777 /html

上传大小限制:WordPress容器默认的上传大小限制为2M,这显然无法满足照片、主题等上传的需求,我们需要修改网站根目录的.htaccess文件,在最后加上以下参数即可:

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value max_input_time 300

# END upload_max_filesize_change

友站链接目前官方的导出文件是不包含的,需要自行导入到后台哦!

此作者没有提供个人介绍。
最后更新于 2025-03-13