日志
- 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中设置好反向代理。如下图所示:
设置完成后直接登陆: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,提升安全性。具体设置如下:
初始化
访问https://blog.exampledomain.com
后,可以看到这个页面,说明安装已经成功:
这个是选语言的。我们选择简体中文
。点击Continue
继续下一步。
这里按需填写相关信息。可以用bitwarden生成一个强密码。对于这一项对搜索引擎的可见性
,我建议你不要打勾,以后搜索引擎可以找到我们的博客。如果你的博客非常私密,你就打勾吧!最后点击安装WordPress
进入下一步。类似于:
最后成功了!你就按登录
直接登录即可:
默认的后台就是长这样:
Redis设置
主要参考sleele的博文:WordPress搭配Redis加速网站访问速度。关于Reids的原理,可参考文章《这次彻底读透 Redis》。
首先,打开文件:
sudo vim $work/app/wp-config.php
找到DB_COLLATE
在define( 'DB_COLLATE', 'XXX...');
后添加如下内容:
/** Redis Object Cache */
define('WP_REDIS_HOST', 'redis'); # 方案1
# define('WP_REDIS_HOST', 'wordpress-redis'); # 方案2
define('WP_REDIS_DATABASE', '0');
如下图所示:
安装Redis Object Cache
插件。启动后的外观如下:
直接点击Enable Object Cache
即可。成功时如下:
更多参数的设置可见:
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站点喔!还记得怎么用吗?
后续更多内容敬请期待!
拓展阅读
- Getting WordPress to Work On Cloudflare Tunnels – YouTube:在Cloudflare Tunnels托管WordPress
- WordPress模版开发教程 – YouTube:比较基础的WordPress主题开发教程。
- 如何创建WordPress插件 – YouTube:比较基础的WordPress插件开发教程。
- 付费阅读Wordpress插件(适用于中英文自建站)2022盘点,含“付费墙”和会员类插件,可实现知识付费和内容变现 (guoyuguang.com):介绍了WordPress付费看文章的相关插件。并不实用。有企业支付宝/个体户的可以使用知12,挺简单。
- 检测浏览器UA,外部打开网址 – 松子分享:检测浏览器是否是某信/某Q,然后提示外部打开。
- 使用第三方托管平台部署博客:小伙伴介绍了几个常见的不依赖VPS的博客托管平台,有兴趣可以看看!
- wordpress子主题的学习:通过修改子主题配置以应用于父主题,从而让父主题可以随意更新。
- 知乎-WordPress主题制作
- WordPress搭配Redis加速网站访问速度
- (~ ̄▽ ̄)~ 从能用到好用-快速搭建高性能WordPress指南:干货满满的一篇文章!!
- 知乎-小白指南:WordPress中的用户角色和权限
- 推荐13个WordPress用户管理相关插件
- 使用Radarr整理电影库–替代TMM,EMBY刮削元数据
- Docker ChineseSubFinder–中文字幕自动下载
- Emby更新-Linux平台支持Intel QuickSync:实测转码效率大幅提升
- 抛弃Cloudflare Page Rule,拥抱Workers–自定义CDN缓存策略
- Gravatar – 上传一张头像图即可用在全球大小网站的头像服务
- WordPress安装Telegram插件 – 自动推送文章到TG群或频道
- 少数派-清理「内容农场」,还你清爽的 Google 中文搜索体验
- WordPress插件开发者
- 小懒小店 – 专业提供wordpress主题定制开发服务 (xlhhy.cn):提供wppay破解版的付费下载。
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
duplicati备份站点的话,是备份哪些文件夹呢?
如果wordpress站点是基于docker来建的,只要备份网站的根目录即可。
也就是和docker-compose.yml同级的那个几子文件夹。
大佬好!想问下,按照上面这种方式搭建的网站,如果想要迁移的话,是不是只需要迁移~/docker/wordpress文件夹里的数据就可以了呢?
是的。我教程里通过docker-compose安装的应用,基本上都可以这样备份 ~ 我还有一个配套教程讲述如何进行备份,以达到数据安全的目的;具体见《Docker系列 搭建自动备份服务duplicati》。
请问一下:我是腾讯轻量+centos上搭建的,然后NPM方面能利用域名+端口号访问,并且申请了证书,但是安装wordpress的时候NPM上反向代理出现Internal Error,就文章中的bi站视频一样,不知道怎么弄啦,已经尝试了几次都不行,望您有空闲时间还请教以下,谢谢!
docker-compose.yml中的按需修改除了端口其它都可以不改吗?
建议有“按需修改”的地方都改一下。特别是MYSQL_PASSWORD之类的密码。
WORDPRESS_DB_PASSWORD: yourpassword # 按需修改
和
WORDPRESS_DB_PASSWORD: yourpassword # 按需修改
和
MYSQL_ROOT_PASSWORD: rootpassword # 按需修改
是一样密码吗?
WORDPRESS_DB_PASSWORD和MYSQL_ROOT_PASSWORD可以一样,也可以不一样。仔细体会一下示例。一般,字符一样的,就代表是同一个东西。不一样的,我一般会使用不同的字符。
mysql可用8.0吗?
完全没问题 (ฅ´ω`ฅ) 我现在用的就是8.0
那docker-compose.yml和《Docker系列 升级MYSQL数据库》的那个一样吗?
文章《Docker系列 升级MYSQL数据库》里刚好有一个示例。你如果是重新安装wordpress,可以按那个文章的脚本来安装。你可以都试试看,能不能成功。加油!
补充两个可选项(贴代码感觉刷屏了,有没有可能折叠):
.env
文件:然后
yml
里改为${}
以及添加env_file
选项wordpress.wzhecnu.cn
特别注意
proxy_set_header
参数必填。是的,类似的方式比较合适,尤其是变量被docker-compose.yml重复引用时。我在《Docker系列 搭建nextcloud-fpm + nginx网络服务器》中也有提到过这种方法。有空我优化一下教程吧 (ฅ´ω`ฅ)
楼主,我按方案一进行配置(参数均未修改),用 IP/域名 + 端口的方式访问会出现
另外,我设置 nginx 后排版错误,配置页只出现文本信息,用端口则不会。简单 Google 了下,可能要修改wp-config.php
?(没系统学过 PHP 和数据库这些,上手 wordpress 是不是需要更多折腾)排查了下,把 db 的
command:
注释去掉就可以访问了。这就奇怪了,你使用的是同样的镜像吗?如果是同样的镜像,不太可能会这样。因为我现在就是这样使用的
我看了一下,你应该是用5.7,那个command本来就是要注释的。那个注释是给8.0用的。你如果最近安装wordpress,用8.0比较合适。当然后面也可以迁移过去,问题不大。
我两个docker 软件反向代理到两个二级域名都是可以正常访问的,唯独这个word press没法访问只能拥IP加端口的方式访问,咋回事,博主各位大佬知道是什么问题吗
设置要改为你的域名,如图:
查看图片
。 如果不行,就需要远程看一下具体的原因了。
搭建完成后,后台可以进入,主页就一直重定向次数过多是什么情况?
如果你是使用Cloudflare,可以看看《简单介绍Cloudflare和常用配置》中的“SSL/TLS”小节,或有帮助。如果不是,那么要具体情况具体分析。