11

阿里云轻量应用服务器WordPress版本升级

 6 months ago
source link: https://chenwenguan.com/aliyun-wordpress-upgrade/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

阿里云轻量应用服务器WordPress版本升级

2023年8月24日发布 | 最近更新于 2023年8月28日

2017年刚开始做这个博客网站的时候,阿里云WordPress版本一直停留在4.8.22,期间也尝试过升级,但是不习惯新版本的交互,就一直放着没动,一直到现在发现网站越来越卡,偶尔还会崩溃,最新的WordPress版本已经到6.3了,就想一次性完整地做个升级。

一、服务器底层环境升级

存在的问题:现有服务器的底层环境在保存快照之后,如果使用重置系统中的重置为其他镜像功能,因为底层环境不兼容,无法在重置为其他镜像之后,通过回滚快照数据的方式恢复网站数据。

最新的服务器底层环境 PHP8.1,MySQL5.7,Nginx1.22,WordPress版本6.0,现有旧的WordPress版本是4.8.22。只能通过UpdraftPlus插件备份数据的方式,把现有网站的所有数据先备份下载到本地。

Updraft插件备份数据下载

备份之后总共分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,右侧是服务器的文件目录,找到对应的文件,右键弹窗下载文件。

filezilla Updraft备份文件下载

数据备份文件下载到本地之后,开始重置系统为WordPress 6.0版本,重置之前要记住网站登录的账号和密码。在使用UpdraftPlus恢复完数据之后,数据恢复回去,要使用原来的账号密码登录。

阿里云轻量应用服务器重置系统到WordPress 6.0

重置系统完之后,先在控制台应用详情中,使用一键远程查看新系统的密码,使用新的密码登录之后安装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加密文件:

阿里云免费SSL证书下载

接着在Mac终端远程登录服务器,进入conf目录

cd /usr/local/nginx/conf

创建cert文件夹

mkdir cert

接着在FileZilla把下载解压之后的.key和.pem文件直接拖动到cert目录上传到服务器:

阿里云SSL证书上传

接着进入/usr/local/nginx/conf/vhost文件夹,里面有配置SSL加密的wordpress.conf配置文件,阿里云官方文档说是编辑/usr/local/nginx/conf/nginx.conf文件,这并不适用于WordPress,查看nginx.conf文件最后一行,可以看到vhost目录下的*.conf 文件被include了进来。

阿里云SSL证书WordPress conf参数配置

先备份原有的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加载异常,

WordPress网页加载超时
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目录下。

Breeze插件字体加载问题修复

查看主题的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 Apache服务器内存优化配置

阿里云WordPress服务器MySQL内存优化配置

转载请注明出处:陈文管的博客 – 阿里云轻量应用服务器WordPress版本升级

扫码或搜索:文呓

博客公众号

微信公众号 扫一扫关注


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK