Other

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.comhttps://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>

留言

您的电子邮箱地址不会被公开。