WordPress 基于 docker 快速部署
1. 安装部署
# 可选,部署单实例 MySQL,也可使用外置 MySQL
#docker pull mysql:5.6
#docker run -d --privileged=true --name OLDMysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 33306:3306 mysql:5.6
# 拉取镜像
docker pull wordpress:latest
# 启动容器
docker run -d --name wordpress -v /mnt/disk1/wordpress/:/var/www/html/ -e WORDPRESS_DEBUG=true -e WORDPRESS_DB_HOST=172.25.2.70:13066 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress -p 10080:80 wordpress:latest
# 查看日志
docker logs -f --tail=10 wordpress
# 修改网站地址(如果需要)
#UPDATE wp_options SET option_value='http://blogs.wl4g.com:80' WHERE option_id=1
#UPDATE wp_options SET option_value='http://blogs.wl4g.com:80' WHERE option_id=2
#UPDATE wp_users SET user_url='http://blogs.wl4g.com:80' WHERE ID=1
- 注:启动 WordPress 容器,默认会启动
apache2
作为web服务器,因官方镜像写死了监听80
端口,因此建议使用容器虚拟网络或docker
默认的bridge
网络做 Port 映射,不要使用host
网络,以免端口冲突.
2. 自定义设置
2.1 推荐主题
-
AShe - 旅风+技术博客风格(推荐,可作为现代风的 markdown 技术博客,较灵活设置上右下左等区域展示)
-
WordStar - 简单博客风格(渲染 markdown 的代码块不是很收敛)
-
Bootstrap Basic - 极简经典风格(可作为渲染 markdown 技术博客)
3. 深度集成
3.1 集成 markdown
3.2 页脚添加备案信息
- 注:源码文件
wp-content/themes/wordstar/footer.php
属于wordstar
主题特有,如果更换主题需对应修改。
# 可通过递归查找 footer.php
# grep '/footer.php' /mnt/disk1/wordpress -R
# 最终找到如下文件然后增加内容(docker挂载目录)
vim /mnt/disk1/wordpress/wp-content/themes/wordstar/footer.php
# 在 </footer> 前增加
<div style='cursor:pointer;height:20px;text-align:center;font-size:12px;margin:auto;'>
<a href="https://beian.miit.gov.cn/" target="_blank">Copyright 2022 WL4G ● 粤ICP备12345678号</a>
</div>
3.3 页眉嵌入脚本
- 注:源码文件
wp-content/themes/wordstar/header.php
属于wordstar
主题特有,如果更换主题需对应修改。
# 可通过递归查找 header.php
# grep '</head>' /mnt/disk1/wordpress -R
vim /mnt/disk1/wordpress/wp-content/themes/wordstar/header.php
3.4 集成 PV/UV 站点分析
4. FAQ
4.1 发现在非科学上网的情况下,iOS、PC 端口打开博客非常慢,如何排查解决?
-
此问题已解决,其原因是无意安装了 Jetpack 插件(里面大量引用了墙外地址)导致加载异常。
-
排查过程: 使用 Charles 抓包 iOS 上的 Chrome 访问,然后发现大量请求: https://secure.gravatar.com 和 https://xxx.googleapis.com
-
解决过程:
# 先备份
cp -r /mnt/disk1/wordpress /mnt/disk1/wordpress_$(date +%Y%m%d)
# 递归搜索
cd /mnt/disk1/wordpress
grep -R 'secure.gravatar.com' .
# 递归替换(其中 fastfail.wl4g.com 可以是任意能响应的 url 就可以,目的是让它快速失败不至于一直等待超时)
sed -i 's/secure.gravatar.com/fastfail.wl4g.com/g' $(grep -Rl 'secure.gravatar.com' .)
4.2 某些主题用户 logo 加载不出?
-
分析:通常这些主题(如 Ashe、gravatar.com)下,上传的用户logo等被保存到墙外的公共服务上的,因此墙内就无法加载了。
-
解决右上角登录用户 logo 不显示:通过
grep -R 'xx' .
搜索具体关键字并替换为新 logo 地址:
vim wp-includes/link-template.php
# 约4378行:
...
if ( is_ssl() ) {
$url = 'https://blogs.example.com:443/wp-content/uploads/2021/10/sitelogo.webp';
} else {
$url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );
}
...
- 解决文章列表作者 logo 不显示:以 Ashe 主题为例,搜索具体关键字并替换为新 logo 地址:
vim wp-content/themes/ashe/templates/grid/blog-grid.php
# 约96行:
...
<a href="<?php echo esc_url(get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) )); ?>">
<?php //echo get_avatar( get_the_author_meta( 'ID' ), 30 ); ?>
<img alt="" src="https://blogs.wl4g.com/wp-content/uploads/2022/03/sitelogo.webp" srcset="https://blogs.example.com/wp-content/uploads/2021/10/sitelogo.webp" class="avatar avatar-30 photo" height="30" width="30" loading="lazy">
</a>