Docker系列 WordPress系列 搭建WordPress个人博客
本文最后更新于 3 天前,如有失效请评论区留言。

本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容!也欢迎大佬对本文进行慈善承包(ฅ´ω`ฅ)

日志

  • 2023-04-25:新增一种实用的防火墙方案。详见“配置yml文件——方案2”。docker高级用户可以看看,小白还是暂时先绕路 (ฅ´ω`ฅ)。 使用方案2的小伙伴Redis设置里也要注意变化。

前言

通过Docker系列 你需要个人博客吗,你基本上已经确定自己要不要玩一个WordPress个人博客了。如果你需要的话,就来看一下怎么安装WordPress个人博客吧!

注意:目前不太建议在未开放443端口的机器上安装Docker版WordPress。经过测试,如果要在没有开放443/80端口的服务器上给wordpress布署反向代理和ssl证书是非常困难的,这个困难主要来于wordpress本身对于安全性的控制。通过调试复杂的nginx操作或可成功,但目前基于Nginx proxy manager(非80/非443端口)的管理方式暂时还未取得成功。当然,更重要的原因是,如果你的博客地址有个端口号,会给人一种很不正式的感觉

下面开始安装吧!

测试环境

我是在自己的VPS上进行测试的:

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
docker --version # Docker version 20.10.5, build 55c4c88
docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

准备工作

按需修改工作目录:

work=~/docker/wordpress && mkdir -p $work && cd $work

按需修改端口,开启防火墙:

sudo ufw allow 4145/tcp comment 'wordpress' && sudo ufw reload

配置yml文件

不了解docker compose的小伙伴请看:《Docker系列 了解Docker Compose的配置文件》。不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。注意,一定要在https域名设置好的前提下再进行后面的初始化步骤!否则可能会由于URL问题导致重定向错误!

大致的思路是通过mysql和redis对wordpress的性能进行优化

方案1

按需修改端口,开启防火墙:

sudo ufw allow 4145/tcp comment 'wordpress' && sudo ufw reload

新建文件docker-compose.yml:

vim $work/docker-compose.yml

添加以下内容。注意,如果你是arm的机器(比如白嫖甲骨文VPS), mysql:5.7请改成mysql:oracle

---
version: '3.0'

services:
  db:
    image: mysql:5.7 # arm架构的机器请将mysql:5.7改为mysql:oracle
    # container_name: wordpress-db
    restart: unless-stopped
    # command: --max-binlog-size=200M --expire-logs-days=2 # 使用mysql 8.0的小伙伴建议使用
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword # 按需修改
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: yourpassword # 按需修改
    volumes:
      - './db:/var/lib/mysql'
    networks:
      - default

  app:
    image: wordpress:latest
    # container_name: wordpress-app
    restart: unless-stopped
    ports:
      - 4145:80  # 按需修改。与防火墙开放端口一致。
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: yourpassword # 按需修改
    volumes:
      - './app:/var/www/html'
    links:
      - db:db
    depends_on:
      - redis
      - db
    networks:
      - default

  redis:
    image: redis:alpine
    # container_name: wordpress-redis
    restart: unless-stopped
    volumes:
      - ./redis-data:/data
    networks:
      - default

networks:
  default:
    name: wordpress

直接上线服务:

# 开启服务
cd $work && docker-compose up -d 

这里我注释了各个容器的container_name参数。你也可以取消注释,然后重新上线,看看有什么区别!

在ddns-go或者域名托管后台设置好blog.exampledomain.com的动态域名解析(指向nas的ip)。

在NPM中设置好反向代理。如下图所示:

image-20220427090856986

设置完成后直接登陆:https://blog.exampledomain.com

这个方案有一个缺点,就是VPS IP暴露后,通过http://vps-ip:4145的方式访问WordPress。具体原理见《Docker系列 两大神器NPM和ddns-go的安装》的“NPM——注意事项——防火墙”小节。不过,由于WordPress对域名的严格控制,http://vps-ip:4145这种方式通常是无法访问WordPress的,所以方案1已经是很安全的了。

方案2

仅建议对docker比较了解且新安装wordpress的小伙伴使用

方案2可以在根本上防止别人通过类似http://vps-ip:4145的方式访问WordPress,提升安全性。具体设置如下:

此隐藏内容仅限VIP查看。包年VIP仅10元,建议升级。VIP可享有哪些特权

初始化

访问https://blog.exampledomain.com后,可以看到这个页面,说明安装已经成功:

image-20220427091208299

这个是选语言的。我们选择简体中文。点击Continue继续下一步。

这里按需填写相关信息。可以用bitwarden生成一个强密码。对于这一项对搜索引擎的可见性,我建议你不要打勾,以后搜索引擎可以找到我们的博客。如果你的博客非常私密,你就打勾吧!最后点击安装WordPress进入下一步。类似于:

image-20220427091505533

最后成功了!你就按登录直接登录即可:

image-20220427091738685

默认的后台就是长这样:

image-20220427091838901

Redis设置

主要参考sleele的博文:WordPress搭配Redis加速网站访问速度。关于Reids的原理,可参考文章《这次彻底读透 Redis》。

首先,打开文件:

sudo vim $work/app/wp-config.php

找到DB_COLLATEdefine( 'DB_COLLATE', 'XXX...'); 后添加如下内容:

/** Redis Object Cache */
define('WP_REDIS_HOST', 'redis'); # 方案1
# define('WP_REDIS_HOST', 'wordpress-redis'); # 方案2
define('WP_REDIS_DATABASE', '0');

如下图所示:

chrome_ctK0XGC3i2

安装Redis Object Cache插件。启动后的外观如下:

chrome_fZn6PaZqtZ

直接点击Enable Object Cache即可。成功时如下:

chrome_b6w536meVN

更多参数的设置可见:

less $work/app/wp-content/plugins/redis-cache/readme.txt

或者参考链接:https://github.com/rhubarbgroup/redis-cache/wiki/Configuration-Options

如果可以成功,你可以在博客的源代码页面底部看到下列注释(可能版本号会有所不同):

<!--
Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com

Retrieved 5056 objects (502 KB) from Redis using Predis (v1.1.10).
-->

小结

在VPS里通过Docker来安装WordPress真的太简单了。没有任何特殊设置。

当然,用非443端口的机器就自求多福了(~ ̄▽ ̄)~

WordPress到这里已经是安装成功了。以后我们会讲怎么进行设置的!

最后不要忘记,用duplicati备份你的WordPress站点喔!还记得怎么用吗?

后续更多内容敬请期待!

拓展阅读

---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍

基于m2w创作。版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载!由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租请留言 | 博客VPS | 致谢渺软公益CDN |

评论

  1. MsTer
    Windows Edge 109.0.1518.78
    4月前
    2023-2-06 22:00:45

    搭建完成后,后台可以进入,主页就一直重定向次数过多是什么情况?

    • 博主
      MsTer
      Windows Edge 109.0.1518.78
      4月前
      2023-2-06 22:03:26

      如果你是使用Cloudflare,可以看看《简单介绍Cloudflare和常用配置》中的“SSL/TLS”小节,或有帮助。如果不是,那么要具体情况具体分析。

  2. ovst
    Windows Edge 108.0.1462.54
    5月前
    2022-12-25 22:49:36

    关于https配置,沿用了搭建nextcloud时的方法,直接利用wordpress容器里的apache完成。

  3. 博主
    Windows Edge 106.0.1370.52
    7月前
    2022-10-25 18:24:57

    大佬您好!有个关于WordPress MySQL数据库的问题想请教一下。
    比如,我有网站$W$,基于docker的,其根目录$R{W}$包括网站和MySQL的数据。我想复制$W$并使用一个新域名来访问它。首先,我复制整个$R{W}$;在完成端口号更改等操作后,我直接上线。这时,我想将旧链接oldurl改为新链接newurl。我进行下面的命令:

    docker exec -it wordpress-db-1 mysql -u root -p # 输入密码

    进入MySQL的Shell。接着:

    use wordpress

    我发现,类似这种命令:

    update wp_options SET option_value='newurl' WHERE option_name='home';

    是可以成功的。但是,类似这种命令:

    UPDATE wp_users SET user_url = replace(user_url, 'oldurl', 'newurl');

    会输出:Rows matched: 11 Changed: 0 Warnings: 0。即可以匹配,但无法更改。
    我估计是MySQL有一种特别的方式判断内容是否更改。但我不知道该如何强制更新。您有什么建议吗?

  4. cye
    Macintosh Chrome 102.0.0.0
    12月前
    2022-6-19 0:08:39
    • 提问,ufw allow port/tcpufw allow port的区别是什么呀?
    • docker-compose.ymlappWORDPRESS_DB_PASSWORD需要跟dbMYSQL_PASSWORD保持一致。否则访问的时候会报错。
    • 不得不吐槽一下中英文混打的时候markdown语法太麻烦了,得不停地切来切去,怕打出一个中文字符识别不对。
    • 博主
      cye
      Windows Chrome 102.0.0.0
      12月前
      2022-6-19 10:23:56

      这个评论区没有预览功能,有点鸡肋,哈哈!是的,谢谢提醒了!
      其实这些数据库的用法,要真的用过,踩过坑,才能掌握。没有debug的折腾是不完整的!
      如果设置了TCP,会比好没设置好,因为如果你不设置,开启的权限就是TCP/UDP。两者的关系可见此文。我觉得,既然TCP已经足够了,还是将权限设置得更窄一些。这其实只是一个权限设置的原则性问题,但在实际使用中可能没有区别。ヾ(≧∇≦*)ゝ

  5. bigyu
    Windows Edge 102.0.1245.44
    12月前
    2022-6-18 23:06:58

    甲骨文ARM机在docker里面装WordPress提示no matching manifest for linux/arm64/v8 in the manifest list entries,怎么解决?

    • 博主
      bigyu
      Windows Chrome 102.0.0.0
      12月前
      2022-6-18 23:09:55

      可否在你的VPS上输入:

      uname -a

      看看VPS的系统和架构信息?
      但一般来说,WordPress的镜像是支持arm64的。

    • 博主
      bigyu
      Windows Chrome 102.0.0.0
      12月前
      2022-6-18 23:10:58

      如图所示:


      查看图片
      image-20220618231043680

    • 博主
      bigyu
      Windows Chrome 102.0.0.0
      12月前
      2022-6-18 23:13:39

      我看了一下,应该是MYSQL镜像的锅。你换成自己机器的镜像即可。如下图


      查看图片
      image-20220618231300181

      • bigyu
        Bensz
        Windows Edge 102.0.1245.44
        12月前
        2022-6-19 8:30:46

        改成mysql:oracle,就可以了。感谢!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