- 一、为什么要在本地搭建WordPress?
- 1.1 快速地学习和体验 WordPress
- 1.2 在本地环境中开发和测试网站
- 1.3 随时备份和恢复网站的数据
- 1.4 轻松地将本地网站迁移至线上服务器
- 二、技术基础与工具选择
- 2.1 Docker:现代化的应用容器技术
- 2.2 Docker Compose:多容器编排利器
- 2.3 根据操作系统选择合适的Docker运行方案
- 三、macOS用户方案:OrbStack + Docker + Dockge
- 3.1 OrbStack简介
- 3.2 在OrbStack上运行Ubuntu的优势
- 3.3 实施步骤
- 3.4 常见问题及解决方案
- 3.5 使用场景
- 四、使用Docker Compose部署WordPress
- 4.1 架构概览
- 4.2 文件结构
- 4.3 docker-compose.yml
- 4.4 nginx.conf
- 4.5 镜像说明
- 4.6 部署步骤
- 4.7 验证缓存是否生效
- 4.8 WordPress后台配置
- 4.9 常用管理命令
- 五、在HomeLab工具中安装WordPress
- 5.1 HomeLab平台概览
- 5.2 一键式部署的优势
- 5.3 自托管WordPress的价值
- 📋 课程总结
如果你想学习或测试 WordPress,或者想在发布网站之前进行开发和调试,你可能不想花钱购买服务器或域名,也不想让你的网站暴露在互联网上。这时,你可以选择在本地搭建 WordPress 站点,也就是在本地的电脑上模拟一个网站运行环境,让你可以在本地浏览器中访问你的网站,而无需联网或上传文件。本节课将在之前Local的基础上,向你介绍基于Docker的快速部署方法。
一、为什么要在本地搭建WordPress?
1.1 快速地学习和体验 WordPress
在本地搭建 WordPress 站点的一个好处是,你可以快速地学习和体验 WordPress 的功能和特点,无需购买服务器或域名。这样,你可以在没有任何成本或风险的情况下,探索 WordPress 的各种可能性,找到适合你的网站类型和风格。
你可以在本地安装不同版本的 WordPress,比较它们的差异和优劣,了解 WordPress 的更新和变化。你也可以在本地安装不同的主题和插件,尝试不同的网站布局和功能,找到你喜欢的组合和配置。你还可以在本地创建不同的网站,比如博客、商城、社区等,学习不同类型的网站的建设和管理方法。
💡 学习场景示例:
| 学习目标 | 本地实践方式 |
|---|---|
| 了解WordPress版本差异 | 同时运行WordPress 6.7和6.8,对比区块编辑器的改进 |
| 主题开发入门 | 安装官方Twenty Twenty-Five主题,逐步修改CSS和模板文件 |
| 插件兼容性测试 | 在隔离环境中测试WooCommerce、Elementor等插件的组合效果 |
| 多站点网络 | 启用WordPress Multisite功能,模拟企业级多站点管理 |
1.2 在本地环境中开发和测试网站
在本地搭建 WordPress 站点的另一个好处是,你可以在本地环境中开发和测试网站的设计、内容、插件和代码,避免影响线上网站的正常运行。这样,你可以在一个安全和私密的空间中,尝试不同的网站元素和功能,检查和修复网站的错误和问题,提高网站的质量和性能。
你可以在本地修改网站的样式和颜色,调整网站的布局和结构,添加或删除网站的内容和图片,看到网站的实时效果,而不需要每次修改后都上传文件或刷新页面。你也可以在本地安装和测试不同的插件,检查插件的兼容性和稳定性,优化插件的设置和参数,提升插件的功能和效率。你还可以在本地编写和运行不同的代码,检查代码的正确性和合理性,优化代码的格式和性能,增强代码的安全性和可维护性。
⚠️ 真实案例警示:许多WordPress网站曾因在生产环境直接更新插件导致网站崩溃。本地测试环境可以有效避免这类灾难性事故。
1.3 随时备份和恢复网站的数据
在本地搭建 WordPress 站点的还有一个好处是,更加便利随时备份和恢复网站的数据,保证网站的安全和完整。这样,你可以在发生任何意外或灾难的情况下,快速地恢复你的网站,避免数据的丢失或损坏。
你可以在本地定期或手动地备份你的网站的文件和数据库,保存在你的电脑或外部存储设备上,以防止你的网站被黑客攻击、服务器故障、文件损坏等问题影响。你也可以在本地轻松地恢复你的网站的文件和数据库,只需要将备份的文件和数据库复制到本地的网站目录和数据库中,就可以恢复你的网站的原貌,而不需要重新安装或配置你的网站。
🔄 Docker环境下的备份优势:
与传统本地开发环境(如XAMPP、MAMP)相比,Docker提供了更优雅的备份方案——你的整个WordPress站点(包括所有主题、插件、上传的媒体文件和数据库)都可以作为一个整体进行版本控制和迁移。
1.4 轻松地将本地网站迁移至线上服务器
在本地搭建 WordPress 站点的最后一个好处是,你可以轻松地将本地网站迁移至线上服务器,或者反之,实现网站的同步和更新。这样,你可以在不同的环境中,保持网站的一致性和最新性,方便你的网站管理和维护。
你可以在本地完成网站的开发和测试后,将本地网站的文件和数据库上传到线上服务器,通过修改一些设置,就可以让你的网站在互联网上正常运行,向公众展示你的网站。你也可以在线上服务器上完成网站的更新和优化后,将线上网站的文件和数据库下载到本地,通过修改一些设置,就可以让你的网站在本地正常运行,备份你的网站。
📦 迁移工作流概览:
┌─────────────────┐ 导出 ┌─────────────────┐ 导入 ┌─────────────────┐
│ 本地开发环境 │ ─────────▶ │ 迁移包/镜像 │ ─────────▶ │ 生产服务器 │
│ (Docker容器) │ │ (.sql + files) │ │ (云服务器) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
二、技术基础与工具选择
在开始实际部署之前,我们需要理解本课程涉及的核心技术概念。这些基础知识将帮助你更好地理解后续的操作步骤。
2.1 Docker:现代化的应用容器技术
Docker是一种容器化技术,它将应用程序及其所有依赖项打包到一个标准化的单元(称为"容器")中运行。你可以把Docker容器想象成一个轻量级的虚拟机,但它比传统虚拟机启动更快、资源占用更少。
🎯 为什么选择Docker部署WordPress?
| 对比维度 | 传统方式 (XAMPP/MAMP) | Docker方式 |
|---|---|---|
| 环境一致性 | 本地与服务器环境可能不同 | 开发、测试、生产环境完全一致 |
| 依赖管理 | 手动安装PHP、MySQL等 | 自动处理所有依赖 |
| 多版本共存 | 困难,可能产生冲突 | 轻松运行多个独立环境 |
| 清理与重建 | 残留文件难以清理 | 删除容器即完全清理 |
| 迁移部署 | 需要重新配置 | 导出镜像即可迁移 |
| 资源占用 | 服务常驻后台 | 按需启停,不用时零占用 |
2.2 Docker Compose:多容器编排利器
Docker Compose是Docker官方提供的多容器编排工具。一个完整的WordPress站点需要多个服务协同工作:Web服务器、PHP运行环境、数据库和缓存服务。Docker Compose允许我们用一个YAML配置文件定义和管理这些相互关联的服务。
📝 核心概念解释:
# docker-compose.yml 基本结构
services: # 定义要运行的服务(容器)
wordpress: # 服务名称
image: wordpress:fpm # 使用的Docker镜像
ports:
- "80:80" # 端口映射:主机端口:容器端口
volumes:
- wp_data:/var/www/html # 数据持久化
environment: # 环境变量配置
WORDPRESS_DB_HOST: db
depends_on: # 服务依赖关系
- db
db: # 数据库服务
image: mariadb:latest
volumes:
- db_data:/var/lib/mysql
volumes: # 声明数据卷,用于持久化存储
wp_data:
db_data:
⚡ 重要说明:从Docker Compose V2开始(现已成为默认版本),配置文件顶部的version: "3"声明已被弃用。虽然保留它不会报错,但新项目建议直接省略。本课程后续的配置文件均已采用最新规范。
2.3 根据操作系统选择合适的Docker运行方案
不同操作系统用户应选择最适合自己的Docker运行方案:
| 操作系统 | 推荐方案 | 说明 |
|---|---|---|
| macOS | OrbStack | OrbStack更轻量高效,提供虚拟环境 |
| Linux | 原生Docker + Dockge | 性能最佳,图形界面管理 |
| HomeLab用户 | Umbrel / CasaOS | 提供图形化管理界面,适合入门 |
三、macOS用户方案:OrbStack + Docker + Dockge
随着容器技术的不断发展,开发者对轻量级、高效的虚拟化工具需求日益增长。OrbStack作为一款专为macOS设计的新一代容器和虚拟机平台,提供了比传统Docker Desktop更轻量高效的解决方案。本章将探讨如何在OrbStack上运行Ubuntu系统,并在其中部署Docker和Dockge,构建一个灵活且高效的容器管理环境。
3.1 OrbStack简介
OrbStack是一个为macOS设计的现代化容器和虚拟机平台,它比Docker Desktop更轻量、更快速,具有以下特点:
| 特性 | 说明 |
|---|---|
| 🔋 资源占用低 | 相比Docker Desktop,CPU和内存占用显著降低**(实测内存占用仅为Docker Desktop的1/3至1/5)** |
| ⚡ 启动速度快 | 几乎即时启动容器和虚拟机**(冷启动通常在2秒内完成)** |
| 🔗 与macOS深度集成 | 支持文件共享、端口转发等功能**,容器内服务可直接通过 容器名.orb.local 访问** |
| 🐳 支持Docker和Kubernetes | 兼容Docker命令和工作流**,无需修改现有Docker Compose文件** |
💡 适用场景判断:如果你是macOS用户,且主要进行Web开发或需要运行Docker容器,OrbStack几乎是目前最优选择。
3.2 在OrbStack上运行Ubuntu的优势
在OrbStack上运行Ubuntu虚拟机并在其中部署Docker有以下优势:
- 🔒 环境隔离:Ubuntu虚拟机提供了与宿主机完全隔离的环境,避免容器运行时可能对macOS系统产生的任何副作用
- 🎛️ 灵活性:可以选择特定版本的Ubuntu系统(如Ubuntu 22.04 LTS或24.04 LTS)
- ✅ 兼容性:解决某些应用在macOS上的兼容性问题**,特别是那些依赖Linux内核特性的应用**
- 📦 可移植性:整个环境可以轻松备份和迁移**,虚拟机可导出为标准格式供团队共享**
3.3 实施步骤
步骤一:安装OrbStack
方式A:使用Homebrew安装(推荐)
brew install orbstack
方式B:官网下载安装包
访问 https://orbstack.dev/download 下载对应芯片版本(Apple Silicon / Intel)的安装包。
🔍 安装验证:安装完成后,在终端输入 orb version 确认安装成功。
步骤二:创建Ubuntu虚拟机
启动OrbStack后,可以通过GUI界面或命令行创建Ubuntu虚拟机:
# 创建一个名为"ubuntu"的Ubuntu虚拟机
orb create ubuntu ubuntu
# 进入虚拟机的shell
orb shell ubuntu
💡 提示:OrbStack创建的Linux虚拟机与macOS主机共享文件系统,你的Mac用户目录自动挂载在虚拟机的 /Users/你的用户名 路径下。
步骤三:在Ubuntu中安装Docker
进入Ubuntu虚拟机后,按以下步骤安装Docker:
# 1. 更新包索引并安装必要的依赖
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
# 2. 添加Docker官方GPG密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
# 3. 添加Docker仓库到APT源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装Docker引擎和相关组件
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 5. 验证安装
sudo docker --version步骤四:部署Dockge——可视化Docker Compose管理器
Dockge是一个轻量级、开源的Docker Compose管理工具,由Uptime Kuma的作者开发。相比Portainer等重量级方案,Dockge专注于Docker Compose项目的管理,界面更简洁直观。
# 1. 创建Dockge所需的目录
sudo mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge
# 2. 下载官方compose.yaml文件
sudo curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml
# 3. 启动Dockge
sudo docker compose up -d📋 Dockge核心功能:
- 🖥️ 直观的Web界面管理Docker Compose项目
- 📝 内置YAML编辑器,支持语法高亮
- 🔄 一键启动/停止/重启Compose堆栈
- 📊 实时查看容器日志和状态
步骤五:访问Dockge Web界面
Dockge部署完成后,需要配置端口转发以便从macOS主机访问:
# 在macOS终端执行(不是在虚拟机内)
orb expose ubuntu 5001:5001然后在浏览器中访问: http://localhost:5001
3.4 常见问题及解决方案
🔧 问题1:端口映射不生效
# 重新配置端口映射
orb expose ubuntu 5001:5001🔧 问题2:Docker权限问题
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
# 重新登录以使更改生效🔧 问题3:存储空间不足
# 查看磁盘使用情况
df -h
# 清理未使用的Docker资源
docker system prune -a
3.5 使用场景
这种嵌套虚拟化方案适用于以下场景:
| 场景 | 说明 |
|---|---|
| 🖥️ 开发环境 | 提供与生产环境一致的开发测试环境 |
| 📚 学习与测试 | 安全地学习和测试Docker技术 |
| 📦 容器管理 | 通过Dockge简化Docker Compose项目的管理 |
| 🔄 跨平台开发 | 在macOS上运行需要Linux环境的应用 |
四、使用Docker Compose部署WordPress
无论你使用哪种Docker运行方案,部署WordPress的方式都是相同的。本章提供经过验证的最佳实践配置,包含Nginx + PHP-FPM + MariaDB + Redis的完整技术栈,并配置了FastCGI缓存以获得极致性能。
4.1 架构概览
┌─────────────────────────────────────────────────────────────┐
│ 浏览器请求 │
└─────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ Nginx (端口80) │
│ ┌─────────────────────────┐ │
│ │ FastCGI 缓存层 │ │
│ │ (静态化HTML缓存) │ │
│ └───────────┬─────────────┘ │
└──────────────────────────┼──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ WordPress (PHP-FPM, 端口9000) │
│ ┌─────────────────────────┐ │
│ │ Redis 对象缓存 │◀───────────────────┤
│ │ (数据库查询缓存) │ │
│ └───────────┬─────────────┘ │
└──────────────────────────┼──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ MariaDB 数据库 │
└─────────────────────────────────────────────────────────────┘
🎯 双层缓存策略说明:
- FastCGI缓存(Nginx层):将PHP生成的完整HTML页面缓存为静态文件,后续相同请求直接返回缓存,无需执行PHP
- Redis对象缓存(WordPress层):缓存WordPress内部的数据库查询结果,减少数据库压力
4.2 文件结构
wordpress-docker/
├── docker-compose.yml # Docker Compose配置文件
├── nginx.conf # Nginx配置文件
└── logs/
└── nginx/ # Nginx日志目录(自动创建)
4.3 docker-compose.yml
services:
db:
image: mariadb:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:latest
restart: always
wordpress:
depends_on:
- db
- redis
image: wordpress:fpm
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
WORDPRESS_CONFIG_EXTRA: |
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);
define('WP_CACHE', true);
volumes:
- wordpress_data:/var/www/html
nginx:
depends_on:
- wordpress
image: nginx:latest
restart: always
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- wordpress_data:/var/www/html
- nginx_cache:/var/cache/nginx
- ./logs/nginx:/var/log/nginx
volumes:
db_data:
wordpress_data:
nginx_cache:
4.4 nginx.conf
# FastCGI 缓存定义
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WPCACHE:64m inactive=60m max_size=256m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
# 缓存状态头(用于调试,可查看是否命中缓存)
add_header X-Cache-Status $upstream_cache_status;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
# FastCGI 缓存配置
fastcgi_cache WPCACHE;
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 1m;
# 跳过缓存的条件
set $skip_cache 0;
# POST请求不缓存
if ($request_method = POST) {
set $skip_cache 1;
}
# 已登录用户或评论者不缓存
if ($http_cookie ~* "wordpress_logged_in|comment_author") {
set $skip_cache 1;
}
# 后台页面不缓存
if ($request_uri ~* "/wp-admin/|/wp-login.php") {
set $skip_cache 1;
}
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
# 禁止访问隐藏文件
location ~ /\.ht {
deny all;
}
}
4.5 镜像说明
| 服务 | 镜像 | 说明 |
|---|---|---|
| db | mariadb:latest | MariaDB最新稳定版 |
| redis | redis:latest | Redis最新稳定版 |
| wordpress | wordpress:fpm | WordPress PHP-FPM版本(自动指向最新PHP版本) |
| nginx | nginx:latest | Nginx最新稳定版 |
4.6 部署步骤
# 1. 创建项目目录
mkdir wordpress-docker && cd wordpress-docker
# 2. 创建日志目录
mkdir -p logs/nginx
# 3. 创建 docker-compose.yml 文件
# (将上面的内容保存到此文件)
# 4. 创建 nginx.conf 文件
# (将上面的内容保存到此文件)
# 5. 启动所有服务
docker compose up -d
# 6. 查看运行状态
docker compose ps
# 7. 查看日志(可选)
docker compose logs -f
🎉 启动成功后,访问 http://localhost 即可开始WordPress安装向导!
也可以使用Docker在Web端图形界面中配置。
4.7 验证缓存是否生效
# 使用curl查看响应头
curl -I http://localhost
# 查看 X-Cache-Status 头的值:
# MISS = 缓存未命中(首次访问)
# HIT = 缓存命中(从缓存返回)
# BYPASS = 跳过缓存(登录用户或后台页面)
第一次访问会显示 MISS,刷新页面后应该显示 HIT,表示缓存生效。
4.8 WordPress后台配置
部署完成后,还需要在WordPress后台启用Redis对象缓存:
- 安装Redis Object Cache插件
- 进入 WordPress 后台 → 插件 → 安装插件
- 搜索 "Redis Object Cache"
- 安装并启用
- 启用对象缓存
- 进入 设置 → Redis
- 点击 "Enable Object Cache" 按钮
- 确认状态显示 "Connected"
✅ 至此,你已经拥有一个配置了双层缓存(FastCGI + Redis)的高性能本地WordPress环境!之后的课程中,会进一步介绍缓存原理。
4.9 常用管理命令
# 停止所有服务
docker compose down
# 停止并删除数据卷(完全重置)
docker compose down -v
# 重启服务
docker compose restart
# 查看某个服务的日志
docker compose logs wordpress
docker compose logs nginx
# 进入WordPress容器
docker compose exec wordpress bash
# 进入数据库容器
docker compose exec db mysql -u wordpress -p
五、在HomeLab工具中安装WordPress
在个人服务器或家庭实验室(HomeLab)环境中运行应用程序也是个技术爱好者和注重隐私用户的热门选择。诸如 Umbrel、CasaOS 或其他基于 Docker 的 HomeLab 管理平台,极大地简化了自托管服务的部署和管理过程。
5.1 HomeLab平台概览
| 平台 | 特点 | 适用场景 |
|---|---|---|
| Umbrel | 界面美观,应用商店丰富,专注隐私 | 比特币节点、个人云服务 |
| CasaOS | 轻量级,安装简单,中文友好 | 入门用户、NAS设备 |
| Portainer | 功能强大,适合专业用户 | 复杂的多容器管理 |
5.2 一键式部署的优势
利用 Umbrel 这类工具安装 WordPress 通常非常便捷。这些平台往往提供类似"应用商店"的界面,只需找到 WordPress 应用,点击几下即可启动安装程序。后台系统会自动处理复杂的配置,包括设置所需的依赖环境,如 Web 服务器(通常是 Nginx 或 Apache)、PHP 运行环境以及数据库(常用 MariaDB 或 MySQL)。这种一键式部署或引导式安装,免去了手动配置服务器、数据库和下载 WordPress 文件的繁琐步骤,大大降低了技术门槛。
5.3 自托管WordPress的价值
在 HomeLab 中运行自己的 WordPress 实例,主要优势在于完全的数据所有权和控制权。与使用第三方托管服务不同,你的所有网站内容、用户数据都存储在你自己的硬件上,增强了隐私性和安全性。此外,这还提供了一个绝佳的学习和实验环境,你可以自由地测试主题、插件,深入了解网站的运作机制,而不必担心影响线上业务或产生额外费用(除了硬件和电费)。对于开发者或希望完全定制其在线空间的用户来说,这是一个理想的解决方案。
📊 HomeLab vs 传统托管 对比:
| 方面 | HomeLab自托管 | 传统云托管 |
|---|---|---|
| 数据控制 | ✅ 完全自主 | ⚠️ 依赖服务商 |
| 月度成本 | 💰 仅电费 | 💰💰 $10-50+/月 |
| 学习价值 | 🎓 极高 | 较低 |
📋 课程总结
🎉 恭喜你完成本节课程!通过本节课程,你已经学会了:
📚 参考资源:
- Docker官方文档:https://docs.docker.com
- WordPress开发者资源:https://developer.wordpress.org
- OrbStack文档:https://docs.orbstack.dev
- Dockge项目:https://github.com/louislam/dockge
回复