站)
如果你和我一樣第一次開始“網(wǎng)站部署”這個任務時最先卡住的環(huán)節(jié)往往不是代碼而是那一臺服務器到底在哪買、買什么配置、買回來之后第一件事做什么。我當年在云平臺的控制臺里把產(chǎn)品頁翻來覆去看了好幾遍下單前光是選規(guī)格就猶豫了一個下午買完之后又發(fā)現(xiàn)網(wǎng)頁怎么都打不開最后排查半天才知道是安全組沒放行80端口。這篇教程就是網(wǎng)站部署系列的第一篇記錄云服務器的購買和簡單部署流程以國內(nèi)某主流云平臺為例。跟著做你能從零擁有一臺可以對外提供網(wǎng)頁服務的服務器并且用IP地址在瀏覽器里訪問到自己部署的頁面。這臺服務器能做什么它可以跑個人博客、企業(yè)官網(wǎng)、小程序后端、學習環(huán)境也可以只是當作一臺隨時可以折騰的Linux機器。文章適合完全沒有云服務器基礎的人我會盡量把每一個按鈕和命令都寫清楚順便講清楚“為什么這么操作”而不是只給步驟。畢竟買服務器這件事最怕的不是不會點鼠標而是不知道自己在買什么、買完要做什么。1. 動手之前先回答“我要用這臺服務器干什么”1.1 云服務器和本地電腦差別到底在哪很多人會問我自己電腦明明也能跑網(wǎng)站為什么要買一臺云服務器這個問題的答案決定了你后續(xù)所有選擇。本地電腦處于家庭寬帶或校園網(wǎng)環(huán)境IP地址通常是動態(tài)的路由器重啟很可能就變了而且電腦不能保證7×24小時開機一旦斷電或者休眠網(wǎng)站就下線了。更麻煩的是如果直接把服務暴露在公網(wǎng)家庭網(wǎng)絡的路由器配置、運營商封鎖、動態(tài)IP解析這些問題會把人折騰到懷疑人生。云服務器把這些瑣事全部承接了它有固定的公網(wǎng)IP、獨立電源和網(wǎng)絡環(huán)境、放在機房7×24小時運行你只需要遠程登進去部署自己的應用。用一個生活化的類比本地運行網(wǎng)站好比在家里做飯要自己買菜、洗菜、盯火候一頓飯忙下來鍋碗瓢盆全要自己收拾云服務器相當于去一家中央食堂包月你只管到點吃飯后廚的灶臺、燃氣、消防都有人管。所以買云服務器的本質(zhì)是花錢買“穩(wěn)定的運行環(huán)境”和“固定的公網(wǎng)入口”。1.2 按需求反推配置而不是盲目追高買服務器最怕兩件事一是買低了跑不動二是買高了白花錢。我見過不少新手一上來就買“建議配置”里的頂配結果只放了一個純靜態(tài)主頁CPU占用常年不到5%這就是典型浪費。我在實操中通常建議先列出用途再從用途反推配置。這里給一份可以直接參考的表格典型用途CPU/內(nèi)存公網(wǎng)帶寬系統(tǒng)盤說明學習Linux/跑通部署流程1核1G至1核2G1-3Mbps40G最低成本練手個人博客/靜態(tài)站點1核2G3-5Mbps40-60G主流選擇性價比高小型企業(yè)官網(wǎng)/小程序后端2核4G5-10Mbps60-80G可承載一定真實業(yè)務數(shù)據(jù)庫/微服務學習實驗2核4G以上按流量或更高帶寬100G以上內(nèi)存和IO優(yōu)先為什么要重視內(nèi)存而不是只盯CPU核數(shù)因為網(wǎng)站類應用尤其是跑PHP、Java、數(shù)據(jù)庫的瓶頸通常先出現(xiàn)在內(nèi)存上。1核1G跑Nginx托管靜態(tài)頁面問題不大但一旦裝上數(shù)據(jù)庫和多個服務內(nèi)存很容易被打滿系統(tǒng)會開始使用Swap交換空間機器就會變得非常卡。帶寬這邊也提醒一下云廠商口中的1Mbps帶寬實際下載速度約為128KB/s。純HTML頁面勉強可以如果網(wǎng)頁里有圖片、CSS、JS首次加載就會明顯慢。個人博客我建議至少3Mbps企業(yè)站根據(jù)圖片資源量選擇5Mbps以上。1.3 包年包月和按量付費怎么選在下單頁面計費模式通常有“包年包月”和“按量付費”兩種。我的經(jīng)驗是計劃長期運行、目標明確的網(wǎng)站選包年包月只是臨時學習、測試選按量付費。按量付費用多久算多久適合搭一套環(huán)境驗證完就釋放但一定要記得關機和釋放資源否則會有持續(xù)計費。這里還要說一個容易忽略的點活動頁面的首年低價不等于續(xù)費價格。很多新手看到“一年幾十塊錢”就沖了第二年續(xù)費時才發(fā)現(xiàn)價格貴了好幾倍。下單前務必要看“續(xù)費價格”或“購買頁價格明細”把成本結構算清楚再決定。這類云端實例的費用通常由幾部分組成實例規(guī)格費、公網(wǎng)帶寬費、系統(tǒng)盤存儲費。公共服務系統(tǒng)鏡像比如Ubuntu、CentOS官方鏡像一般不額外收費但如果你選了特定商業(yè)鏡像費用會單列出來。下單時在費用明細里逐項看一眼就不會稀里糊涂被套餐文案誤導。2. 下單頁面上的關鍵選項地域、鏡像、磁盤、帶寬逐個選2.1 地域選擇影響延遲也影響后續(xù)遷移成本進入購買頁面第一個要選的是地域也就是服務器機房所在的城市。原則很簡單你的訪問者在哪里服務器就放哪里。個人學習無所謂就近選一個即可如果是給特定區(qū)域的用戶訪問選擇該區(qū)域附近的機房網(wǎng)絡延遲會明顯更低。地域還有一種“隱藏成本”一旦實例創(chuàng)建在某個地域想換另一個地域不能直接搬只能通過鏡像復制、數(shù)據(jù)遷移等方式重建。對新手來說這個過程挺折騰的所以我建議買之前先想清楚主要給誰用??捎脜^(qū)同一地域下的不同機房的選擇一般不需要花太多心思。默認分配一個即可除非你有高可用需求會把應用部署在兩個可用區(qū)形成主備。2.2 鏡像Ubuntu、CentOS還是Windows鏡像就是操作系統(tǒng)的“出廠快照”。新手在選擇時經(jīng)常猶豫我給出幾條實際參考Ubuntu 22.04 LTS社區(qū)資料多軟件源對新手友好適合跑Nginx、MySQL、PHP這類常見組合。CentOS Stream / Rocky LinuxCentOS 8停更之后官方推薦方向有所變化很多老運維轉向Rocky或保留習慣使用其他系統(tǒng)這類適合以后想往運維方向走的人。Windows Server只有當應用明確依賴Windows環(huán)境比如.NET開發(fā)、需要使用圖形界面時才建議選否則不推薦——Windows鏡像占用資源更多費用也更高。對于本篇的部署目標我的建議是選擇Ubuntu 22.04 LTS。它生命周期長未來兩三年內(nèi)不用頻繁操心升級大版本的問題。2.3 系統(tǒng)盤和數(shù)據(jù)盤容量與類型怎么權衡系統(tǒng)盤是服務器安裝操作系統(tǒng)和跑關鍵服務的磁盤默認容量一般40G起步。這里有一條實操建議容量夠不夠看需求但類型一定要選固態(tài)類的因為磁盤I/O直接影響網(wǎng)站性能在云平臺上不同性能等級的云盤讀寫速度差異肉眼可見。對于個人博客40G通常夠用如果打算裝數(shù)據(jù)庫、存儲用戶上傳的圖片建議直接選60G或更大省得以后擴容時還要折騰。這里也順帶說一句數(shù)據(jù)盤如果購買頁面有“添加數(shù)據(jù)盤”的選項新手第一階段可以不買。系統(tǒng)盤已經(jīng)能承載系統(tǒng)和網(wǎng)站程序數(shù)據(jù)盤一般是給數(shù)據(jù)庫文件、日志文件做獨立存儲用的等網(wǎng)站真實跑起來、磁盤空間吃緊時再添加也不遲。2.4 固定帶寬和按量流量新手怎么選帶寬計費主要兩種差異用一個表格就能看明白計費方式適用場景優(yōu)點風險固定帶寬持續(xù)穩(wěn)定訪問的網(wǎng)站費用可控不會突然爆賬單峰值不高時有點浪費按使用流量訪問量很低或突發(fā)型應用用得少花得少被惡意刷流量時賬單可能嚇人我在這一期教程里更推薦新手選固定帶寬3Mbps或5Mbps起步。預算能算清不會半夜收到一條扣費短信。等到網(wǎng)站流量起來、對網(wǎng)絡有了把握再根據(jù)監(jiān)控數(shù)據(jù)換到按量計費。下單之前最終再檢查一次費用明細實例費、帶寬費、系統(tǒng)盤費以及活動價對應的“原價續(xù)費”是什么水平。看清楚這些之后點擊下單你的第一臺云服務器就算買回來了。創(chuàng)建過程一般需要幾十秒到幾分鐘控制臺里實例狀態(tài)變?yōu)椤斑\行中”后就可以繼續(xù)下一步。3. 安全組與登錄憑證下單一秒訪問卻打不開先檢查這兩處3.1 安全組是云端的“安檢門”實例創(chuàng)建好之后一般在控制臺會看到公網(wǎng)IP、默認用戶名等信息。很多新手拿到IP就直接往瀏覽器里輸結果頁面轉圈半天打不開于是開始懷疑服務器是不是壞了。實際上八成的原因是安全組沒有放行對應端口。安全組可以理解為一道放在云服務器前面的訪問控制規(guī)則哪些來源IP、通過哪個協(xié)議、訪問哪個端口能進能出都靠它把關。默認創(chuàng)建實例時云平臺通常只放行SSH遠程登錄TCP 22、Windows遠程桌面TCP 3389和ping測試ICMP并不會放行HTTP的80端口和HTTPS的443端口。這意味著就算Nginx裝好了外部也可能訪問不到網(wǎng)頁。所以搭建網(wǎng)站前的標準操作是在控制臺進入實例詳情找到“安全組”添加入方向規(guī)則。我這里給一份常規(guī)網(wǎng)站的規(guī)則列表方向協(xié)議端口來源用途入方向TCP22運維IP或0.0.0.0/0SSH遠程登錄入方向TCP800.0.0.0/0對外HTTP訪問入方向TCP4430.0.0.0/0對外HTTPS訪問入方向TCP3306僅數(shù)據(jù)庫客戶端IPMySQL訪問盡量不公開這里特別注意3306端口數(shù)據(jù)庫默認端口千萬不要對全網(wǎng)開放否則等于把數(shù)據(jù)庫裸奔在公網(wǎng)暴力破解工具對著它掃一夜安全風險非常大。如果確實需要遠程連數(shù)據(jù)庫只放行你正在使用的那一個IP。這個“最小放行”原則在后續(xù)運維階段會反復出現(xiàn)。3.2 登錄憑證密碼登錄和密鑰對登錄的選擇創(chuàng)建實例時云平臺都會要求設置登錄憑證通常是密碼或密鑰對兩種方式。新手階段我建議先選密碼登錄把流程跑通最重要。設置密碼時別用“123456”這種也別用生日、手機號建議至少大小寫字母加數(shù)字混合長度不少于12位。記住這是你的服務器大門鑰匙。密鑰對登錄安全性更高適合以后長期管理的服務器公鑰放在云端私鑰保存在自己電腦。但密鑰對有個麻煩點私鑰文件一旦丟失基本等于鎖門恢復起來很麻煩。如果選擇密鑰對下單時一定要把私鑰下載保存到安全的地方同時建議保留密碼登錄作為應急通道。另外說一個很多人踩過的細節(jié)在控制臺重置實例密碼或密鑰時部分平臺要求實例處于停止狀態(tài)才能操作。這意味著如果你登錄不上還要先去控制臺“停止”實例再重置然后再啟動。第一次操作時別慌看清頁面提示即可。安全組和登錄憑證都處理好了才算真正具備“登錄服務器”的條件。4. 第一次遠程連接并部署Nginx這臺機器開始干活4.1 用SSH連上自己的服務器從這一步開始操作從網(wǎng)頁控制臺轉移到了終端。如果你用的是macOS或Linux直接打開終端TerminalWindows用戶可以用自帶的PowerShell也可以安裝一個遠程終端工具比如MobaXterm這類工具對新手更友好支持標簽頁和文件傳輸。連接命令很簡單ssh 用戶名公網(wǎng)IP比如云平臺給你的默認用戶名是root公網(wǎng)IP是1.2.3.4命令就是ssh root1.2.3.4。首次連接時終端會顯示是否信任主機指紋的提示輸入yes并回車接著輸入密碼只要看到命令行提示符變成rootxxx:~#就說明登錄成功了。補充一點有些系統(tǒng)鏡像默認用戶名不是root而是ubuntu或ecs-user具體以控制臺顯示為準。別拿著一個用戶名反復試錯先去看控制臺的實例詳情頁。4.2 如果SSH連不上按這個順序排查SSH連不上是新手最常遇到的第一個難題。這里給出一條系統(tǒng)性的排查鏈路先確認公網(wǎng)IP是否復制正確看控制臺實例詳情頁。在本機執(zhí)行ping 公網(wǎng)IP如果ping不通大概率是安全組沒有放行ICMP或者IP寫錯。在本機執(zhí)行telnet 公網(wǎng)IP 22如果端口不通重點檢查安全組是否放行TCP 22。如果端口通但密碼被拒檢查是否開了大寫鎖、密碼是否包含易混淆字符。如果確實忘了密碼到控制臺使用“重置實例密碼”功能注意頁面可能要求先停止實例。用一張小表概括現(xiàn)象可能原因處理方向ping不通安全組ICMP未放行/IP錯誤改安全組規(guī)則、核對IP22端口不通安全組未放行TCP 22/sshd未啟動檢查安全組、檢查sshd密碼被拒密碼錯誤控制臺重置密碼一直卡在連接中公網(wǎng)IP錯誤或服務未就緒等待實例啟動完成確認IP我記得自己第一次部署時就是卡在安全組這里前后花了半個多小時最后發(fā)現(xiàn)22端口規(guī)則并沒有問題問題是Nginx的80端口沒放行。所以開通安全組規(guī)則時一定要把HTTP/HTTPS一起檢查到位。4.3 安裝Nginx并啟動服務登錄成功后就可以開始部署Web服務了。Nginx是目前最常用的Web服務器之一輕量、穩(wěn)定、配置靈活非常適合作為第一課。安裝過程在Ubuntu上很簡單apt update apt upgrade -y apt install nginx -y systemctl start nginx systemctl enable nginx systemctl status nginx第一句是把系統(tǒng)的軟件源索引更新到最新并升級已有軟件包第二句安裝Nginx第三句啟動服務第四句設置開機自啟最后一句查看運行狀態(tài)。如果狀態(tài)顯示active (running)說明服務已經(jīng)運行。如果你選的系統(tǒng)是Rocky或CentOS命令對應改為yum update -y yum install nginx -y systemctl start nginx systemctl enable nginx安裝完成后在瀏覽器地址欄輸入http://公網(wǎng)IP如果能看到Nginx的默認歡迎頁面說明整個鏈路已經(jīng)打通安全組、80端口、Nginx服務三者都正常。這一步完成你離“部署網(wǎng)站”其實已經(jīng)很近了。4.4 頁面還是打不開從服務器內(nèi)外兩步定位如果瀏覽器始終打不開頁面不要急著懷疑服務器壞了按下面兩步操作能快速定位問題。第一步在服務器里面測本機執(zhí)行curl http://localhost如果返回Nginx歡迎頁的HTML內(nèi)容說明Web服務本身正常問題出在外部訪問鏈路也就是安全組或防火墻。第二步在本地電腦執(zhí)行telnet 公網(wǎng)IP 80如果端口不通去安全組確認80和443是否放行如果端口通但瀏覽器還是打不開嘗試換一個瀏覽器或者用無痕模式排除緩存問題。還有一種情況Nginx配置寫錯了。這時候執(zhí)行nginx -t檢查語法它會明確提示哪一行出了問題。改完配置后執(zhí)行systemctl reload nginx加載新配置而不是直接重啟因為reload可以在不中斷服務的情況下應用修改這是運維里的常規(guī)習慣。5. 部署成功之后替換首頁、養(yǎng)成運維習慣、規(guī)劃下一步5.1 寫自己的第一張網(wǎng)頁看到Nginx默認歡迎頁之后就該把它替換成自己的內(nèi)容了。先找到網(wǎng)站根目錄。在Ubuntu上默認的站點目錄一般是/var/www/htmlNginx的默認站點配置文件在/etc/nginx/sites-available/里。要驗證這一點在服務器中執(zhí)行l(wèi)s /var/www/html目錄里如果有一個index.nginx-debian.html說明默認首頁就在這個位置。接下來創(chuàng)建一個自己頁面echo !DOCTYPE htmlhtmlheadtitle我的網(wǎng)站/title/headbodyh1我的服務器跑通了/h1/body/html /var/www/html/index.html刷新瀏覽器看到“我的服務器跑通了”這行大字說明你已經(jīng)完成了從買服務器到發(fā)布網(wǎng)頁的完整鏈路。這一步對建立信心很重要很多人在這個點才開始真正理解服務器、IP、端口、網(wǎng)站之間的關系。如果想改端口或站點的配置我告訴你Nginx的基本邏輯server塊定義監(jiān)聽端口和站點根目錄location塊定義路徑轉發(fā)規(guī)則。以后要部署多站點、配置HTTPS都繞不開這套邏輯后面文章再展開。5.2 幾個值得從第一天就養(yǎng)成的運維習慣服務器部署完真正的工作才開始。我總結幾個實測有用的習慣建議裝完系統(tǒng)就順手做掉每隔一段時間執(zhí)行一次apt update和apt upgrade把系統(tǒng)安全補丁打上。云平臺控制臺一般也有安全通告可以打開通知。不要用弱密碼和默認密碼SSH入口保持高強度口令或改用密鑰登錄。安全組遵循最小放行原則需要哪個端口就放行哪個端口不用的端口隨手刪除規(guī)則。打開云平臺的監(jiān)控告警重點關注CPU使用率、內(nèi)存、磁盤IO設置閾值后收到短信或郵件通知。如果真的需要做長時間運行的應用考慮給服務器配置足夠的內(nèi)存和合理的Swap避免內(nèi)存被占滿后進程被系統(tǒng)殺掉。這里特別要提醒的是雖然有些云平臺自帶安全防護能力但底層的資源監(jiān)控還是建議自己打開。我見過一個案例某網(wǎng)站深夜被腳本掃端口第二天云平臺發(fā)來異常流量告警因為監(jiān)控沒開管理員差點沒發(fā)現(xiàn)。告警不是用來嚇人的它是在你還沒發(fā)現(xiàn)問題時提前拉你一把。5.3 關于域名、HTTPS和后續(xù)路線到這里你已經(jīng)能用公網(wǎng)IP瀏覽自己的網(wǎng)站了但清晰好記的地址、HTTPS加密、以及把網(wǎng)站和數(shù)據(jù)庫正確組合起來還有幾項工作。這些內(nèi)容不適合全部塞進第一篇所以我打算在系列后面按順序?qū)懹蛎徺I、解析接入云服務器為網(wǎng)站啟用HTTPS證書用Nginx配置多站點和反向代理安裝數(shù)據(jù)庫并讓網(wǎng)站能寫入數(shù)據(jù)服務器日常備份策略這里插一句國內(nèi)服務器如果后續(xù)要綁定域名對外提供訪問云平臺通常會在控制臺提供網(wǎng)站接入相關流程指引不同服務商的入口不太一樣等到寫域名篇時我再把具體操作記錄完整呈現(xiàn)。回顧整個流程我最想說的一點是網(wǎng)站部署最重要的不是背命令而是理解“公網(wǎng)IP、端口、安全組、Web服務”這幾層的關系。我當時的教訓是買完服務器就一頭扎進Nginx配置結果死活訪問不了回頭才發(fā)現(xiàn)安全組根本沒放行80。如果你也是新手建議嚴格按照這篇文章的順序走一遍先用IP訪問跑通不要急著一口氣把域名和數(shù)據(jù)庫都裝上。踩過一次坑之后這些概念會深深刻在腦子里。下一篇我會繼續(xù)記錄綁定域名和處理HTTPS證書的完整過程實際操作中涉及到的解析記錄、證書申請、Nginx配置調(diào)整我都會逐個說明。如果你在這篇文章的任一步卡住可以先把錯誤提示原樣記下來然后對照第4章的排查鏈路逐項檢查大部分問題都出在安全組規(guī)則或者端口沒有放行上。