php **早期使用 ftp 部署到生產環境,不過這種方式顯然不適合集群部署,也不安全,本教程主要討論如何使用現代化工具自動部署,這種方式簡單、可預知結果,而且可逆。
版本控制
把**納入版本控制是現代開發人員的基本素養,我們可以使用 git,也可以使用 svn,對於應用開發者來說,版本控制有助於記錄**的變化,我們可以把乙個時間點的**標記為發布版本,可以回滾到之前的狀態,還可以在單獨的分支中實驗新功能,而不影響生產環境使用的**,更重要的是,版本控制有助於自動部署 php 應用。
自動部署
為了讓部署過程變得簡單、可預知結果和可逆,一定要自動部署應用,一旦實現自動化,我們無需再擔心複雜的部署過程。
讓部署變得簡單
應該只執行乙個簡單的命令就能部署應用。
讓部署的結果可預知
我們要讓部署的結果可預知,部署不應該有意料之外的***,如果出錯,部署過程會中止,而不影響現有的生產環境**。
讓部署可逆
如果不小心把有問題的**部署到生產環境,應該有個簡單的命令可以回滾到之前穩定的**版本,這是我們的安全保障。
capistrano
capistrano (是用於自動部署應用的軟體,能讓部署達到上面提到的三點要求,capistrano 執行在本地裝置中,通過 ssh 與遠端伺服器通訊,capistrano 本來是為了部署 ruby 應用而開發的,不過任何程式語言開發的應用都可以使用,包括 php。
capistrano 的工作原理
capistrano 會在遠端伺服器中儲存之前部署的應用,而且每次部署的版本放在各自的目錄中,capistrano 會維護五個或更多之前部署的應用,以防需要回滾到早前版本,capistano 還會建立乙個 current/ 目錄,通過符號鏈結指向當前部署的應用所在的目錄,在生產伺服器中,capistrano 管理的目錄結構類似如下所示:
home/
deploy/
current/
releases/
release1/
release2/
release3/
release4/
release5/
把新版應用部署到生產環境時,capistrano 首先從應用的 git 倉庫獲取最新**,然後把應用的**放到 releases/ 目錄中的乙個新子目錄中,最後把 current/ 目錄的符號鏈結指向這個新目錄。讓 capistrano 回滾到之前的版本時,capistrano 會把 current/目錄的符號鏈結指向 releases/ 目錄中存放之前版本的子目錄。capistrano 是一種優雅且簡單的部署方案,能讓 php 應用的部署過程變得簡單、可預知結果和可逆。
安裝capistrano 應該安裝在本地裝置中,別在遠端伺服器中安裝,安裝時還需要 ruby 和 gem,os x系統預設已經有了,執行下述命令安裝 capistrano:
gem install capistrano
配置安裝好 capistrano 之後,在使用之前,必須初始化專案,開啟終端,進入專案的最頂層目錄,執行下述命令:
cap install
這個命令會建立乙個名為 capfile 的檔案,乙個名為 config/ 的目錄,以及乙個名為 lib/ 的目錄。現在,專案的最頂層目錄應該有下述檔案和目錄:
capfile
config/
deploy/
production.rb
staging.rb
deploy.rb
lib/
capistrano/
tasks/
capfile 是 capistrano 的**配置檔案,會聚合 config/ 目錄中的配置檔案。config/ 目錄中存放的是各個遠端伺服器環境(如測試環境、預發環境、生產環境等)的配置檔案。
預設情況下,capistrano 假設你為應用搭建了多個環境,例如,可能有單獨的預發環境和生產環境。capistrano 在 config/deploy 目錄中為每個環境都提供了單獨的配置檔案,capistrano 還提供了 config/deploy.rb 配置檔案,這個檔案用於儲存所有環境通用的設定。
在本教程中,我們只使用 capitrano 的 web 角色,在 capistrano 中,角色的作用是把相關的任務組織在一起,只在屬於指定角色的伺服器中執行這些任務。
config/deploy.rb檔案
這個配置檔案包含所有環境通用的配置,本教程中,我們大多數 capistrano 設定都儲存在這個檔案中:
:repo_url:這是 git 倉庫的 url
:deploy_to:遠端伺服器中應用目錄的絕對路徑
:keep_releases:保留多少個舊版本,回滾用
config/deploy/production.rb檔案
這個檔案只包含生產環境的設定,這個檔案用於定義生產環境的角色,列出屬於各個角色的伺服器,我們只使用web 角色,而且只有乙個伺服器屬於這個角色,把 config/deploy/production.rb 檔案的內容替換成下述**(記得替換 ip 位址):
role :web, %w[deploy@123.456.78.90]
認證使用 capistrano 部署應用之前,我們必須在本地電腦和遠端伺服器之間,以及遠端伺服器和 git 倉庫之間建立認證,前面已經討論了如何使用 ssh 金鑰對在本地電腦和遠端伺服器之間建立認證,在遠端伺服器和 git 倉庫之間也要使用 ssh 金鑰對建立認證。
準備遠端伺服器
在部署之前,我們需要準備遠端伺服器,我們要通過 ssh 登入到遠端伺服器,建立乙個目錄存放部署的 php 應用。deploy 使用者必須有這個目錄的讀寫許可權,例如:
home/
deploy/
虛擬主機
依賴的軟體
遠端伺服器不需要 capistrano,但是需要 git,而且還需要執行 php 應用所需的全部軟體,我們可以執行以下命令安裝 git:
#ubuntu
sudo apt-get install git
#centos
sudo yum install git
capistrano的鉤子
capistrano 允許在部署應用過程中的特定時刻執行我們指定的命令,很多 php 開發者都使用 capistrano 管理應用的依賴,每次使用 capistrano 部署應用時,我們可以使用 capistrano 的鉤子安裝 composer 依賴。在 config/deploy.rb 檔案中新增以下**:
namespace :deploy do
desc "build"
after :updated, :build do
on roles(:web) do
within release_path do
execute :composer, "install --no-dev --quiet"
endend
endend
注:如果使用 composer 管理依賴,遠端伺服器中需要安裝 composer。
部署應用
正式部署應用之前,需要確保應用**已提交並推送到 git 倉庫,然後在本地電腦開啟終端,進入應用的最頂層目錄,執行下面的命令進行部署:
cap production deploy
回滾應用
如果不慎把錯誤**提交到生產環境,可以執行下面的命令回到之前的版本:
cap production deploy:rollback
其他常用部署工具
PHP部署調優 自動部署工具
php 早期使用 ftp 部署到生產環境,不過這種方式顯然不適合集群部署,也不安全,本教程主要討論如何使用現代化工具自動部署,這種方式簡單 可預知結果,而且可逆。版本控制 把 納入版本控制是現代開發人員的基本素養,我們可以使用 git,也可以使用 svn,對於應用開發者來說,版本控制有助於記錄 的變...
PHP部署調優 伺服器初始化配置
主機 php 應用開發好了之後,還需要部署到遠端主機上,才能讓使用者訪問我們提供的服務。一般來說,目前市場上提供的主機有四種 共享伺服器 虛擬私有伺服器 vps 專用伺服器和 paas。每種主機適用場景不同,相應的 差距也很大。共享伺服器 這種最便宜,一般來說這種適用於非開發者部署 比如非程式設計師...
關於php效能調優的幾條建議
最近在處理小魚社群的開發過程,遇到程式的效能問題,在解決這個問題的時候提出幾個建議 1 處理while foreach之類的迴圈要特別注意,因為這個迴圈可能是好幾千次的,所以裡面的每句語句都要注意執行速度,要精簡。還有個不好的習慣一定要注意,不要在這個中寫太長的程式,因為這可能讓你在幾百行的 中迷失...