记一次8小时惊心动魄的服务器+网站升级

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 2017年3月26日,此时此刻,我对服务器+网站进行了升级,也不知道自己脑袋那根弦短路了,大好的周末居然玩起了升级。 因为long long ago之前用的某宝的镜像环境,某段时间由于某种原因下架了。

写在前面,这篇文章服务器升级后然并没有找到论坛Discuz和博客Typecho异常所在,捯饬了半天最终选择升级和重装,成功解决。有些时候感觉真的没必要追究问题所在,毕竟是开源程序,可能语言又不是自己熟悉的,也可能硬件或者环境的问题,能升级或者重装就分分钟解决的问题,何乐而不为呢?

2017年3月26日,此时此刻,我对服务器+网站进行了升级,也不知道自己脑袋那根弦短路了,大好的周末居然玩起了升级。

因为long long ago之前用的某宝的镜像环境,某段时间由于某种原因下架了。今天看了下,居然收费了,有木有,居然收费了,在那么多免费镜像环境中,某宝真是一朵奇葩。

由于,网站数据使用的是挂载数据盘,所以省去了网站备份的工作,可以直接重装系统盘(当时买数据盘是个多么明智的决策),当然基础的Nginx配置文件还是要备份的。

数据库使用的阿里云的RDS,同样不需要备份(自动备份机制),相比以前安装在应用服务器,那将是一个多么悲催的故事。

服务器升级

centos 6.5 升级至 centos 6.8,由于网站程序采用PHP开发,这里只需要安装Nginx+PHP,大体看了下镜像环境和面板都不合心意,于是决定自己安装一遍,也就有了后来的惊心动魄。

安装 Nginx

安装Nginx之前,首先要安装好编译环境gcc和g++,安装Nginx需要PRCE库、zlib库和ssl的支持,除了ssl外其他的我们都是去官网下载(这里没选择YUM安装):

Nginx:http://nginx.org/

PCRE:http://www.pcre.org/

zlib:http://www.zlib.net/

服务器直接下载

wget https://ftp.pcre.org/pub/pcre/pcre2-10.23.tar.gz

wget http://www.zlib.net/zlib-1.2.11.tar.gz

wget http://nginx.org/download/nginx-1.10.3.tar.gz

安装openssl:

yum -y install openssl openssl-devel

安装pcre支持rewrite库,解压pcre,不需要安装:

tar -xvzf pcre2-10.23.tar.gz

安装方式二:也可以使用YUM安装

yum install pcre-devel pcre -y

然后解压zlib,同样不需要安装

tar -xvzf zlib-1.2.11.tar.gz

解压nginx:

tar -xvzf nginx-1.10.3.tar.gz

切换到 cd nginx-1.10.3 进入目录开始安装nginx:

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/home/tools/pcre2-10.23 --with-zlib=/home/tools/zlib-1.2.11

注意 /home/tools/pcre2-10.23 和/home/tools/zlib-1.2.11 是刚刚释放的pcre和zlib的源码目录,编译时nginx会编译到一起
安装位置就是--prefix指定的/usr/local/nginx
配置文件位置:/usr/local/nginx/nginx.conf

编译:

make

安装:

make install

执行软连接命令:

ln -s /usr/local/nginx/nginx  /usr/sbin

Nginx相关命令:

检查nginx.conf配置文件的正确性: nginx -t
检查版本: nginx -V
启动: nginx
重启: nginx -s reload

安装PHP

PHP http://php.net/downloads.php

wget http://php.net/get/php-5.6.30.tar.gz/from/a/mirror

安装libxml2和libxml2-devel

yum -y install libxml2
yum -y install libxml2-devel

因为不同的操作系统环境,系统安装开发环境包的完整程度也不相同,所以建议安装操作系统的时候做必要选择,也可以统一执行一遍所有的命令,将没有安装的组件安装好,如果已经安装了可能会进行升级,版本完全一致则不会进行任何操作,命令除上面2个之外,汇总如下:

yum -y install libxml2
yum -y install libxml2-devel
yum -y install openssl
yum -y install openssl-devel
yum -y install curl
yum -y install curl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install pcre
yum -y install pcre-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install bzip2
yum -y install bzip2-devel
yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel  mysql pcre-devel

安装完成之后,执行配置:

./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip

然后执行编译:

make

编译时间可能会有点长,编译完成之后,执行安装:

make install

