第一份实战记录

作者:

在

从零开始在云服务器上搭建WordPress博客并配置Redis缓存——一份完整的实战记录

为什么要写这篇文章

我有一台运行着Ubuntu Server 20.04 LTS的云服务器,一直想在上面搭建一个属于自己的个人博客。之前也断断续续折腾过,但总是半途而废。这次我决定认真地把这件事做完,从安装环境到网站上线,再到配置Redis缓存提升性能,整个过程都记录下来。

这篇文章不是那种”几步搞定”的速成教程,而是一份真实的搭建日志。中间遇到了不少坑,也花了很多时间去排查和解决。如果你也在用1Panel搭建WordPress,或者正在为Redis缓存配置发愁,希望这篇记录能给你一些参考。

如果你不想看我的反复犯错与纠错过程,教程是:

在1Panel上搭建WordPress并配置Redis对象缓存:完整操作指南

第一部分:基础环境搭建

一、服务器与面板准备

服务器是Ubuntu 20.04 LTS系统,我先在上面安装了1Panel面板。1Panel是一个基于Docker的服务器管理面板,界面友好,适合用来管理网站和各类应用。

安装完成后,我通过1Panel的应用商店安装了以下基础组件:

  • OpenResty:基于Nginx的Web服务器,用于处理HTTP请求
  • MySQL 8.4.4:数据库,用于存储WordPress的数据

这两步都很顺利,应用商店一键安装即可。

二、创建PHP运行环境

WordPress需要PHP环境来运行。1Panel自带了PHP环境,但为了后续方便安装Redis扩展,我决定手动创建一个新的PHP运行环境,版本选的是8.4.6。

2.1 踩坑:Docker镜像拉取失败

在创建PHP环境时,遇到了第一个拦路虎。构建过程中报错:

镜像 build 失败: failed to solve: php:8.4.6-fpm-alpine: 
failed to resolve source metadata ... 
dial tcp: lookup docker.1panelproxy.com on 127.0.0.53:53: no such host

原因是1Panel默认的Docker镜像加速地址 docker.1panelproxy.com 已经不可用了。1Panel的应用商店和运行环境都需要通过Docker拉取镜像,如果镜像加速地址无效,所有安装都会失败。

解决方法:

在1Panel的”容器”→”配置”→”镜像加速”中,将默认的加速地址替换为可用的源:

https://docker.1panel.live

修改保存后,再重新创建PHP环境,镜像拉取就成功了。

2.2 选择合适的PHP扩展

在创建PHP运行环境时,需要勾选一系列PHP扩展。对于WordPress,以下扩展是必要的:

扩展作用
opcachePHP脚本加速,必开
redis连接Redis缓存(后续配置)
imagick图片处理,比GD效果更好
igbinary高效的序列化器,配合Redis使用
bcmath某些高级插件需要
exif图片元数据处理
intl国际化支持

2.3 踩坑:命名不规范导致识别问题

第一次创建PHP环境时,我把名称填成了”Redis”,结果1Panel把它归类为应用商店的一个应用实例,而不是一个可选的PHP运行环境。在创建网站时,下拉列表里根本找不到这个环境。

教训: 创建运行环境时,名称一定要规范清晰,比如 PHP8 或 php-8.4,方便后续识别和选择。

三、创建WordPress网站

3.1 选择合适的网站类型

在1Panel中创建网站时,有两种相关类型:

  • “运行环境”类型:适用于需要PHP解释器的动态网站(如WordPress)
  • “反向代理”类型:适用于将请求转发到后端服务的场景

如果要部署WordPress,应该选择”运行环境“类型,这样才能关联之前创建的PHP环境。

3.2 踩坑:网站类型选错导致无法切换PHP环境

我第一次创建时误选了”反向代理”类型,导致网站设置中根本没有”PHP运行环境”这个选项,无法切换到新创建的PHP8环境。

解决方法: 删除错误的网站,重新选择”运行环境”类型创建。

3.3 使用应用商店的WordPress还是手动部署?

1Panel的应用商店提供了WordPress的一键安装,非常方便。我通过应用商店安装了WordPress,它会自动创建一个独立的Docker容器来运行WordPress。这种方式的好处是省去了手动下载和配置的步骤,但需要注意的是:

  • 应用商店安装的WordPress是一个独立的Docker容器,内部自带Apache和PHP
  • 它与我们在1Panel中创建的PHP运行环境是两套不同的PHP体系
  • 后续配置Redis扩展时,需要在WordPress容器内部操作

四、配置反向代理让域名访问WordPress

应用商店的WordPress容器默认运行在某个端口上(例如8964端口),我需要把域名指向这个容器。

在1Panel的网站设置中,进入”反向代理”选项卡,添加规则:

  • 前端请求路径:/
  • 后端代理地址:http://[WordPress容器内部IP]:80

踩坑:端口号要分清

WordPress容器的端口映射是”宿主机8964端口→容器内部80端口”。OpenResty容器访问WordPress容器时,走的是容器内部网络,必须使用容器内部监听的端口(80),而不是宿主机映射的端口(8964)。

如果写成8964,会报502错误,因为容器内部根本没有监听8964端口。

第二部分:配置Redis对象缓存

网站可以正常访问后,我决定进一步优化性能,为WordPress配置Redis对象缓存。

五、安装Redis服务

在1Panel应用商店中安装Redis,同样遇到了Docker镜像拉取失败的问题。解决方法一样:配置好镜像加速地址后重新安装。

安全提醒:

