Docker安装WordPress实验手册 (CentOS 8)

1. 引言

1.1 WordPress简介

WordPress是一款全球领先的开源内容管理系统(CMS),以其易用性、灵活性和强大的社区支持而闻名。它允许用户轻松创建和管理网站、博客和电子商务平台,无需专业的编程知识。WordPress拥有庞大的主题和插件生态系统,可以满足各种网站建设需求。

1.2 Docker与WordPress结合的优势

将WordPress与Docker结合使用,可以带来多方面的优势:

1.3 实验目的

本实验手册旨在通过详细的步骤和代码示例,指导您在CentOS 8系统上使用Docker Compose部署一个完整的WordPress网站。具体目标包括:

通过本手册的学习,您将能够自信地在Docker环境中部署和管理WordPress网站,为您的个人项目或企业应用提供强大的支持。

2. 准备工作

在开始使用Docker安装WordPress之前,确保您的系统环境已正确配置是至关重要的一步。本章节将指导您检查系统要求、验证Docker和Docker Compose的安装,并创建必要的项目目录。

2.1 系统要求与Docker环境验证

本实验手册假设您正在使用 CentOS 8 操作系统。为了顺利运行WordPress及其依赖服务(如MySQL),您的系统应满足以下基本要求:

此外,您需要确保系统上已正确安装并配置了Docker Engine和Docker Compose。如果您尚未安装,请参考上一份实验手册《Docker实验手册 (CentOS 8)》中的“Docker安装与配置”章节进行安装和配置,特别是要确保配置了国内镜像加速,以提高镜像拉取速度。

您可以通过以下命令验证Docker Engine和Docker Compose的安装情况:

  1. 验证Docker Engine
docker version
如果Docker Engine已正确安装,此命令将显示Docker客户端和服务器的版本信息。请确保服务器版本(Server Version)存在。
  1. 验证Docker Compose
docker compose version
如果Docker Compose已正确安装,此命令将显示Docker Compose的版本信息。请注意,新版本的Docker Compose作为Docker CLI的插件,命令是`docker compose`(无连字符)。

2.2 创建项目目录

为了更好地组织WordPress项目文件和Docker Compose配置,建议为您的WordPress安装创建一个独立的目录。这个目录将包含docker-compose.yml文件以及WordPress和MySQL的数据持久化目录。

  1. 创建主项目目录
mkdir ~/wordpress-docker
cd ~/wordpress-docker
此命令将在您的用户主目录下创建一个名为`wordpress-docker`的目录,并进入该目录。所有后续的操作都将在此目录下进行。
  1. 创建数据持久化目录

    为了确保WordPress和MySQL的数据在容器重建后不会丢失,我们将使用数据卷进行持久化。虽然Docker Compose会自动创建匿名数据卷,但为了方便管理和备份,我们通常会创建具名数据卷或绑定挂载宿主机目录。在这里,我们先创建两个用于绑定挂载的目录,以便后续配置数据卷时使用。

mkdir ./wordpress_data
mkdir ./db_data
*   `./wordpress_data`:将用于存储WordPress的程序文件、主题、插件和上传内容。
*   `./db_data`:将用于存储MySQL数据库的数据文件。

完成以上准备工作后,您的系统已为使用Docker Compose部署WordPress做好了充分准备。接下来,我们将开始编写docker-compose.yml文件来定义WordPress服务栈。

3. 使用Docker Compose安装WordPress

Docker Compose是部署多容器应用程序的强大工具,它允许您通过一个YAML文件定义和管理WordPress及其依赖服务(如MySQL数据库)。本章节将指导您编写docker-compose.yml文件,并使用它来启动WordPress应用。

3.1 docker-compose.yml 文件编写

在您之前创建的~/wordpress-docker目录下,创建一个名为docker-compose.yml的文件。此文件将定义WordPress、MySQL以及可选的phpMyAdmin服务。

