因为升级 PHP 版本,然后似乎 Nginx 搞炸了。。。

前言

我的后端环境 PHP (7.4) + Nginx (1.18) + MySQL (5.6) + Redis (5.0)。

数据备份

迁徙前的准备

备份 MySQL

MySQL 维护使用的是 Navicat Premium,如果数据较多,导出可能较慢。

备份 Redis

这个导出就比较简单了。

1
2
3
redis-cli
auth "如果设置了密码"
save

备份路径可以通过 CONFIG GET dir 查看,一般在 /var/lib/redis 下。

备份 Nginx

一个自用的反代,支持白名单域名。

1
2
3
4
5
6
7
8
9
10
11
12
13
location ~ ^/p {
resolver 223.5.5.5 114.114.114.114;

if ($arg_url !~ (gitee\.com|sinaimg\.cn|game\.gtimg\.cn|pic.rmb.bdstatic.com|api\.github\.com|opengraph\.githubassets\.com)) {
return 403;
}

proxy_pass $arg_url;
proxy_redirect off;
proxy_set_header Referer "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

去掉 PHP 的后缀。

1
2
3
4
5
6
7
location / {
index index.html index.htm index.php;

if (!-f $request_filename) {
rewrite ^(.*)$ $1.php last;
}
}

部署网站

安装面板

服务器运维

按照 appNode 教程部署。

配置 Acme

自动续签证书

按照 acme 教程部署。

续签后自动更换腾讯云 CDN 证书,这里用的是这个项目 qcloud-lets-encryptconfig.php 中配置好你的密钥,以及要更换的域名。

1
2
timeout 600 ~/.acme.sh/acme.sh --renew -d *.91m.top -d 91m.top --dns dns_dp --renew-hook 'appnode-php74 ~/qcloud-lets-encrypt/index.php --cert $CERT_FULLCHAIN_PATH --key $CERT_KEY_PATH'
# 第一次 `--issue`,注意第二次这里用的是 `--renew`

配置 MySQL

新装的 MySQL 可能会出现中文乱码的情况,下面以 appNode 举例。
打开 MySQL 面板 (应用列表 - MySQL 服务器) - 参数配置 - 原文模式,都加入 utf-8,重启 MySQL 即可。

1
2
3
4
5
6
[mysqld]
character-set-server = utf8
[mysql]
default-character-set = utf8
[client]
default-character-set = utf8

配置 Rclone

自动上传同步

按照 rclone 教程部署。

appNode 只支持大厂的对象储存,没办法只能自行实现。慎用 sync,建议使用 copy。写个 shell 丢到 package.json 里即可。

本机

本机优雅的部署到服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ssh-keygen -m PEM -t ed25519 -C "your.email@example.com"
#生成私钥和公钥,如果有了可以跳过

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 123 root@192.168.123.10
#将公钥添加到服务器,如果端口是默认的 22,可以去掉 -p

rclone config
#可以直接输入 sftp,服务器确保放通 ssh 端口

#key_file 这一步,填入私钥路径 ~/.ssh/id_rsa

rclone ls 91m:/www
#测试列出文件,能列出就是没问题

rclone copy ./dist 91m:/www --progress
#rclone copy ./本地路径 云盘:/云盘路径 显示进度

服务器

服务器优雅的备份到云盘

1
2
3
4
5
6
7
8
9
export HTTP_PROXY='http://127.0.0.1:7890'
export HTTPS_PROXY='http://127.0.0.1:7890'
#环境变量,备份到 Google 需要

rclone config
#按需求链接你的云盘

rlone copy ./backup OneDrive:/备份/Web --progress
#rlone copy ./本地路径 你的云盘:/云盘路径 显示进度