Redis安装成功后,默认会开放6379端口。务必在云服务器的安全组中关闭6379端口的外部访问。Redis默认没有强身份验证,暴露在公网很容易被扫描和攻击。

六、在WordPress容器中安装Redis扩展

6.1 为什么需要在容器内部安装?

打开WordPress后台,安装”Redis Object Cache”插件后,诊断信息显示:

PhpRedis: Not loaded
PHP Version: 8.3.33

这说明WordPress容器自带PHP 8.3.33,但这个PHP环境中没有安装Redis扩展。我们需要在容器内部手动安装。

6.2 通过PECL编译安装Redis扩展

进入WordPress容器的终端(在1Panel的容器列表中点击对应容器的”终端”按钮),执行以下步骤:

第一步:安装编译工具

apt-get update
apt-get install -y gcc make autoconl

第二步:安装PECL

apt-get install -y php-pear

第三步:编译安装Redis扩展

pecl install redis

编译过程中会询问一些选项(如是否启用igbinary、lzf等压缩支持),全部按回车使用默认值即可。

第四步:启用扩展

echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
php -m | grep redis  # 验证是否安装成功,应输出"redis"
service apache2 restart

七、配置Redis连接

7.1 在wp-config.php中添加连接信息

在WordPress容器的 /var/www/html/wp-config.php 文件中,添加Redis连接配置:

define( 'WP_REDIS_HOST', '容器名' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', '密码' );

这里的”容器名”需要用实际的Redis容器名称替换。

7.2 踩坑:连接地址写错了

第一次配置时,我把 WP_REDIS_HOST 写成了 127.0.0.1。但WordPress容器和Redis容器是两个独立的Docker容器,WordPress容器内部的 127.0.0.1 指的是它自己,而不是Redis容器。

解决方法: 用Redis容器的名称(如 1Panel-redis-[随机后缀])作为连接地址,因为同一Docker网络中的容器可以通过容器名互相访问。

7.3 踩坑:密码认证失败

Redis设置了密码,但WordPress没有提供密码。连接时被拒绝,报 NOAUTH Authentication required。

解决方法: 在 wp-config.php 中添加 WP_REDIS_PASSWORD 常量。

7.4 踩坑:wp-config.php中的常量未被读取

即使正确配置了 wp-config.php,启用缓存后网站仍然报错。原因是 wp-config.php 中的常量定义位置不对——如果定义在 require_once(ABSPATH . 'wp-settings.php') 之后,object-cache.php 可能无法读取到这些常量。

解决方法: 直接在 object-cache.php 文件开头强制定义连接常量。

在 /var/www/html/wp-content/object-cache.php 的开头(<?php 之后)添加:

if ( ! defined( 'WP_REDIS_HOST' ) ) {
    define( 'WP_REDIS_HOST', '1Panel-redis-[随机后缀]' );
}
if ( ! defined( 'WP_REDIS_PORT' ) ) {
    define( 'WP_REDIS_PORT', 6379 );
}
if ( ! defined( 'WP_REDIS_PASSWORD' ) ) {
    define( 'WP_REDIS_PASSWORD', '你的Redis密码' );
}

八、最终验证

完成所有配置后,刷新WordPress后台的”设置→Redis”页面:

  • 状态显示为”已连接“
  • Redis版本显示为具体版本号
  • PhpRedis显示为”Loaded”

此时,Redis对象缓存已经正式生效。网站的重复访问速度会有明显提升,数据库的查询压力也大大减轻。

九、经验总结与架构梳理

9.1 最终的架构

用户浏览器
    ↓
域名(your-domain.com)
    ↓
OpenResty(监听80/443端口)
    ↓
反向代理转发到 WordPress容器:80
    ↓
WordPress容器(Apache + PHP + Redis扩展)
    ↓ ↓
MySQL 8.4.4(数据库)  Redis(对象缓存)

9.2 关键知识点

  1. Docker镜像加速必须配置好。1Panel默认的加速地址可能不可用,需要手动更换。
  2. 容器名比IP地址更可靠。Docker容器重启后IP可能变化,但同一网络中的容器名是稳定的。
  3. 分清”宿主机端口”和”容器内部端口”。反向代理时,容器间通信用的是容器内部端口。
  4. wp-config.php中的常量要尽早定义。最好放在 require_once(ABSPATH . 'wp-settings.php') 之前。
  5. object-cache.php是drop-in文件,优先级很高。只要这个文件存在,WordPress就会强制使用Redis缓存。
  6. PECL编译安装是apt-get的有力补充。当软件源中没有所需包时,PECL可以提供另一个安装途径。

9.3 注意事项

  • 容器重建后扩展会丢失:如果WordPress容器被重建,之前用PECL安装的Redis扩展需要重新安装
  • 容器名可能会变化:每次重建应用时,容器名的随机后缀可能变化,记得同步更新配置
  • 安全第一:Redis的6379端口不要暴露到公网

9.4 一点心得

从安装面板到配置Redis缓存,一路遇到了不少问题:镜像拉取失败、网站类型选错、容器间网络不通、PHP扩展缺失、配置文件读取失败……每一个问题都花了不少时间去排查和解决。

但也正是这些挫折让我对Docker容器、1Panel的工作机制、WordPress的缓存体系有了更深入的理解。

如果你也在折腾同样的事情,希望这篇记录能帮你节省一些时间。遇到问题时,记住三步走:看日志、查配置、验证连通性。


如果你在搭建过程中遇到类似的问题,欢迎在评论区交流。

评论

一条对“第一份实战记录”的回复

  1. 一位 WordPress 评论者 的头像

    您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注