如何部署Symfony程序


部署Symfony可能是一個複雜和多樣的任務,取決於你的程式的設定和需求。本文並非手把手的指南,而是羅列了部署時的常見需求和建議。

Symfony部署基礎 

#發生在部署Symfony時的典型步驟包括:

    ##把你的程式碼上傳到產品伺服器;
  1. 安裝三方依賴(通常透過Composer完成,並且可以在上傳程式之前完成);
  2. 運行資料庫遷移(migration)或類似任務,以更新“已改變的」資料結構;
  3. 清除(可選地,預熱[warming up]) 你的快取。
部署過程還包含其他任務,諸如:

    對程式碼的某個特定版本打上標籤,作為你的版本寶庫中的一個發布;
  • 建立一個臨時區域,以建立你的"offline" 離線已更新設定;
  • 執行任意可用測試,以確保程式碼和/或伺服器的穩定性;
  • web/ 目錄刪除任何不必要的檔案以保持生產環境乾淨;
  • 清除外部快取系統(像是
  • MemcachedRedis)。
如何部署Symfony程式 

#部署Symfony程式時有幾種方式。始於一些基本的部署策略,然後從那裡開始。

基本檔案傳送 

部署一套程式最基本的方式是透過FTP/SCP(或類似方法)手動拷貝檔案。其欠點是,例如在升級過程中,你缺少對系統的控制。這種方法也需要你在文字傳輸之後執行一些手動步驟(參考

常見的後部署任務)。

使用版本控制 

如果你使用了版本控制(例如Git或SVN),你可以直接把現場安裝(live installation)做成你repository的一個拷貝。當你已經準備好升級時,簡單到如同從版本控制系統中取出最新的更新。

這讓你的檔案更新變得

更容易,但你仍然需要考慮手動執行其他步驟(參考 常見的後部署任務)。

使用平台服務 

鮮少使用有相關需求的用戶,請參考Symfony官網原文。另,現代雲端平台,如微軟Azure,都可以一步支援Symfony3 。

不同的服務供應商之間,特殊的部署步驟十分多樣化,因此從以下獨立文章中尋找你所選擇的服務:

使用建置腳本和其他工具 

有幾種工具可以幫助減輕部署時的痛苦。其中的一些幾乎是為Symfony的需求而量身定制的:

  • Capistrano 配合 Symfony plugin
  • Capistrano 是一個Ruby寫就的遠端伺服器的自動化和部署工具。 Symfony plugin 是一個簡化Symfony關聯任務的插件,靈感來自Capifony (它只能能和Capistrano 2一起工作)
  • #sf2debpkg
  • #幫你為Symfony專案建立一個原生的Debian套件。
  • Magallanes
  • 這個「類別Capistrano」部署工具由PHP構建,對PHP開發者來說可以更容易擴展其需求。
  • Fabric
  • 這個基於Python的類別庫提供了一個用來「執行本地或遠端命令列以及上傳下載檔案」的基礎套件。
  • Deployer
  • 這是另一個由原生PHP重寫的Capistrano,有一些專門提供給Symfony的功能。
  • Bundles
  • 有一些 添加了部署功能的bundles 可以直接在你的Symfony控制台中使用。
  • 基礎腳本
  • 你當然可以使用命令列,Ant 或其他任何建置工具,來腳本化部署你的專案。

常見的後部署任務 

在部署了你的真正原始碼之後,有一些常見事項需要你來做:

A) 需求檢查 

##執行下列指令以檢查伺服器是否符合需求:

#

B) 設定app/config/parameters.yml檔案 

此檔案不應 被部署,而是被Symfony提供的一個自動工具來管理。

C) 安裝/更新vendors 

你的vendors(三方包兒)可以在上傳原始碼之前進行更新(例如更新vendor/ 目錄,然後再傳原始碼)或到伺服器上完成更新。不管哪種方式,只需像往常一樣來更新vendors:

1
$  php bin/symfony_requirements
#
1
$  composer install --no-dev --optimize-autoloader

#透過建立一個"class map" 類別映射,--optimize-autoloader 旗標大幅改善了Composer的自動載入效能。 --no-dev 旗標可確保開發環境的套件不會安裝到生產環境。

如果在這一步驟你得到"class not found" 錯誤,你可能需要在執行前述指令之前先執行export SYMFONY_ENV=prod 以便post-install-cmd 腳本運行在prod 環境下。

D) 清除Symfony快取 

#確保清除(以及warm-up)了你的Symfony快取。

1
#
$  php bin/console cache:clear --env=prod --no-debug

E) 剝離Assetic資源 

如果你使用了Assetic,你需要剝離出assets:

#
1
#
$  php bin/console assetic:dump --env=prod --no-debug

F) 其他內容!

  • 執行資料庫遷移
  • 清除APC快取
  • 執行assets:install (已經在 composer install 過程中被打點好了)
  • 新增/編輯CRON 任務
  • 發布assets資源到CDN
  • ...

############## ##程序生命週期:持續整合,品質保證等 ###¶#########雖然本文涵蓋了部署流程的技術細節,但程式碼從開發到生產時的完整生命週期可能需要更多步驟(考慮staging部署,QA[Quality Assurance/品質保證],運行測試,等等)######staging、測試、QA、持續整合(continuous integration),資料庫遷移以及失敗時的向下相容,統統被強烈建議。有各種簡單或複雜的工具,其中的某一款會讓你的部署在滿足環境需求的過程變得容易(或老練)。 ######別忘了在部署過程中也牽扯到更新依賴(一般透過Composer),遷移資料庫,清除快取以及其他潛在事項,諸如將資源發佈到CDN(參考###常見的後部署任務###)。 ######