搞網(wǎng)站搭建的時候,經(jīng)常要在服務(wù)器上裝各種工具,比如 Nginx、MySQL、Node.js。有次朋友跟我說,他好不容易配好的環(huán)境,重啟一下全沒了,像從來沒裝過一樣。一開始我也納悶,后來發(fā)現(xiàn)這其實是不少新手都踩過的坑。
問題出在哪兒?
如果你用的是臨時性的系統(tǒng)盤,或者是在某些云平臺的“臨時實例”里操作,那重啟之后數(shù)據(jù)丟失是常有的事。尤其是學(xué)生黨或剛?cè)腴T的人,喜歡用一些免費的在線實驗環(huán)境,這些環(huán)境大多在重啟后會還原到初始狀態(tài)。
舉個例子,你在某個平臺上裝好了 WordPress,配置好了數(shù)據(jù)庫,結(jié)果一重啟,SSH 登進(jìn)去發(fā)現(xiàn)命令都找不到。不是系統(tǒng)壞了,而是你裝的軟件根本沒寫入持久存儲。
看看你的系統(tǒng)掛載了哪些盤
可以運行下面這個命令查看磁盤情況:
df -h
重點看 / 根目錄所在的設(shè)備。如果顯示的是 tmpfs 或者空間特別小(比如 2G),那基本就是臨時盤。這種盤里的所有改動,重啟后都會消失。
正確的做法是把數(shù)據(jù)裝在持久盤
很多云服務(wù)商提供“數(shù)據(jù)盤”或“持久存儲卷”,你需要手動掛載它,并把關(guān)鍵服務(wù)安裝或配置到這個盤上。比如你可以把網(wǎng)站文件放在 /data/www,數(shù)據(jù)庫文件指向 /data/mysql,然后確保這個 /data 是在持久化存儲上。
掛載示例:
mkdir /data
mount /dev/vdb1 /data
然后在 /etc/fstab 里加一行,讓它開機(jī)自動掛載:
/dev/vdb1 /data ext4 defaults 0 0
容器環(huán)境更要注意
如果你用 Docker 搭建網(wǎng)站,也要注意容器本身是無狀態(tài)的。每次重啟容器,里面的文件都會重置。正確的做法是使用數(shù)據(jù)卷(volume)或綁定掛載(bind mount)把配置和數(shù)據(jù)存到宿主機(jī)的持久路徑上。
docker run -d -v /host/path:/container/path nginx
這樣即使容器刪了重建,網(wǎng)站文件還在。
別忘了檢查啟動項
有時候軟件其實還在,但沒設(shè)置開機(jī)自啟,導(dǎo)致你以為它沒了。比如你裝了 Nginx,但沒加到系統(tǒng)服務(wù)里,重啟后就得手動啟動。
CentOS 可以用:
systemctl enable nginx
Ubuntu 則類似:
sudo systemctl enable apache2
加上這一步,下次開機(jī)服務(wù)就能自動跑起來。
所以遇到“重啟后軟件沒了”,先別慌,查查是不是裝到了臨時空間,或者壓根沒設(shè)自啟。搞清楚存儲機(jī)制,才能避免重復(fù)勞動。