php的默认安装位置上面已经指定为/usr/local/php,接下来配置相应的文件:

cp php.ini-development /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin

然后设置php.ini,使用: vi /usr/local/php/lib/php.ini 打开php配置文件找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0

创建web用户:

groupadd www-data
useradd -g www-data www-data

修改php-fpm.conf添加以上创建的用户和组,这时候使用 vi /usr/local/etc/php-fpm.conf 打开文件后找到官方所提示的位置:

user  = www-data
group = www-data

执行以下命令启动php-fpm服务:

php-fpm

启动完毕之后,php-fpm服务默认使用9000端口,使用 netstat -tln | grep 9000 可以查看端口使用情况。
你也可以使用 ps -ef|grep php 命令查看进程。

停止 php-fpm

killall php-fpm

网站升级

环境搭建成功以后,重新挂载数据盘,配置网站目录,并整理网站Nginx的配置文件(主要路径的修改)。

配置完成后,重启Nginx,论坛首页访问正常,然后后台登陆后一片空白,无论密码输入正确还是错误,都是空空如也。

菊花一紧赶紧看了一下typecho博客访问是否正常,首页给我了个惊喜:

500 server error

论坛后台空白修复方案:

关于discuz论坛后台登陆后一片空白,网上乱起八糟的方法很多,不得而终。有说是缓存的问题,说清空下data目录下的cache文件;有说覆盖下source文件的,果然也是不可以的;还有一个比较扯淡的方法就是,修复数据库,修复完毕后,哔了狗了,后台进不去,前台样式直接乱了。幸好有RDS昨天数据库备份(虽然失去了一小部分数据),赶紧还原了一下下。

最终解决方法,因为网站程序是3.2,故升级了一下到3.3。

1)备份数据库
2)建立文件夹 old,旧程序除了 data , config, uc_client, uc_server 目录以外的程序移动进入 old目录中
3)上传 X3.3 程序(压缩包中 upload 目录中的文件), 如上传时候提示覆盖目录,请选择“是”
4)上传安装包 utility 目录中的 update.php 到论坛 install 目录,删除 install 目录中的index.php

执行 http://你的域名/论坛路径/install/update.php

参照提示进行升级即可。升级时间随着数据的大小和服务器性能而变。

升级完毕,进入后台,更新缓存,并测试功能。
升级成功后,old目录中的文件可以删除了。

可能出现的问题Can not write to cache files

解决方法:删除cache和cache下的文件 重新建立这个文件夹。

博客500错误解决方案:

博客 500 server error 后台也无法进入,捯饬的半天也没有解决方法。最终还是重新安装了一下,然后把模版,插件以及附件转移过来,就此搞定。

这里强调一下,重新安装就是重新走一遍流程,数据库还是使用以前的数据,安装过程中会提示你的。

经验教训

升级一定要备份要,升级一定要备份要,升级一定要备份要,重要的事情说三遍。

1)网站程序修改或者升级前一定要备份
2)升级或者修复网站之前一定要备份数据库
3)搬家以后如果怎么都调试不好一些莫名其妙的问题,直接重装或者升级就好了(可以解决99.9%的问题)
4)如果有条件一定不要把网站程序放到系统盘,最好挂载一个数据盘
5)如果有条件一定不要把数据库安装在应用服务器上,最好买个阿里云的RDS

小站,欢迎来访:http://blog.52itstyle.com

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
17天前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
15 0
|
2月前
|
弹性计算 数据安全/隐私保护 虚拟化
云服务器 ECS产品使用问题之如何升级内存
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
1月前
服务器如何升级
轻量云服务器提供高效灵活的计算服务。当需要更多存储空间时,用户可以轻松升级硬盘。无需停机,几步操作即可完成扩容,有效提升运行效率与承载能力,满足业务发展的需求。
|
2月前
|
弹性计算 监控 云计算
云服务器 ECS产品使用问题之升级服务器出现报错,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
73 1
|
2月前
|
存储 弹性计算 云计算
云服务器 ECS产品使用问题之如何在升级ECS配置时保护数据
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
弹性计算 运维 云计算
云服务器 ECS产品使用问题之如何升级云服务器的配置
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
存储 应用服务中间件 文件存储
Ngnix服务器版本升级需求分析,如何不停止Ngnix服务进行升级
Ngnix服务器版本升级需求分析,如何不停止Ngnix服务进行升级
|
3月前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
56 8

热门文章

最新文章