記一次8小時驚心動魄的伺服器+網站升級
寫在前面,這篇文章伺服器升級後然並沒有找到論壇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
相關文章
- 記錄一次驚心動魄的誤操作(Oracle)Oracle
- 記錄一次驚心動魄的sql去重SQL
- 驚心動魄-面試經歷薦面試
- 伺服器神秘掛起:一場驚心動魄的核心探案伺服器
- 一次JVM FullGC的背後,竟隱藏著驚心動魄的線上生產事故!【石杉的架構筆記】JVMGC架構筆記
- 【資料安全】一次驚心動魄的ASM磁碟頭損壞故障處理過程帶來的深思ASM
- 記一次mysql小版本升級MySql
- 回顧2022加密市場!驚心動魄之下但尚存溫暖曙光?加密
- 網站PWA升級網站
- 分散式工具的一次小升級⏫分散式
- 週末生產事故!一次心驚肉跳的伺服器入侵排查....伺服器
- 記一次版本升級遇到的坑
- 一次心驚肉跳的伺服器誤刪檔案的恢復過程伺服器
- 記一次macOS Mojave升級GCCMacGC
- react-router 升級小記React
- 個人部落格網站升級網站
- 網站升級中 HTML 程式碼網站HTML
- 觸目驚心的網際網路流量劫持
- React v16升級小記React
- laravel8 啥時候升級9?Laravel
- 【必看】企業網站IPv8改造升級方案---中科三方網站
- 在升級的時候使用VNC的小竅門VNC
- 記一次奇妙的 go-protobuf 包升級之旅Go
- 記一次uboot升級過程的兩個坑boot
- 8歲上海小學生B站教程式設計驚動蘋果,庫克親送生日祝福程式設計蘋果
- 工程優化暨babel升級小記優化Babel
- async語法升級踩坑小記
- Vue.js 升級踩坑小記Vue.js
- 【筆記】時間管理《小強升職記》筆記
- 網站伺服器如何防止被攻擊?指令碼程式升級很重要!網站伺服器指令碼
- 記一次快取伺服器遷移史,心塞!快取伺服器
- RockyLinux8伺服器升級openssh9.9Linux伺服器
- 怎樣把網站升級到http/2網站HTTP
- 記錄一次手動升級達夢後DmAPService無法啟動問題
- React 15.6 升級 React 16.2 小記React
- MIUI8怎麼升級 5種MIUI 8升級教程UI
- CentOS 8 升級核心CentOS
- LearnKu 伺服器已升級 PHP8 和 Ubuntu 20伺服器PHPUbuntu