輕鬆部署 Laravel 應用 | 《02. 一鍵指令碼》

Wi1dcard發表於2019-03-04

: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/deploymentscp 時使用的目錄一致。

稍等幾秒鐘,雖然沒有任何輸出,但這是正常現象。許多傳統 Unix 命令均為「沉默即成功」;相反,若是出現任何提示或許就是警告或錯誤。

最終效果

在瀏覽器內重新整理剛剛報錯的頁面,你將會看到 Laravel 應用的預設主頁:

恭喜你,部署成功。

為什麼不是 Star 更多的那些?

一鍵指令碼通常使用 Shell 語言編寫(與我們輸入的命令是同一種語言),其中的邏輯十分複雜,加之 Shell 語言起源於幾十年前、可讀性較差,鑑於後續文章中將會剖析指令碼中做了什麼,所以選擇講解專為 Laravel 開發的簡易一鍵指令碼,也方便大家自行研究探索。

我感謝自己平凡,敢愛敢恨沒負擔。
我感謝自己不凡,可愛可恨都包攬。

相關文章