2017年刚开始做这个博客网站的时候,阿里云WordPress版本一直停留在4.8.22,期间也尝试过升级,但是不习惯新版本的交互,就一直放着没动,一直到现在发现网站越来越卡,偶尔还会崩溃,最新的WordPress版本已经到6.3了,就想一次性完整地做个升级。
一、服务器底层环境升级
存在的问题:现有服务器的底层环境在保存快照之后,如果使用重置系统中的重置为其他镜像功能,因为底层环境不兼容,无法在重置为其他镜像之后,通过回滚快照数据的方式恢复网站数据。
最新的服务器底层环境 PHP8.1,MySQL5.7,Nginx1.22,WordPress版本6.0,现有旧的WordPress版本是4.8.22。只能通过UpdraftPlus插件备份数据的方式,把现有网站的所有数据先备份下载到本地。
备份之后总共分5块数据:数据库、其他、插件、主题、上传的文件
backup_2023-08-20-0148_wwwchenwenguancom_6bafbd2a26c6-db.gz
backup_2023-08-20-0148_wwwchenwenguancom_6bafbd2a26c6-others.zip
backup_2023-08-20-0148_wwwchenwenguancom_6bafbd2a26c6-plugins.zip
backup_2023-08-20-0148_wwwchenwenguancom_6bafbd2a26c6-themes.zip
backup_2023-08-20-0148_wwwchenwenguancom_6bafbd2a26c6-uploads.zip
但在使用UpdraftPlus备份完数据之后,备份的数据每次下载到8.5MB左右的时候就失败,之后死循环重复下载,这个后面查到是备份完之后updraft目录下的文件缺少对应的权限,直接在Mac终端用ssh root@<ip_address>的方式远程连接服务器,修改目录下的文件权限为777:
chmod 777 /home/www/htdocs/wp-content/updraft/<xxxx.zip>
权限修改完之后还是不行,就使用FileZilla(网上搜下下载一个破解版的就行)连接服务器,找到对应的路径下载备份文件。左侧是Mac本地的路径,选择下载目录Download,右侧是服务器的文件目录,找到对应的文件,右键弹窗下载文件。
数据备份文件下载到本地之后,开始重置系统为WordPress 6.0版本,重置之前要记住网站登录的账号和密码。在使用UpdraftPlus恢复完数据之后,数据恢复回去,要使用原来的账号密码登录。
重置系统完之后,先在控制台应用详情中,使用一键远程查看新系统的密码,使用新的密码登录之后安装UpdraftPlus插件,恢复原有网站数据,在数据恢复的过程中,可能因为WordPress版本问题导致数据恢复异常,可以先使用WP Downgrade插件把WordPress恢复回旧版本,之后再恢复网站数据,恢复过程中会提示升级数据库,直接点击继续即可,在数据恢复完毕之后,再使用WP Downgrade插件把WordPress升级到6.2.2(习惯偏向,有些操作比较方便)或6.3版本(最新)
二、网站HTTPS配置
最新的轻量应用服务器控制台域名操作模块,去掉了域名的HTTPS设置入口,现在要自己手动配置SSL 的.pem和.key文件,不知道阿里云的产品经理咋想的,这操作大大增加了用户的操作成本。
先到数字证书管理服务页面申请免费的SSL证书,www.domain.com 和 domain.com 两种形式的域名都申请下,之后下载SSL加密文件:
接着在Mac终端远程登录服务器,进入conf目录
cd /usr/local/nginx/conf
创建cert文件夹
mkdir cert
接着在FileZilla把下载解压之后的.key和.pem文件直接拖动到cert目录上传到服务器:
接着进入/usr/local/nginx/conf/vhost文件夹,里面有配置SSL加密的wordpress.conf配置文件,阿里云官方文档说是编辑/usr/local/nginx/conf/nginx.conf文件,这并不适用于WordPress,查看nginx.conf文件最后一行,可以看到vhost目录下的*.conf 文件被include了进来。
先备份原有的wordpress.conf文件,下载这个文件,查看里面的配置信息,以下是原有配置
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/www.example.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/www.example.com.key;
server_name _;
去掉80的监听,配置域名参数,以下参数替换成你自己的域名:
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /usr/local/nginx/conf/cert/www.chenwenguan.com.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/www.chenwenguan.com.key;
server_name www.chenwenguan.com;
另外增加HTTP强制重定向到HTTPS的配置:
server {
listen 80;
server_name www.chenwenguan.com;
rewrite ^(.)$ https://$host$1; location ~ [^/].php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php; include fastcgi.conf;
}
location ~ ..(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ /(.user.ini|.ht|.git|.svn|.project|LICENSE|README.md) {
deny all;
}
location /.well-known {
allow all;
}
}
www.domain.com 和 domain.com 两种形式的域名都配置下,修改完之后保存,用以下命令重启nginx
cd /usr/local/nginx/sbin/
./nginx -s reload
这还没结束,之后还要安装Really Simple SSL插件把网站上所有资源都改为HTTPS访问,检查了下文章,所有设置的GIF资源无法显示,点击GIF图片提示的链接不是域名开头,而是IP地址开头,直接编辑有问题的文章GIF资源引用,重新导入设置下媒体库的文件就行。包括网站内链也是,域名参数都变成了IP地址,逐个修改即可。
三、解决Chrome网页加载非常慢的问题
在前面的问题都解决之后,发现在PC端访问网站非常慢,估计要一两分钟才能加载渲染出来,网络测速工具显示加载速度大部分地区在正常范围内,手机端访问网站加载也很快。之后就打开Chrome开发者模式,查看控制台输出,发现是font-awesome.min.css加载异常,
GET https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css?ver=4.5.0 net::ERR_CONNECTION_TIMED_OUT
接着分析maxcdn.bootstrapcdn.com是哪个地方在引用,远程连接服务器,在Mac终端输入以下命令查找:
grep -r "maxcdn.bootstrapcdn.com" /data/wwwroot/wordpress/wp-content
输出:
/data/wwwroot/wordpress/wp-content/cache/breeze/7182b2bd42a976c676692968f75bca1e/56ba0fb6b25e4ebda98665586a6c0a1c.php:<link rel='dns-prefetch' href='//maxcdn.bootstrapcdn.com' />
Breeze是Cloudflare出的插件,用来加速网站加载,这边只是cache缓存文件夹,查看网页源代码,这个字体是用在代码样式的显示中,先从其他网站的加载找到font-awesome.min.css的文件内容。
谷歌搜索font-awesome对应版本的字体库,先从http://www.amiq.com/fonts/font-awesome-4.5.0/fonts/ 地址下载font-awesome.min.css需要的字体库文件,接着把这些字体库文件拖动放到breeze/assets/fonts目录下,font-awesome.min.css文件放到breeze/assets/css目录下。
查看主题的functions.php文件查找是哪里加载进来的,使用WP File Manager插件先下载functions.php文件到本地,修改font-awesome的引用路径。
//* Add Font Awesome Support
add_action( 'wp_enqueue_scripts', 'enqueue_font_awesome' );
function enqueue_font_awesome() {
wp_enqueue_style( 'font-awesome', 'https://chenwenguan.com/wp-content/plugins/breeze/assets/css/font-awesome.min.css', array(), '4.5.0' );
}
修改完之后重新上传覆盖原有文件,现在访问网站可以秒开。
四、php-fpm进程导致服务器挂掉
上面的问题解决之后,到了晚上发现网站挂了,查看服务器日志到下午的时间服务器就挂了,接着逐步分析异常信息,输入以下命令查看kill日志信息:
sudo cat /var/log/messages | grep kill
输出信息如下:
Aug 24 16:46:47 iZ2zegxchxpm4qt6yqfvd3Z kernel: AliYunDunUpdate invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Aug 24 16:46:59 iZ2zegxchxpm4qt6yqfvd3Z kernel: oom_kill_process.cold+0x1f/0x28
Aug 24 16:46:59 iZ2zegxchxpm4qt6yqfvd3Z kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/php-fpm.service,task=php-fpm,pid=794,uid=1001
接着过滤查询异常时间点的相关日志:
sudo cat /var/log/messages | grep "Aug 24 20:27"
摘出主要异常信息如下:
Aug 24 16:46:59 iZ2zegxchxpm4qt6yqfvd3Z kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/php-fpm.service,task=php-fpm,pid=794,uid=1001
Aug 24 16:46:59 iZ2zegxchxpm4qt6yqfvd3Z kernel: Out of memory: Killed process 794 (php-fpm) total-vm:756964kB, anon-rss:57028kB, file-rss:0kB, shmem-rss:45940kB, UID:1001 pgtables:400kB oom_score_adj:0
从日志可以看出是php-fpm.service服务占用内存过多导致进程被强杀,接着修改php-fpm的配置,先查询对应的conf文件:
sudo find / -name php-fpm.conf
输出:
/usr/local/php81/etc/php-fpm.conf
/usr/local/php71/etc/php-fpm.conf
/usr/local/php74/etc/php-fpm.conf
/usr/local/php56/etc/php-fpm.conf
/usr/local/php72/etc/php-fpm.conf
/usr/local/php73/etc/php-fpm.conf
/usr/local/php53/etc/php-fpm.conf
/usr/local/php80/etc/php-fpm.conf
/usr/local/php70/etc/php-fpm.conf
/usr/local/php55/etc/php-fpm.conf
/usr/local/php54/etc/php-fpm.conf
查看当前环境的PHP信息:
php -i
在输出的信息中过滤查找关键字fpm,匹配到如下信息:
Configure Command => './configure' '--prefix=/usr/local/php74' '--with-config-file-path=/usr/local/php74/etc' '--with-config-file-scan-dir=/usr/local/php74/etc/php.d' '--with-fpm-user=www' '--with-fpm-group=www' '--enable-fpm' '--enable-opcache' '--disable-fileinfo' '--enable-mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-iconv-dir=/usr/local' '--with-freetype' '--with-jpeg' '--with-zlib' '--enable-xml' '--disable-rpath' '--enable-bcmath' '--enable-shmop' '--enable-exif' '--enable-sysvsem' '--enable-inline-optimization' '--with-curl=/usr/local/curl' '--enable-mbregex' '--enable-mbstring' '--with-password-argon2' '--with-sodium=/usr/local' '--enable-gd' '--with-openssl=/usr/local/openssl' '--with-mhash' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-ftp' '--enable-intl' '--with-xsl' '--with-gettext' '--with-zip=/usr/local' '--enable-soap' '--disable-debug' 'PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:'
可以看到当前安装的版本是php74,接着就是编辑/usr/local/php74/etc/php-fpm.conf文件的配置,修改的配置参数如下,所有数据在原有的基础上减半:
pm.max_children = 8
pm.start_servers = 5
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 1024
request_terminate_timeout = 60
request_slowlog_timeout = 0
继续观察一段时间看看效果。
相关阅读:
转载请注明出处:陈文管的博客 – 阿里云轻量应用服务器WordPress版本升级
扫码或搜索:文呓
微信公众号 扫一扫关注