日志
- 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中设置好反向代理。如下图所示:
设置完成后直接登陆: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端口的机器就自求多福了(~ ̄▽ ̄)~
WordPress到这里已经是安装成功了。以后我们会讲怎么进行设置的!
最后不要忘记,用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破解版的付费下载。
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
搭建完成后,后台可以进入,主页就一直重定向次数过多是什么情况?
如果你是使用Cloudflare,可以看看《简单介绍Cloudflare和常用配置》中的“SSL/TLS”小节,或有帮助。如果不是,那么要具体情况具体分析。
关于https配置,沿用了搭建nextcloud时的方法,直接利用wordpress容器里的apache完成。
大佬您好!有个关于WordPress MySQL数据库的问题想请教一下。
比如,我有网站$W$,基于docker的,其根目录$R{W}$包括网站和MySQL的数据。我想复制$W$并使用一个新域名来访问它。首先,我复制整个$R{W}$;在完成端口号更改等操作后,我直接上线。这时,我想将旧链接
oldurl
改为新链接newurl
。我进行下面的命令:进入MySQL的Shell。接着:
我发现,类似这种命令:
是可以成功的。但是,类似这种命令:
会输出:
Rows matched: 11 Changed: 0 Warnings: 0
。即可以匹配,但无法更改。我估计是MySQL有一种特别的方式判断内容是否更改。但我不知道该如何强制更新。您有什么建议吗?
ufw allow port/tcp
和ufw allow port
的区别是什么呀?docker-compose.yml
里app
的WORDPRESS_DB_PASSWORD
需要跟db
的MYSQL_PASSWORD
保持一致。否则访问的时候会报错。这个评论区没有预览功能,有点鸡肋,哈哈!是的,谢谢提醒了!
其实这些数据库的用法,要真的用过,踩过坑,才能掌握。没有debug的折腾是不完整的!
如果设置了TCP,会比好没设置好,因为如果你不设置,开启的权限就是TCP/UDP。两者的关系可见此文。我觉得,既然TCP已经足够了,还是将权限设置得更窄一些。这其实只是一个权限设置的原则性问题,但在实际使用中可能没有区别。ヾ(≧∇≦*)ゝ
甲骨文ARM机在docker里面装WordPress提示no matching manifest for linux/arm64/v8 in the manifest list entries,怎么解决?
可否在你的VPS上输入:
看看VPS的系统和架构信息?
但一般来说,WordPress的镜像是支持arm64的。
如图所示:
![image-20220618231043680]()
查看图片
我看了一下,应该是MYSQL镜像的锅。你换成自己机器的镜像即可。如下图
![image-20220618231300181]()
查看图片
改成mysql:oracle,就可以了。感谢!