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

本博客由Faconhost大力赞助!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么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端口)的管理方式暂时还未取得成功。当然,更重要的原因是,如果你的博客地址有个端口号,会给人一种很不正式的感觉

另外,《从能用到好用-快速搭建高性能WordPress指南》中的方案可能是一种更加高效的方式。如果你有兴趣也可以试试看!

下面我们开始安装wordpress吧!

测试环境

我是在自己的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查看,仅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端口的机器就自求多福了(~ ̄▽ ̄)~

值得一提的是,和Nextcloud一样,WordPress也可以基于FPM镜像喔!这是一个示例,以后有机会我也试试看。这种方式的性能似乎更强!

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

后续更多内容敬请期待!

拓展阅读

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

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

评论

  1. yyl
    Windows Edge 130.0.0.0
    3 周前
    2024-10-30 17:12:10

    duplicati备份站点的话,是备份哪些文件夹呢?

    • 博主
      yyl
      Windows Edge 130.0.0.0
      3 周前
      2024-10-30 17:16:51

      如果wordpress站点是基于docker来建的,只要备份网站的根目录即可。

      • 博主
        Bensz
        Windows Edge 130.0.0.0
        3 周前
        2024-10-30 17:17:22

        也就是和docker-compose.yml同级的那个几子文件夹。

  2. 泡泡浴
    Macintosh Safari 17.4
    8 月前
    2024-3-19 14:03:37

    大佬好!想问下,按照上面这种方式搭建的网站,如果想要迁移的话,是不是只需要迁移~/docker/wordpress文件夹里的数据就可以了呢?

    • 博主
      泡泡浴
      Windows Edge 122.0.0.0
      8 月前
      2024-3-19 15:21:12

      是的。我教程里通过docker-compose安装的应用,基本上都可以这样备份 ~ 我还有一个配套教程讲述如何进行备份,以达到数据安全的目的;具体见《Docker系列 搭建自动备份服务duplicati》。

  3. danBoy
    Windows Chrome 122.0.0.0
    8 月前
    2024-3-12 1:44:46

    请问一下:我是腾讯轻量+centos上搭建的,然后NPM方面能利用域名+端口号访问,并且申请了证书,但是安装wordpress的时候NPM上反向代理出现Internal Error,就文章中的bi站视频一样,不知道怎么弄啦,已经尝试了几次都不行,望您有空闲时间还请教以下,谢谢!

  4. 14002
    Android Chrome 110.0.0.0
    已编辑
    1 年前
    2023-7-18 16:43:12

    docker-compose.yml中的按需修改除了端口其它都可以不改吗?

    • 博主
      14002
      Windows Edge 114.0.1823.82
      1 年前
      2023-7-18 16:44:30

      建议有“按需修改”的地方都改一下。特别是MYSQL_PASSWORD之类的密码。

    • 14002
      14002
      Android Chrome 110.0.0.0
      1 年前
      2023-7-18 16:55:27

      WORDPRESS_DB_PASSWORD: yourpassword # 按需修改

      WORDPRESS_DB_PASSWORD: yourpassword # 按需修改

      MYSQL_ROOT_PASSWORD: rootpassword # 按需修改
      是一样密码吗?

      • 博主
        14002
        Windows Edge 114.0.1823.82
        1 年前
        2023-7-18 16:57:07

        WORDPRESS_DB_PASSWORD和MYSQL_ROOT_PASSWORD可以一样,也可以不一样。仔细体会一下示例。一般,字符一样的,就代表是同一个东西。不一样的,我一般会使用不同的字符。

    • 14002
      14002
      Android Chrome 110.0.0.0
      1 年前
      2023-7-18 17:05:41

      mysql可用8.0吗?

      • 博主
        14002
        Windows Edge 114.0.1823.82
        1 年前
        2023-7-18 17:08:53

        完全没问题 (ฅ´ω`ฅ) 我现在用的就是8.0

      • 14002
        Bensz
        Android Chrome 110.0.0.0
        1 年前
        2023-7-18 17:15:44

        那docker-compose.yml和《Docker系列 升级MYSQL数据库》的那个一样吗?

      • 博主
        14002
        Windows Edge 114.0.1823.82
        1 年前
        2023-7-18 17:18:13

        文章《Docker系列 升级MYSQL数据库》里刚好有一个示例。你如果是重新安装wordpress,可以按那个文章的脚本来安装。你可以都试试看,能不能成功。加油!

  5. RexWang
    Macintosh Chrome 114.0.0.0
    已编辑
    1 年前
    2023-7-16 0:58:44

    补充两个可选项(贴代码感觉刷屏了,有没有可能折叠):

    1. docker-compose 文件的变量可以分离出来,方便修改,比如

    .env 文件:

    MYSQL_ROOT_PASSWORD=123456
    MYSQL_USER=wordpress
    MYSQL_PASSWORD=123456

    然后 yml 里改为 ${} 以及添加 env_file 选项

      db:
        image: mysql:8.0 # arm 架构的机器请将 mysql:8.0 改为 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: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: wordpress
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        volumes:
          - './db:/var/lib/mysql'
        networks:
          - default
        env_file:
          - .env
    1. 反向代理,直接编辑 Nginx 配置的方式,伪链接 wordpress.wzhecnu.cn
      server {
       listen 80; # http 重定向
       server_name wordpress.wzhecnu.cn;
       return 301 https://$server_name$request_uri;
      }
      server {
       listen 443 ssl;
       server_name wordpress.wzhecnu.cn;
       ssl_certificate cert/wordpress.wzhecnu.cn.pem;
       ssl_certificate_key cert/wordpress.wzhecnu.cn.key;
       ssl_session_cache shared:le_nginx_SSL:1m;
       ssl_session_timeout 1440m;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
       ssl_prefer_server_ciphers on;
       ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
       location / {
           proxy_pass http://172.17.0.1:4145;
           proxy_ssl_server_name on;
           proxy_set_header Connection '';
           proxy_set_header Host $host;
           proxy_http_version 1.1;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-Proto $scheme;
       }
      }

      特别注意 proxy_set_header 参数必填。

    • 博主
      RexWang
      Windows Edge 114.0.1823.82
      1 年前
      2023-7-16 8:40:43

      是的,类似的方式比较合适,尤其是变量被docker-compose.yml重复引用时。我在《Docker系列 搭建nextcloud-fpm + nginx网络服务器》中也有提到过这种方法。有空我优化一下教程吧 (ฅ´ω`ฅ)

  6. RexWang
    Macintosh Chrome 114.0.0.0
    已编辑
    1 年前
    2023-7-11 0:54:47

    楼主,我按方案一进行配置(参数均未修改),用 IP/域名 + 端口的方式访问会出现

    Error establishing a database connection

    另外,我设置 nginx 后排版错误,配置页只出现文本信息,用端口则不会。

    • RexWang
      RexWang
      Macintosh Chrome 114.0.0.0
      已编辑
      1 年前
      2023-7-11 1:04:19

      简单 Google 了下,可能要修改 wp-config.php?(没系统学过 PHP 和数据库这些,上手 wordpress 是不是需要更多折腾)
      排查了下,把 db 的 command: 注释去掉就可以访问了。

      • 博主
        RexWang
        iPhone Chrome 114.0.5735.124
        1 年前
        2023-7-11 7:56:50

        这就奇怪了,你使用的是同样的镜像吗?如果是同样的镜像,不太可能会这样。因为我现在就是这样使用的

      • 博主
        RexWang
        iPhone Chrome 114.0.5735.124
        1 年前
        2023-7-11 7:59:52

        我看了一下,你应该是用5.7,那个command本来就是要注释的。那个注释是给8.0用的。你如果最近安装wordpress,用8.0比较合适。当然后面也可以迁移过去,问题不大。

  7. yamchiu
    Windows Chrome 114.0.0.0
    1 年前
    2023-6-19 12:08:23

    我两个docker 软件反向代理到两个二级域名都是可以正常访问的,唯独这个word press没法访问只能拥IP加端口的方式访问,咋回事,博主各位大佬知道是什么问题吗

    • 博主
      yamchiu
      Windows Edge 114.0.1823.51
      已编辑
      1 年前
      2023-6-19 15:18:23

      设置要改为你的域名,如图:

      查看图片
      msedge_AZlW4MiRDm

      。 如果不行,就需要远程看一下具体的原因了。

  8. MsTer
    Windows Edge 109.0.1518.78
    2 年前
    2023-2-06 22:00:45

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

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

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

发送评论 编辑评论


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