cd ~/wordpress-docker
cat <<EOF > docker-compose.yml
version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress_password
      WORDPRESS_DB_NAME: wordpress_db
    volumes:
      - ./wordpress_data:/var/www/html
    depends_on:
      - db
    restart: always
    networks:
      - wordpress-network

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress_password
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    networks:
      - wordpress-network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: root_password
    depends_on:
      - db
    restart: always
    networks:
      - wordpress-network

networks:
  wordpress-network:
    driver: bridge

volumes:
  wordpress_data:
  db_data:
EOF

3.2 文件说明与配置项解析

上述docker-compose.yml文件定义了三个服务:wordpressdb(MySQL数据库)和phpmyadmin,以及一个自定义网络和两个数据卷。

3.2.1 wordpress 服务

3.2.2 db 服务 (MySQL数据库)

3.2.3 phpmyadmin 服务 (可选)

3.2.4 networksvolumes 部分

3.3 启动WordPress应用

docker-compose.yml文件所在的~/wordpress-docker目录下,执行以下命令来启动WordPress应用程序栈:

docker compose up -d

执行此命令后,Docker Compose将执行以下操作:

  1. 检查wordpressmysqlphpmyadmin镜像是否存在。如果不存在,将从Docker Hub拉取它们。
  2. 创建wordpress-network网络。
  3. 启动db服务(MySQL容器)。
  4. 启动wordpress服务(WordPress容器)。
  5. 启动phpmyadmin服务(phpMyAdmin容器)。
  6. 将宿主机的80端口映射到WordPress容器的80端口,将宿主机的8080端口映射到phpMyAdmin容器的80端口。

您可以使用以下命令查看所有服务的运行状态:

docker compose ps

如果所有服务都显示为Up状态,则表示WordPress应用程序已成功启动。

4. WordPress配置与访问

在Docker Compose成功启动WordPress服务栈后,您可以通过Web浏览器访问WordPress进行首次安装配置,并可选地通过phpMyAdmin管理数据库。本章节将详细指导这些操作。

4.1 首次访问WordPress进行安装配置

  1. 打开Web浏览器

    在您的宿主机上打开任意Web浏览器(如Chrome, Firefox等)。

  2. 访问WordPress安装页面

    在浏览器地址栏输入您的宿主机IP地址或localhost。由于我们在docker-compose.yml中将宿主机的80端口映射到了WordPress容器的80端口,因此直接访问即可:

http://localhost
或者,如果您是在远程服务器上操作,请替换`localhost`为您的服务器IP地址:
http://<您的服务器IP地址>
  1. 选择语言

    首次访问时,WordPress会提示您选择安装语言。选择您偏好的语言(例如“简体中文”),然后点击“继续”。

  2. 欢迎页面

    您将看到WordPress的欢迎页面,提示您需要数据库信息。点击“现在就开始!”。

  3. 数据库连接信息

    在数据库连接信息页面,填写以下内容:

    • 数据库名wordpress_db (与docker-compose.ymlMYSQL_DATABASE一致)
    • 用户名wordpress (与docker-compose.ymlMYSQL_USER一致)
    • 密码wordpress_password (与docker-compose.ymlMYSQL_PASSWORD一致)
    • 数据库主机db (这是Docker Compose网络中MySQL服务的服务名称)
    • 表前缀wp_ (保持默认或自定义,不影响功能)

    填写完毕后,点击“提交”。

  4. 运行安装

    如果数据库连接成功,您将看到“运行安装”页面。点击“运行安装”。

  5. 站点信息

    填写您的站点信息:

    • 站点标题:您的网站名称 (例如:我的Docker WordPress博客)
    • 用户名:WordPress后台登录用户名 (例如:admin)
    • 密码:WordPress后台登录密码 (请设置一个强密码并牢记)
    • 您的电子邮件:用于接收通知和密码重置 (例如:your_email@example.com)
    • 搜索引擎可见性:根据需要勾选或取消勾选“建议搜索引擎不索引本站点”(通常在开发阶段勾选,生产环境取消勾选)。

    填写完毕后,点击“安装WordPress”。

  6. 安装成功

    安装成功后,您将看到“成功!”页面。点击“登录”即可进入WordPress后台管理界面。

