:clap: 本系列持續更新中,歡迎關注:https://github.com/wi1dcard/laravel-deploy...。
由於課程上下文關聯比較緊密,在開始前請先閱讀 本文。
你的支援是我寫作的動力;關注我的客官們,請在右上角點個贊,將會讓文章在首頁展示,幫助更多人。
感謝 :clap: !
書接上回。上篇文章介紹了 Web 管理皮膚的安裝與使用,本節將會介紹使用一鍵安裝指令碼。
廣義上來講,Web 管理皮膚也是一鍵指令碼的一種;只不過安裝好之後,Web 皮膚通過網頁管理,而一鍵指令碼則是通過執行命令管理。雖然前者通常具備美觀、易操作的 GUI,但相比之下缺點也很明顯:
- 需要單獨放行埠(配置安全組),不僅麻煩,還給黑客以可乘之機;無論是皮膚存在漏洞還是你的密碼強度不足,都有可能造成伺服器淪陷為肉雞。
- 市面上常見的 Web 皮膚幾乎都是由「集中」的組織或公司開發並閉源,而非開源社群維護;這就造成我們不易看到原始碼,遇到問題無從查起,更別說提交貢獻了。
常見的一鍵指令碼
GitHub 搜尋 lnmp
關鍵字,排名靠前的有:
十分出人意料的是,以上專案均由國人開發,但這不是一件值得驕傲的事情 —— 部署技術依舊停留在一鍵指令碼的「上古世紀」。
在眾多的一鍵指令碼中,有一款是我們們 Laravel-China 站長 Summer 編寫的 summerblue/laravel-ubuntu-init,本篇將基於該指令碼進行部署,原因請見文末。
安裝執行環境
注意:由於相容性原因,建議需要使用該指令碼的使用者採用 Ubuntu 16.04 系統。本小節將基於該系統進行部署。
登入伺服器後,輸入以下命令:
$ wget -qO- https://raw.githubusercontent.com/summerblue/laravel-ubuntu-init/master/download.sh - | bash
稍等片刻,將會出現以下提示:
===> 開始下載...
===> 下載完畢
安裝指令碼位於: /root/laravel-ubuntu-init
===> 正在初始化系統...
繼續等待。
===> 正在初始化系統... [DONE]
===> 正在初始化軟體源... [DONE]
===> 正在安裝基礎軟體... [DONE]
===> 正在安裝 PHP... [DONE]
===> 正在安裝 Mysql / Nginx / Redis / Memcached / Beanstalkd / Sqlite3... [DONE]
===> 正在安裝 Nodejs / Yarn... [DONE]
===> 正在安裝 Composer... [DONE]
安裝完畢
Mysql root 密碼:gBRCuFTpGaorATvBybAHZYVIlteFsSB1
請手動執行 source ~/.bash_aliases 使 alias 指令生效。
出現以上輸出,說明安裝成功。注意儲存密碼,切勿丟失。隨後請執行:
$ source ~/.bash_aliases
這樣,執行環境就安裝完成了。
配置執行環境
首先,我們需要增加 Nginx 站點:
$ ~/laravel-ubuntu-init/16.04/nginx_add_site.sh
根據提示,輸入一些資訊並回車:
請輸入專案名:deployment
請輸入站點域名(多個域名用空格隔開):laravel-deployment.wi1dcard.cn
請注意,站點名稱(專案名)僅允許英文、數字、-
和 _
組合。另外,與上文寶塔皮膚類似,站點域名也可以使用公網 IP 代替。
請注意以下輸出:
域名列表:laravel-deployment.wi1dcard.cn
專案名:deployment
專案目錄:/var/www/deployment
是否確認? [y/N]
記住此處的專案目錄,後續將會使用。檢查無誤後,輸入 y
並回車。
沒什麼問題的話,將會看到成功提示:
配置檔案建立成功
Nginx 重啟成功
接下來,請在瀏覽器內輸入伺服器的公網 IP(或域名)並開啟:
出現 Welcome to Nginx!
字樣的提示,說明執行環境配置成功,Nginx 已經開始提供服務了。
部署專案
由於沒有 Web 管理頁面,所以本小節,我們採用基於 SSH 的 SCP 協議上傳專案程式碼。
注意:在生產環境中這樣做很危險!請關注後續章節。
請在 本地 的 Laravel 應用根目錄執行以下命令:
$ scp -r . root@laravel-deployment.wi1dcard.cn:/var/www/deployment
其中:
scp
是檔案傳輸命令。-r
表示傳輸整個目錄以及其子目錄內的檔案。.
表示當前目錄,該目錄位於本地。root@laravel-deployment.wi1dcard.cn
與本課程開篇「登入伺服器」類似,請替換為你的伺服器公網 IP 或域名。/var/www/deployment
便是上文提到需要你記住的專案目錄,該目錄位於伺服器端。
傳輸需要一段時間,你會看到一大堆輸出,當沒有新的檔案進度展示時說明已經傳輸完成。
好了,現在請重新整理執行環境配置成功後、包含 Welcome to Nginx!
字樣的頁面:
出現報錯,不要慌。這是一種部署過程中十分常見的錯誤 —— Permission Denied
,意為沒有許可權。當出現類似字詞時,你就需要檢查 許可權 相關配置了。
由於在伺服器端執行 PHP 的並非根使用者,而我們剛剛傳輸檔案時使用的是 root
,因此需進行修改。
請登入到伺服器,執行以下命令:
$ chown -R www-data:www-data /var/www/deployment
其中:
chown
命令用於修改檔案或目錄擁有者。-R
表示整個目錄以及其子目錄內的檔案(與scp -r
類似)。www-data:www-data
表示分別將擁有者與擁有組設定為www-data
使用者和www-data
使用者組。/var/www/deployment
與scp
時使用的目錄一致。
稍等幾秒鐘,雖然沒有任何輸出,但這是正常現象。許多傳統 Unix 命令均為「沉默即成功」;相反,若是出現任何提示或許就是警告或錯誤。
最終效果
在瀏覽器內重新整理剛剛報錯的頁面,你將會看到 Laravel 應用的預設主頁:
恭喜你,部署成功。
為什麼不是 Star 更多的那些?
一鍵指令碼通常使用 Shell 語言編寫(與我們輸入的命令是同一種語言),其中的邏輯十分複雜,加之 Shell 語言起源於幾十年前、可讀性較差,鑑於後續文章中將會剖析指令碼中做了什麼,所以選擇講解專為 Laravel 開發的簡易一鍵指令碼,也方便大家自行研究探索。