記一次8小時驚心動魄的伺服器+網站升級

小柒2012發表於2017-03-27

寫在前面,這篇文章伺服器升級後然並沒有找到論壇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


相關文章