至此,您的WordPress网站已通过Docker Compose成功安装并运行。

4.2 (可选) 访问phpMyAdmin管理数据库

如果您在docker-compose.yml中包含了phpMyAdmin服务,您可以通过Web浏览器访问它来管理WordPress的数据库。

  1. 打开Web浏览器

    在您的宿主机上打开任意Web浏览器。

  2. 访问phpMyAdmin

    在浏览器地址栏输入您的宿主机IP地址或localhost,并加上phpMyAdmin映射的端口号(默认为8080):

http://localhost:8080
或者,如果您是在远程服务器上操作,请替换`localhost`为您的服务器IP地址:
http://<您的服务器IP地址>:8080
  1. 登录phpMyAdmin

    在phpMyAdmin登录页面,填写以下内容:

    • 用户名root (这是MySQL的root用户)
    • 密码root_password (与docker-compose.ymlMYSQL_ROOT_PASSWORD一致)

    填写完毕后,点击“登录”。

  2. 管理数据库

    登录成功后,您将看到phpMyAdmin的管理界面。在左侧导航栏中,您可以找到wordpress_db数据库,并可以查看、编辑其中的表和数据。这对于数据库的调试和管理非常有用。

通过本章节,您已经完成了WordPress的首次安装和配置,并学会了如何使用phpMyAdmin管理其底层数据库。

5. 数据持久化与备份

对于任何生产环境的应用程序,数据持久化和备份都是至关重要的环节。WordPress作为一个内容管理系统,其核心数据(文章、页面、用户、配置等)存储在MySQL数据库中,而其文件数据(主题、插件、上传的媒体文件等)则存储在文件系统中。本章节将回顾我们在docker-compose.yml中如何实现数据持久化,并简要介绍备份策略。

5.1 数据持久化的重要性

Docker容器的设计理念是轻量级和无状态的。这意味着容器在停止或删除后,其内部写入的所有数据都会丢失。对于WordPress和MySQL这类需要存储数据的应用,如果数据不进行持久化,那么每次容器重建或更新都会导致数据丢失,这是不可接受的。

Docker提供了**数据卷(Volumes)**机制来解决这个问题。数据卷是宿主机文件系统中的一个特殊目录,它可以被挂载到容器内部的指定路径。数据卷独立于容器的生命周期,即使容器被删除,数据卷中的数据依然存在,从而实现了数据的持久化存储。

5.2 WordPress和MySQL数据卷配置回顾

docker-compose.yml文件中,我们通过volumes配置项为WordPress和MySQL服务配置了数据持久化:

services:
  wordpress:
    # ... 其他配置 ...
    volumes:
      - ./wordpress_data:/var/www/html
    # ... 其他配置 ...

  db:
    # ... 其他配置 ...
    volumes:
      - ./db_data:/var/lib/mysql
    # ... 其他配置 ...

通过这种方式,我们确保了WordPress网站的所有关键数据都存储在宿主机的文件系统中,从而实现了数据的持久化。

5.3 简要备份策略

尽管数据已经持久化,但为了应对宿主机故障、误操作或数据损坏等情况,定期备份这些持久化数据仍然是必不可少的。以下是一些简单的备份策略:

  1. 备份WordPress文件数据

    由于WordPress的文件数据存储在宿主机的~/wordpress-docker/wordpress_data目录下,您只需定期备份这个目录即可。可以使用tar命令进行打包压缩,并将其存储到安全的位置(例如,远程存储、云存储或另一个物理磁盘)。

# 停止WordPress容器以确保文件一致性(可选,但推荐)
docker compose stop wordpress

