小站迁移记录

于由astupidcoder发布

从我开始部署这个小站起,一直使用 php5,而且也有段时间,wordpress 后台开始提醒 php 版本不安全,提示我更新。但更新是有风险的,何况我部署的是本地数据库,加上本人比较懒,因此一直没有动。结果前几天,有几个插件一并不支持 php5,导致一打开站就看到几个无法消除的红点,这就让人很不爽了。
所以下决心予以更新。本以为是游园会一样轻松的事儿,结果没想到踩了很多坑。在这里记录一下。

  1. 备份mysql,之后 scp 到本地
    mysqldump -uroot -p 数据库名 > db.sql
    
  2. 备份 wp-content 文件夹,之后 scp 到本地
    tar xvf wp_bak.tar /var/www/html/wp-content
    
  3. 系统重装为 debian 10,旧数据完全抹除。

    之前是 debian8,实在是太老了,也该更新了。此时已经做了最坏打算,就是万一最后实在无法无痛恢复,反正数据库备份了,我就一篇一篇文章在复制进去。

  4. php 重装为 7.4

    wordpress 官方推荐是 7.4 以上,其实 php 出 8 了,但是 8 太新了,简单查了一下,还是有一些负面反馈,担心有兼容性问题,所以最终决定用 7.4

    apt -y install lsb-release apt-transport-https ca-certificates
    wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
    apt update
    apt -y install php7.4
    apt install php7.4-{bcmath,bz2,intl,gd,mbstring,mysql,zip}
    apt-get install php7.4-fpm
    
  5. 这次直接改成 caddy 了,主要是为了 TLS 证书的自动续约。
    apt install -y debian-keyring debian-archive-keyring
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | apt-key add -
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
    apt update
    apt install caddy
    curl -o /usr/bin/caddy "https://caddyserver.com/api/download?os=linux&arch=amd64&p=github.com%2Fmastercactapus%2Fcaddy2-proxyprotocol&idempotency=79074247675458"
    chmod +x /usr/bin/caddy
    
  6. wordpress 下载

    这玩意不能用用 apt 安装,apt安装的有点问题,会报缺一个什么/etc/wp-config-www.your-domain.com.php文件,总之用 apt 安装 wordpress 屁事多,我在这个坑里躺了三个小时,最后还是去官网下载解决的问题。官网:https://wordpress.org/download/

    wget https://wordpress.org/latest.tar.gz
    tar xvf latest.tar.gz
    mv wordpress/ /var/www/html/
    
  7. 上传 wp-content,并且覆盖/var/www/html/wp-content文件夹

  8. 安装 mysql,上传db.sql,导入数据

    apt install mariadb-server mariadb-client
    # 设置密码、创建数据库之类的事情就自己百度吧
    mysql -uroot -p;
    # 输入密码
    use wordpress;
    source db.sql;
    
  9. Caddyfile
    vim /etc/caddy/Caddyfile
    # 内容如下
    https://www.history-of-my-life.com {
       request_body {
          max_size 50MB
       }
       bind 127.0.0.1
       root * /var/www/html
       php_fastcgi unix//run/php/php7.4-fpm.sock
       file_server browse
       encode gzip
       @disallowed {
           path /wp-content/uploads/*.php
       }
    }
    
    :80 {
       redir https://{host}{uri} permanent
    }
    
  10. php7.4-fpm 的运行用户问题

    这个问题很蛋疼,搞起来以后一直 bad request,因为 caddy 的默认用户是 caddy,而 php7.4-fpm 的默认用户是 www-data,这就出问题。所以要改一下

    vim /etc/php/7.4/fpm/pool.d/www.conf
    # 寻找并改变下面两行
    user = www-data
    group = www-data
    # 改成下面这样
    user = caddy
    group = caddy
    # 之后运行
    systemctl restart php7.4-fpm
    
  11. php7.4-fpm 的上传大小限制
    vim /etc/php/7.4/fpm/php.ini
    # 修改俩参数为
    upload_max_filesize 50M
    post_max_size   50M
    
  12. Https 和 http 混用的 mix-content blocked 问题

    终于打开页面了,发现页面框架混乱无比,有内容,但 css 和 js 全都丢了。看了一下 F12,发现 css 和 js 全都显示加载异常,错误是 mix-content blocked,查了一下,是主流浏览器的安全更新,现在不允许在 https 网站中夹杂 http 请求。查球半天,最后直接改了主题的 header.php 文件。

    vim /var/www/html/wp-content/themes/hestia/header.php
    # 在 header 里加上这么一句
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    

    如下图:

    image-20210620134745582

  13. 修正重定向次数过多的问题

    然后主页就正常了,但是一旦尝试进入 wp-admin 页面,就会出现重定向次数爆炸的问题。神特么烦,主要思路肯定是 80 和 443 端口之间来回跳转的问题,但怎么也查不到原因,在网上查了半天,查到一个看起来比较可能靠谱的方法,用了一下,真解决了……

    vim /var/www/html/wp-config.php
    # 在第二行加这么几句
    $_SERVER['HTTPS'] = 'on';
    define('FORCE_SSL_LOGIN', true);
    define('FORCE_SSL_ADMIN', true);
    

    截图如下:

    image-20210620135153124

  14. 之后一顿重启即可

    systemctl restart caddy
    

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。