又是一波三折,踩了数不尽的坑

和同事一起租了海外的vps,她提出要把她之前的wordpress迁移过来,说实话在前期一直踩坑的时候我后悔了,不该和她一起合租的,我对wordpress的映像就是php,老旧,臃肿,但是在过程中不断地了解wordpress,并且认识到它是一个自定义程度极强,非常适合个人开发者的的时候,我对wordpress产生了兴趣,并且在踩某些坑的时候对nginx更加的熟悉了,还算是比较好的体验(这个过程耗时好几个月,不过中间有很长一段时间因为工作上出差了)

docker化wordpress

现在在使用linux服务器的时候我的习惯就是除了nginx和一些基础的小工具之外,其它的功能一切都用docker封装起来,因为多年前的依赖地狱真是把我搞怕了
做docker-compose.yml的时候也不是很顺利,网上搜了很多也尝试了很多,最终使用了这个构建文件

version: '3'

services:
  # Database
  db:
    image: mysql:5.6
    volumes:
      - /root/lam/work/wordpress/mysql:/var/lib/mysql
      - /root/lam/work:/work
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ****
      MYSQL_DATABASE: ****
      MYSQL_USER: ****
      MYSQL_PASSWORD: ****
    privileged: true
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    privileged: true
    ports:
      - '8880:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: ****
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    privileged: true
    ports:
      - '8000:80'
    restart: always
    volumes:
      - /root/lam/work/wordpress/html:/var/www/html
      # - /root/lam/work/wordpress/etc/php:/usr/local/etc/php
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: ****
      WORDPRESS_DB_PASSWORD: ****
    networks:
      - wpsite
networks:
  wpsite:

听从同事之前请的网络工程师迁移方案

他把wp的html目录打成压缩包作为资源文件和把数据库导出作为数据库文件发了过来,使用方法就是替换相同目录下的资源文件和导入数据库,我先把docker跑起来,然后目录也都生成了,在进phpadmin,一开始数据库一直导不进去,后来才知道要把原来的表都删除才行,数据库这块导进去没什么问题了,接着资源文件替换了以后,首页打不开,再次沟通以后说是要把wp-config.php这个文件删掉重新生成,照做以后首页依然打不开,这个方案又前前后后做了很多次,最好的一次就是首页出来了,然后页面上的图片有问题,然后点击链接,域名跳转成127.0.0.1,又把这个问题同网络工程师沟通无果(后面我自己才发现这个是nginx配置的问题),自此我对网络工程师失去了耐心和信任,决定按照我自己的思路自己弄

插件迁移方案 All-in-One WP Migration

网上这个插件的讨论很多,决定使用它,向同事要到了迁移前的网站的账号密码登了上去,装了All-in-One WP Migration,导出了迁移文件,然后到了新的站点也装了这个插件准备导入,然后遇到了另一个坑就是,这东西导入大文件是要收费了,于是参考了网上的方案,wp居然可以直接在后台页面上编辑插件的源码,别人第一步首先是在nginx上把上传大文件的配置放开,我这里之前估计是做过这一步,所以没有卡在这,直接下一步

  1. 我们找到插件编辑器,并选择All-in-One WP Migration。
  2. 打开 Constants.php 文件
  3. 编辑 Constants.php 文件,点击Ctrl+F 查找 Max File Size这行代码,会发现这行代码出现在333行上下。
  4. 我们把 2 << 28 修改成4294967296(这是以字节为单位,即4GB,根据个人需要来修改)
    成功把上传限制改成了4GB,然后耐心等待迁移文件上传,但是到了100%的时候就卡住一动不动,又重新试了几次,都是一样的结局,十分蛋疼,我开始怀疑是插件针对我这种手动破解的方式做了限制,于是又求助万能的谷歌,发现也有人遇到这种情况,需要用老版的插件才管用,于是卸载了插件,根据网友的链接下了老版插件 all-in-one-wp-migration.6.77用了这个插件上传的速度肉眼可见慢了很多,但是到了100%的时候没有卡住,正常解压了

wp后台密码错误

登入phpMyAdmin后,找到wp-users表,在左边拉下来最下面,可以看到账号和密码,密码是MD5加密过的,无法反推明文,不过我们可以修改成别的,于是随便用一个密码在工具网页上生成了md5修改了数据库,返回admin登录成功

以ip端口访问的形式跑通,伟大的里程碑

非常地激动人性,跳转,图片都work的,接下来就是配域名,循序渐进,先配http的

location / {
            proxy_pass http://127.0.0.1:8000;
        }

依照之前的经验,直接做了proxy_pass转发,但是令人难过的是在首页跳转的时候域名会变成127.0.0.1,然后页面上的图片不work,我意识到问题出在nginx配置上,接下来省略了一万字的踩坑和新路历程,直接上答案

location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://127.0.0.1:8000;
        }

不懂为什么,但是就是要加这么多配置,少一行都不行,都是泪
然后图片不work的情况有两个原因

  1. 是wp数据库里的链接域名都是写死的绝对路径,非常地坑,我开始怀念起我用的halo,可以设置成全局相对路径,非常灵活简单,要解决这个问题就要手动去改数据库,这里列几条sql
UPDATE wp_options SET option_value = replace(option_value, '旧域名','新域名');
UPDATE wp_posts SET post_content = replace(post_content, '旧域名','新域名');
UPDATE wp_comments SET comment_content = replace(comment_content, '旧域名', '新域名');
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, '旧域名', '新域名');
UPDATE wp_posts SET guid = replace( guid, '旧域名', '新域名');

最好是能把所有表都自动替换的sql

  1. 然后还是有图片不work的情况是通过网页的开发者检查工具分析有资源报404,找不到此资源,一开始我还在怀疑是nginx把图片资源拦截了,后来我直接上那个静态资源目录看过后才发现是原本应该存在的文件不存在,这应该是迁移工具的坑,于是我手动把upload目录压缩拷到服务器上解压才fix了这个问题

至此wp迁移告一段落

打赏
支付宝 微信
上一篇 下一篇