亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Symfony2 Chinese manual / 如何部署Symfony程序

如何部署Symfony程序

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

Symfony部署基礎 ?

發(fā)生在部署Symfony時的典型步驟包括:

  1. 把你的代碼上傳到產品服務器;
  2. 安裝三方依賴 (通常透過Composer完成,并且可以在上傳程序之前完成);
  3. 運行數據庫遷移(migration)或類似任務,以更新“已改變的”數據結構;
  4. 清除 (可選地,預熱[warming up]) 你的緩存。

部署過程還包括其他任務,諸如:

  • 對代碼的某個特定版本打上標簽,作為你的版本寶庫中的一個發(fā)布;
  • 創(chuàng)建一個臨時區(qū)域,以構建你的 "offline" 離線已更新設置;
  • 運行任意可用測試,以確保代碼和/或服務器的穩(wěn)定性;
  • web/ 目錄刪除任何不必要的文件以保持生產環(huán)境干凈;
  • 清除外部緩存系統(tǒng) (像是 MemcachedRedis)。

如何部署Symfony程序 ?

部署Symfony程序時有幾種方式。始于一些基本的部署策略,然后從那里開始。

基本文件傳輸 ?

部署一套程序最基本的方式是通過FTP/SCP(或類似方法)手動拷貝文件。其欠點是,比如在升級過程中,你缺少對系統(tǒng)的控制。這種方法也需要你在文傳輸之后執(zhí)行一些手動步驟(參考 常見的后部署任務)。

使用版本控制 ?

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

這令你的文件更新變得 更容易,但你仍然需要考慮手動執(zhí)行其他步驟(參考 常見的后部署任務)。

使用平臺服務 ?

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

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

使用構建腳本和其他工具 ?

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

  • Capistrano 配合 Symfony plugin
  • Capistrano 是一個Ruby寫就的遠程服務器的自動化和部署工具。Symfony plugin 是一個簡化Symfony關聯任務的插件,靈感來自 Capifony (它僅能和Capistrano 2一起工作)
  • sf2debpkg
  • 幫你為Symfony項目構建一個原生的Debian包。
  • Magallanes
  • 這個“類Capistrano”部署工具由PHP構建,對PHP開發(fā)者來說可以較容易地擴展其需求。
  • Fabric
  • 這個基于Python的類庫提供了一個用來“執(zhí)行本地或遠程命令行以及上傳下載文件”的基礎套件。
  • Deployer
  • 這是又一個由原生PHP重寫的Capistrano,有一些專門提供給Symfony的功能。
  • Bundles
  • 有一些 添加了部署功能的bundles 可以直接在你的Symfony控制臺中使用。
  • 基礎腳本
  • 你當然可以使用命令行, Ant 或其他任何構建工具,來腳本化部署你的項目。

常見的后部署任務 ?

在部署了你的真正源代碼之后,有一些常見事項需要你來做:

A) 需求檢查 ?

運行以下命令以檢查服務器是否滿足需求:

1
$  php bin/symfony_requirements

B) 配置app/config/parameters.yml文件 ?

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

C) 安裝/更新vendors ?

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

1
$  composer install --no-dev --optimize-autoloader

通過構建一個 "class map" 類映射,--optimize-autoloader 旗標大幅改進了Composer的自動加載性能。--no-dev 旗標可確保開發(fā)環(huán)境的包不被安裝到生產環(huán)境。

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

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 任務
  • 發(fā)布assets資源到CDN
  • ...

程序生命周期:持續(xù)整合,質量保證等 ?

雖然本文覆蓋了部署過程的技術細節(jié),但是代碼從開發(fā)到生產時的完整生命周期可能需要更多步驟(考慮staging部署,QA[Quality Assurance/質量保證],運行測試,等等)

staging、測試、QA、持續(xù)整合(continuous integration),數據庫遷移以及失敗時的向下兼容,統(tǒng)統(tǒng)被強烈建議。有各種簡單或復雜的工具,其中的某一款會令你的部署在滿足環(huán)境需求的過程變得容易(或老練)。

別忘了在部署過程中也牽扯到更新依賴(一般通過Composer),遷移數據庫,清除緩存以及其他潛在事項,諸如將資源發(fā)布到CDN(參考 常見的后部署任務)。