核心要點
.gitignore
忽略某些文件並在運行部署路由之前檢查這些文件是否存在來實現。其他方法還包括密碼保護或 IP 地址限制。 成功的 Web 開發離不開有效的網站部署工作流。無論你的工作流好壞與否,如果無法將網站上線,客戶就無法支付你的辛勤勞動成果。
網站部署到生產服務器的方法有很多,每種方法都有其優缺點,但起始和結束方式都相同。一個好的網站部署工作流的關鍵在於中間步驟。
前幾天,我使用 FileZilla 將文件上傳到我的生產服務器。我一直覺得 FileZilla 的界面不太友好,但很長一段時間以來,我一直認為這是標準做法。
對於同一個項目,我還使用 Git 跟踪文件更改。當我開始輸入 git push origin
時,我停下來思考了一下。如果網站部署像推送 Git 倉庫一樣簡單,豈不是方便多了?
仔細想想,Git 是處理網站部署文件的完美工具。它跟踪所有文件更改,並只需一條命令即可推送或拉取所需內容。我決定開始在 Google 上搜索一種在部署我自己的網站時使用 Git 的方法。
我發現的一種使用 Git 部署網站的流行方法是充分利用 Git Hooks(Tom Oram 喜歡使用類似的方法)。想像一下,只要在終端控制台中輸入 git push origin
,Git Hooks 就會啟動預定義的腳本。該預定義腳本訪問你的生產服務器並拉取最新的文件更改。使用與推送更改相同的命令,你也可以更新你的網站。我認為這種方法很棒,直到我意識到,僅僅因為我推送了本地倉庫並不意味著我已準備好上線。
我想要一種像使用 Git 推送倉庫一樣簡單的方法。更重要的是,我希望在將內容上線時擁有完全的控制權。我找到了一個類似的工作流,它使用 Git 處理文件傳輸。最重要的是,我還發現可以使用 PHP 框架 Laravel 來自動化更重複的任務。
以下是我的網站部署工作流:
結構設置
在本節中,我們將設置一個 --bare 倉庫作為我們的中心倉庫,並通過克隆創建兩個倉庫。一個是我們的本地網站,我們將在其中執行部署過程;另一個是我們的線上網站。我們還將安裝 Laravel。
在開始之前,你需要一台安裝了 Git 的本地服務器和生產服務器。
SSH 連接到你的生產服務器,找到你希望中心倉庫所在的目錄。
<code>ssh username@domain.com cd repos</code>
現在初始化你的倉庫。
<code>git init --bare --shared mywebsite.git</code>
通常建議將此文件夾放在公共文件夾結構之外。這樣,其他人就不會意外地偶然發現你的私有倉庫。
確定要在你的 public_html
中託管線上網站文件的哪個位置。
<code>cd ~/public_html/</code>
現在克隆你剛剛創建的中心 --bare 倉庫,並註銷此 SSH 會話。
<code>git clone username@domain.com:~/repos/mywebsite.git mywebsite exit</code>
如果你使用的是 Homestead 之類的東西,你可能需要使用 Vagrant 命令來 SSH 連接到你的本地服務器以訪問你的文件。
<code>vagrant ssh</code>
按照你剛剛創建線上網站的步驟進行操作。
<code>cd websites git clone username@domain.com:~/repos/mywebsite.git mywebsite</code>
在設置 Laravel 之前,你需要在本地網站上安裝它。
通過打開 /app/config/remote.php
來將你的遠程服務器設置添加到配置文件中。
<code>'connections' => array( 'production' => array( 'host' => 'domain.com', 'username' => 'username', 'password' => '********************', 'key' => '', 'keyphrase' => '', 'root' => '/var/www', ), ),</code>
請記住“production”鍵,因為我們稍後需要引用它。
將你的文件添加到本地網站倉庫中,以便我們跟踪對它們的任何更改。
<code>git add .</code>
執行你的初始提交。
<code>git commit -m 'initial commit with laravel'</code>
最後,推送到生產服務器上的中心倉庫。
<code>git push origin master</code>
訪問你的 localhost 時,你應該會看到 Laravel 的“You have arrived.”屏幕。
幹得好!你已經全部設置和配置好了,現在應該準備好深入了解有趣的內容了。
使用 Git 的核心工作流
一切設置好後,使用 Git 部署你的網站就易如反掌了。讓我們看看代碼,嘗試理解其核心內容。
理解工作流很重要,因為我們稍後將在 PHP 中使用 Laravel 重寫它。它還有助於我們調試可能出現的任何問題。
<code>ssh username@domain.com cd repos</code>
<code>git init --bare --shared mywebsite.git</code>
如果你到目前為止一切正確,訪問你的線上站點時,你應該會看到 Laravel 的“You have arrived.”屏幕。
如果你想就此停止,我不會對你有什麼看法。這本身就是一個相當可靠的部署工作流。但是我們可以通過使用 Laravel 自動化它來使其更高效。
使用 Laravel 自動化部署
好的,既然我們知道如何使用 Git 部署網站,那麼讓我們使用 Laravel 來自動化此過程。這部分可能不是必需的,但如果你已經在使用 Laravel,我會問:“為什麼不呢?”在這裡使用 Laravel 使這個網站部署工作流變得簡單、高效、可控且可定制。
打開 /app
文件夾中的 routes.php
頁面,並將以下 PHP 代碼行添加到文件中。
<code>cd ~/public_html/</code>
每當我們訪問 http://localhost/deploy
時,Server
控制器的公共函數 deploy
都會執行。
從一個擴展 BaseController
的空 Server
類開始。
<code>git clone username@domain.com:~/repos/mywebsite.git mywebsite exit</code>
現在將公共函數 deploy
插入到控制器中。
<code>vagrant ssh</code>
將其保存在你的 /app/controllers
文件夾中,並將其命名為 Server.php
。
有趣的部分來了!
deploy
函數中,並重複 Git 部署工作流。 插入 SSH facade。我們要訪問我們之前設置的生產遠程配置。
<code>cd websites git clone username@domain.com:~/repos/mywebsite.git mywebsite</code>
現在 run()
函數將接受我們需要提供的兩個參數。第一個也是最重要的參數是我們想要在執行 deploy
函數時運行的終端命令數組。
<code>'connections' => array( 'production' => array( 'host' => 'domain.com', 'username' => 'username', 'password' => '********************', 'key' => '', 'keyphrase' => '', 'root' => '/var/www', ), ),</code>
第二個是我們想要調用的函數,用於處理我們從服務器接收到的反饋。
<code>git add .</code>
現在,每當我們想要部署我們的網站時,我們只需要訪問 http://localhost/deploy
就可以了。夠簡單吧?是的,也不完全是。
在我們稱其為結束之前,我們需要處理一些安全漏洞。任何人都可以偶然發現 http://domain.com/deploy
並部署我們的網站。我們需要做的是設置一些東西來防止這種情況。
有很多方法可以做到這一點,我們可以爭論哪種方法最安全,直到我們筋疲力盡。你可以保護路由的密碼,你可以通過 IP 地址阻止訪問,等等。
在這個例子中,我們將使用 .gitignore
,並檢查文件是否存在,然後再運行我們剛剛創建的路由。
controllers
中創建一個 .gitignore
文件以忽略 Server.php
。 創建一個新文件並將其保存在 /app/controllers
中,命名為 .gitignore
。
將以下文本行添加到文件中並保存。
<code>ssh username@domain.com cd repos</code>
Server.php
文件。 還記得我們之前創建的用於部署我們網站的路由嗎?我們需要用這個條件語句將其包裝起來,然後我們就可以上線了。
<code>git init --bare --shared mywebsite.git</code>
完成後,它應該如下所示。
<code>cd ~/public_html/</code>
發揮創意
就是這樣!只需暫存所有更新的文件、提交、推送,你就可以開始使用 Git 友好的工作流進行部署了。
如果你願意,你可以更進一步。只需將 http://localhost/deploy
添加到你的書籤中即可進行一鍵式快速部署。你甚至可以創建一個簡單的 HTML 表單來發佈到該頁面,允許你拉取特定的分支。可能性是無限的。
使用 Git 和 Laravel 進行部署使我枯燥乏味的網站部署任務變得有趣起來。如果你了解 Git,它很容易設置,但使用起來更容易。
請與我分享你用來簡化網站部署的創意方法!
使用 Laravel 和 Git 部署網站的常見問題解答 (FAQ)
在使用 Git 部署 Laravel 網站時,可能會出現衝突,尤其是在多個開發人員處理同一個項目時。要解決這些衝突,你需要使用 Git 的衝突解決工具。當出現衝突時,Git 將暫停變基並給你機會修復衝突。然後,你可以使用 git add
添加已解決的文件,並使用 git rebase --continue
繼續變基。在開始工作之前,務必始終從倉庫中拉取最新的更改,以最大限度地減少衝突。
Git 分支是管理 Laravel 項目不同版本的強大工具。你可以為每個特性或錯誤修復創建一個新分支,這允許你同時處理多個任務,而不會影響主代碼庫。任務完成後,你可以將分支合併回主代碼庫。這種方法確保主代碼庫保持穩定且無錯誤。
自動化部署過程可以節省大量時間和精力。你可以使用 Git hooks,它們是在提交、推送和接收等事件之前或之後 Git 執行的腳本。你可以編寫一個腳本,以便每當你推送到主分支時自動部署你的網站。這樣,你可以確保你的網站始終與最新的更改保持一致。
Git 提供了幾種回滾更改的方法。你可以使用 git revert
創建一個新的提交來撤消特定提交中所做的更改。或者,你可以使用 git reset
將 HEAD 指針移動到之前的提交,有效地“忘記”之後出現的提交。使用 git reset
時要小心,因為它可能會永久刪除你的更改。
安全性是任何 Web 開發項目的重要方面。在使用 Git 部署 Laravel 項目時,請確保將敏感文件(如 .env
)添加到你的 .gitignore
文件中,以防止它們被提交到倉庫。此外,在從倉庫推送和拉取時,始終使用安全協議,例如 SSH 或 HTTPS。
Laravel 的遷移系統是管理數據庫模式的強大工具。部署項目時,你可以使用 php artisan migrate
來應用任何掛起的遷移。但是,在與多個開發人員一起工作時要小心,因為衝突的遷移可能會導致問題。在創建新的遷移之前,始終從倉庫中拉取最新的更改,以避免衝突。
Git 是一個強大的協作工具。你可以使用分支同時處理不同的特性,並使用拉取請求來審查和將更改合併到主代碼庫中。此外,Git 的衝突解決工具可以幫助你解決合併更改時出現的任何衝突。
Git 提供了對項目中所有更改的完整歷史記錄。你可以使用 git log
查看提交歷史記錄,並使用 git diff
查看特定提交中所做的更改。這對於調試和理解項目的演變非常有用。
性能優化是 Web 開發的關鍵方面。在使用 Git 部署 Laravel 網站時,你可以使用 Laravel 的內置緩存功能來提高性能。此外,考慮使用 CDN 來提供靜態資源,並優化你的圖像和其他資源以減少加載時間。
正確處理錯誤和異常對於流暢的用戶體驗至關重要。 Laravel 提供了一個強大的異常處理系統,你可以用它來處理不同類型的錯誤。當發生錯誤時,你可以在修復錯誤的同時使用 Git 回滾到之前的穩定狀態。
以上是使用Laravel和Git部署您的網站的詳細內容。更多資訊請關注PHP中文網其他相關文章!