# 备份WordPress文件
tar -czvf wordpress_files_backup_$(date +%Y%m%d).tar.gz ~/wordpress-docker/wordpress_data

# 启动WordPress容器
docker compose start wordpress
  1. 备份MySQL数据库数据

    备份MySQL数据库的最佳实践是使用mysqldump工具。您可以在MySQL容器内部执行mysqldump命令,将数据库导出为SQL文件,然后将该文件复制到宿主机进行备份。

# 在MySQL容器内部执行mysqldump命令
docker exec db mysqldump -u wordpress -pwordpress_password wordpress_db > ~/wordpress-docker/db_data/wordpress_db_backup_$(date +%Y%m%d).sql

# 此时,备份文件已在宿主机的 ~/wordpress-docker/db_data 目录下
# 您可以进一步将此SQL文件移动或复制到其他备份位置
**注意**:上述`mysqldump`命令中的`wordpress`是数据库用户名,`wordpress_password`是密码,`wordpress_db`是数据库名,这些都应与`docker-compose.yml`中配置的一致。备份文件被直接写入到`db_data`目录,因此它会持久化在宿主机上。
  1. 自动化备份

    为了确保备份的及时性和可靠性,建议将上述备份命令编写成脚本,并结合cron等工具进行自动化调度,实现定期自动备份。

通过实施有效的数据持久化和备份策略,您可以大大提高WordPress网站的健壮性和数据安全性,确保在发生意外情况时能够迅速恢复服务。

6. 故障排除与优化

在使用Docker部署WordPress时,可能会遇到各种问题,例如容器无法启动、端口冲突或数据库连接失败等。本章节将提供一些常见的故障排除方法和优化建议,帮助您确保WordPress网站的稳定运行和良好性能。

6.1 常见问题及解决方案

6.1.1 容器无法启动

当您执行 docker compose up -d 后,如果发现某些服务没有成功启动,可以按照以下步骤进行排查:

  1. 查看服务日志

    这是排查容器启动问题的首要步骤。通过查看容器的日志输出,通常可以找到启动失败的具体原因。

docker compose logs <服务名称>
例如,查看WordPress服务的日志:
docker compose logs wordpress
查看数据库服务的日志:
docker compose logs db
日志中可能会显示配置错误、依赖缺失或权限问题等信息。
  1. 检查端口冲突

    如果日志显示端口被占用,可能是宿主机上的其他进程占用了WordPress或phpMyAdmin所需的端口(默认为80和8080)。

    • 识别占用端口的进程
sudo netstat -tulnp | grep :80
sudo netstat -tulnp | grep :8080
*   **解决方案**:
    *   停止占用端口的进程。
    *   修改`docker-compose.yml`文件中WordPress或phpMyAdmin服务的端口映射,例如将WordPress的80端口映射到宿主机的8081端口:
wordpress:
  ports:
    - "8081:80"
    修改后,需要重新构建并启动服务:
docker compose up -d --build
  1. 检查docker-compose.yml文件语法

    YAML文件对格式和缩进非常敏感。即使是很小的语法错误也可能导致服务无法启动。

    • 验证语法
docker compose config --quiet
    如果命令没有输出任何内容,则表示`docker-compose.yml`文件语法正确。如果有错误,它会打印出详细的错误信息。

*   **解决方案**:根据错误信息修正`docker-compose.yml`文件中的语法错误。

6.1.2 数据库连接问题

WordPress网站显示“Error establishing a database connection”(建立数据库连接错误)是常见问题。这通常是由于WordPress容器无法连接到MySQL数据库容器造成的。

  1. 检查环境变量

    确保wordpress服务中的数据库连接环境变量与db服务中的MySQL配置完全一致。

    • WORDPRESS_DB_HOST:必须是MySQL服务的服务名称,即db
    • WORDPRESS_DB_USER:必须与MYSQL_USER一致。
    • WORDPRESS_DB_PASSWORD:必须与MYSQL_PASSWORD一致。
    • WORDPRESS_DB_NAME:必须与MYSQL_DATABASE一致。
  2. 检查网络连接

    确保wordpressdb服务都连接到同一个Docker网络(例如wordpress-network)。您可以通过进入WordPress容器并尝试ping数据库服务来验证网络连通性:

docker exec -it <wordpress容器ID或名称> bash
ping db
exit
如果`ping db`失败,则表示网络配置有问题。
  1. 检查MySQL服务状态

    确保MySQL容器正在运行且没有错误。查看db服务的日志:

docker compose logs db
如果MySQL服务启动失败,WordPress自然无法连接。

6.1.3 WordPress权限问题

有时WordPress在安装主题、插件或上传媒体文件时可能会遇到权限问题。

  1. 检查数据卷权限

    确保宿主机上~/wordpress-docker/wordpress_data目录的权限允许WordPress容器内的用户写入。WordPress容器通常以www-data用户运行。

    • 解决方案:更改宿主机上wordpress_data目录的所有者为Docker容器内WordPress进程的用户ID(通常是33,对应www-data用户),或者给予更宽松的权限(不推荐在生产环境使用)。
sudo chown -R 33:33 ~/wordpress-docker/wordpress_data
# 或者,如果不知道确切UID/GID,可以尝试更宽松的权限(生产环境不推荐)
sudo chmod -R 777 ~/wordpress-docker/wordpress_data

6.2 性能优化建议

为了提高Docker化WordPress网站的性能和响应速度,可以考虑以下优化措施:

  1. 使用高性能数据卷

    对于生产环境,建议将wordpress_datadb_data目录放置在SSD硬盘上,以提高文件I/O和数据库读写性能。

  2. 配置WordPress缓存插件

    安装并配置WordPress缓存插件(如WP Super Cache, W3 Total Cache, LiteSpeed Cache等),可以显著减少数据库查询和页面生成时间,提高网站加载速度。

  3. 优化MySQL配置

    根据您的服务器资源和WordPress网站的负载情况,调整MySQL容器的配置参数(例如innodb_buffer_pool_size),以优化数据库性能。这可以通过在docker-compose.yml中为db服务添加commandconfig文件挂载来实现。

  4. 使用CDN

    对于静态资源(图片、CSS、JavaScript),使用内容分发网络(CDN)可以加快全球用户的访问速度,并减轻服务器负载。

  5. 定期清理Docker资源

    定期清理不再使用的Docker镜像、容器和数据卷,可以释放磁盘空间,保持系统整洁。

docker system prune -a
**注意**:此命令会删除所有停止的容器、未使用的网络、悬空镜像以及所有构建缓存。执行前请确保您了解其影响。
  1. 资源限制

    docker-compose.yml中为WordPress和MySQL服务设置CPU和内存限制,防止单个容器耗尽宿主机资源,影响其他服务。

wordpress:
  # ...
  deploy:
    resources:
      limits:
        cpus: '0.5'
        memory: 512M

db:
  # ...
  deploy:
    resources:
      limits:
        cpus: '0.5'
        memory: 1G

通过掌握这些故障排除技巧和性能优化建议,您将能够更有效地管理和维护您的Docker化WordPress网站,确保其稳定、高效地运行。

7. 总结与展望

本实验手册详细介绍了如何在CentOS 8系统上,利用Docker Compose快速、高效地部署WordPress网站。通过本次实验,您应该已经掌握了以下关键技能和概念:

通过Docker Compose部署WordPress,不仅简化了部署流程,还提供了环境隔离、易于管理和高度可移植性等诸多优势。这使得WordPress网站的开发、测试和生产环境能够保持高度一致,大大提高了工作效率和系统稳定性。

7.1 展望

Docker和容器技术在Web应用部署领域正发挥着越来越重要的作用。未来,您可以进一步探索以下方向,以提升您的Docker和WordPress应用水平: