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[[email protected]]
認證
使用 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。更多 capistrano 鉤子資訊請參考 capistrano 官網:
部署應用
正式部署應用之前,需要確保應用**已提交並推送到 git 倉庫,然後在本地電腦開啟終端,進入應用的最頂層目錄,執行下面的命令進行部署:
cap production deploy
回滾應用
如果不慎把錯誤**提交到生產環境,可以執行下面的命令回到之前的版本:
cap production deploy:rollback
其他常用部署工具 php佈署 群輝 PHP部署調優 自動部署工具
php 早期使用 ftp 部署到生產環境,不過這種方式顯然不適合集群部署,也不安全,本教程主要討論如何使用現代化工具自動部署,這種方式簡單 可預知結果,而且可逆。版本控制 把 納入版本控制是現代開發人員的基本素養,我們可以使用 git,也可以使用 svn,對於應用開發者來說,版本控制有助於記錄 的變...
MySQL部署工具 自動化部署工具Syncd介紹
特性go語言開發,編譯簡單 執行高效 web介面訪問,互動友好 許可權模型靈活自由 支援自定義構建 支援git倉庫 支援分支 tag上線 部署hook支援,可擴充套件性強 完善的上線工作流 郵件通知機制 部署流程 這是我自己通過測試發現的syncd部署上線的流程,看完這個流程再結合自己的需求是否使用...
部署和調優 1 5 vsftp部署和優化 1
系統自帶的ftp服務軟體。vsftpd 安裝vsftpd yum install y vsftpd 啟動vsftpd etc init.d vsftpd start 如果啟動失敗,可能是埠被占用,所有的ftp服務都占有21埠 netstat lnp killall pure ftpd 預設的ftp服...