應⽤用程式部署
范聖佑 Shengyou Fan
臺中科⼤大資⼯工系 (2015/05/31)
適
⽤用
5.0
版
單元主題
• 了解應⽤用程式部署有哪些⽅方式與選擇?
• ⽰示範如何將現階段實作成果部署⾄至 Pagoda Box 平台
上?
部署⽅方式簡介
應⽤用程式部署
• 把寫好的程式碼放到公開的網路主機,讓使⽤用者可
以瀏覽、使⽤用這些應⽤用程式。這個從個⼈人的開發機
將原始碼放到網路主機的動作,稱之為部署
• ⼀一般⽽而⾔言,部署 PHP 網路應⽤用程式共有四種選擇:
- 共享主機 (shared servers)
- VPS (virtual private servers)
- 專⽤用主機 (dedicated servers)
- PaaS (Platform as a service)
★ 參考:http://en.wikipedia.org/wiki/Software_deployment
共享主機 (shared servers)
• 資源共享卻也互搶,假如不幸跟您在同⼀一台主機的
其他 PHP 應⽤用程式吃掉太多資源;或是主機服務商
超賣,都有可能影響到您的 PHP 應⽤用程式
• 無法客製化調整任何設定,⽐比⽅方說更新 PHP 版本、
額外安裝軟體 (如 Memcached、Redis、Elasticsearch)
• 通常不會提供 SSH 連線⽅方式 (通常是 (s)FTP),也因
此很難⾃自動化部署;也無法透過版本控制部署對應
的程式碼版本
VPS (virtual private servers)
• 看起來、感覺起來、運作起來就像⼀一台獨⽴立的裸機
(bare-metal) ⼀一樣,實際上它有可能是多個VPS 運⾏行在
同⼀一台實體主機上。但這些VPS 都有各⾃自獨⽴立的記憶
體、檔案系統、root 使⽤用者、IP 位址、CPU、頻寬…等
• 提供⽐比共享主機更多的彈性設定,包括:
- root 權限的 SSH 連接
- 可以安裝任何您想要的軟體
• VPS 是⼤大多數 PHP 應⽤用程式理想的部署⽅方案,因為其
提供充分的系統資源 (CPU、記憶體、硬碟空間),且可
依需求升/降級。不過所有的設定都得⾃自⼰己來!
專⽤用主機 (dedicated servers)
• 專⽤用主機就是 IDC 使⽤用的機架式主機 (rack-mounted
machine)
• 專⽤用主機完全就是⼀一台實體主機,它提供完整的資
源和效能,也可以提供 root 權限的 SSH 連接,也需
要⾃自⾏行設定和防護,但其無法像VPS 可以如此快速
的設定和啟⽤用。
• 假如您因為流量太⼤大⽽而讓VPS 的花費變⾼高,就可以
考慮改採專⽤用主機。(性價⽐比較⾼高,不過前提是需求
真的超過VPS 所提供的)
PaaS (Platform as a service)
• PaaS 是快速部署您的 PHP 應⽤用程式的⼀一種⽅方式,不
像VPS 或專⽤用主機,使⽤用者不需要管理與控制雲端
基礎設施,只需⾃自⾏行處理應⽤用程式部署與原始碼管
理,其他由 PaaS 提供商處理即可
• 您只需要登⼊入您的 PaaS 服務商後台,點幾個按鈕;
或是有些 PaaS 服務商有提供指令模式或 HTTP API
接⼝口可以讓您快速部署您的 PHP 應⽤用程式
• 假如您不想管理您的主機的話,推薦使⽤用 PaaS 做為
儲放⽅方案,並依需求升級/降級即可
★ 參考:http://en.wikipedia.org/wiki/Platform_as_a_service
使⽤用 PaaS 部署的好處
• ⼀一般⽽而⾔言,PaaS 平台都⽀支援版本控制、PHP 版本設
定、多種資料庫、動態因應流量擴展等功能
• 因此,你只需要專注在程式開發即可,其他所有⼯工
作包括主機安裝、佈署設定、流量擴充等都可以由
PaaS ⾃自動完成
• 本⼯工作坊將採⽤用 Pagoda Box 這個 PaaS 服務部署應⽤用
程式
Pagoda Box 簡介
• ⼀一個 PaaS 服務,註冊帳號後,就可以隨時佈署應⽤用
程式⾄至該平台,並取得動態網址,開發⼈人員完全不
需要煩惱環境建置的問題
• 其提供 Tinker App 的免費額度供測試及 Demo ⽤用,
不過僅具備有限的運算能⼒力,且若應⽤用程式無⼈人瀏
覽時,反應速度會⾃自動降低
• 本單元將學習如何將⾃自⼰己撰寫的網路應⽤用程式部署
⾄至 Pagoda Box
★ 參考: http://pagodabox.io/pricing/
部署前置作業
Pagoda Box ⾸首⾴頁
https://pagodabox.io/
註冊 Pagoda Box 帳號
填寫註冊資訊後
進⾏行 Email 驗證
產⽣生 SSH Key
• Pagoda Box 的遠端連線使⽤用 SSH 連線加密,因此要
先產⽣生⼀一組 Key 做為加密⾦金鑰
• 打開 comder.exe 並輸⼊入以下指令
★ SSH Key 產⽣生教學: https://pagodabox.io/docs/setting_up_ssh-windows
$	
  ssh-­‐keygen	
  -­‐t	
  rsa	
  -­‐C	
  "{請換成您的	
  email	
  }"	
  
畫⾯面會請您輸⼊入	
  passphrase	
  (密碼)	
  可不輸⼊入	
  
完成後會產⽣生兩個檔案:	
  
C:{家⺫⽬目錄}.sshid_rsa	
  (私鑰)	
  
C:{家⺫⽬目錄}.sshid_rsa.pub	
  (公鑰)
登記 SSH Key
• 接著,要把⾃自⼰己的公錀登記在 pagoda box 的帳號
內,這樣 pagoda box 才會允許我們連上主機
• 有兩種⽅方式登記
- 初始化 App 時若沒有 SSH Key 則會出現提⽰示
- ⽇日後要加 Key 則是在帳號設定內增加
初始化時設定 SSH Key
Key 的名稱 (可⾃自取)
公錀內容
帳號設定內設定 SSH Key
Key 的名稱 (可⾃自取)
公錀內容
已經登記的 Key
增加 Boxfile
• Pagoda Box 的運作原理,是透過讀取專案資料夾內
的 Boxfile 了解應⽤用程式所需要的所有部署動作:
- 啟動對應的機器
- 執⾏行所有 build 指令,包括 composer、artisan
- 設定環境變數,並傳遞給應⽤用程式
- 並依照 Boxfile 內的指令進⾏行⾃自動化佈署
• 請下載教學資源資料夾內程式碼⽚片段的 Boxfile 及
Boxfile.install ⾄至專案資料夾內
★ Boxfile 詳細內容: https://pagodabox.io/docs/boxfile_overview
設定 App key
• Laravel 的加密運算是透過 .env 裡的 APP_KEY 來處
理,在 Pagoda Box 部署後也需要將這個環境變數傳
遞給 App 使⽤用
• 請將 .env 裡的 APP_KEY 複製貼到 Boxfile 裡對應的
位置:
APP_ENV=local	
  
APP_DEBUG=true	
  
APP_KEY={your	
  key}
.env
global:	
  
	
  	
  env:	
  
	
  	
  	
  	
  -­‐	
  APP_ENV:	
  production	
  
	
  	
  	
  	
  -­‐	
  APP_DEBUG:	
  false	
  
	
  	
  	
  	
  -­‐	
  APP_KEY:	
  {your	
  key}
Boxfile
調整 log 設定
將 config/app.php 的 log 設定改為 single
調整 cache 設定
調整 config/cache.php 裡 path 的位置
部署應⽤用程式
★ 參考:https://pagodabox.io/docs/framework_laravel
Pagoda Box 部署流程
pagoda box
web
db
client
local
commit
deploy
分析 Boxfile
create
browse
SmartGit
設定新 App
為 App 命名 (網址)
選擇 App 類型
App 建⽴立完成
執⾏行部署指令
• 依照 Pagoda Box 的提⽰示,打開 comder.exe 並輸⼊入以
下指令:
$	
  git	
  remote	
  add	
  pagoda	
  git@git.pagodabox.io:apps/{名稱}.git	
  
$	
  git	
  push	
  pagoda	
  master
部署執⾏行中
瀏覽 App 成果
0 downtime 部署
pagoda box
web 1
db
local
commit
deploy
分析 Boxfile
create
browse
web 2
client
replace
browse
SmartGit
單元總結
• 在這個單元裡我們學到了些什麼?
- 何謂部署?
- 部署應⽤用程式有哪些⽅方式可以選擇?
- 如何使⽤用 Pagoda Box 來部署應⽤用程式?
Q & A
歡迎提問討論

應用程式部署

  • 1.
  • 2.
  • 3.
  • 4.
    應⽤用程式部署 • 把寫好的程式碼放到公開的網路主機,讓使⽤用者可 以瀏覽、使⽤用這些應⽤用程式。這個從個⼈人的開發機 將原始碼放到網路主機的動作,稱之為部署 • ⼀一般⽽而⾔言,部署PHP 網路應⽤用程式共有四種選擇: - 共享主機 (shared servers) - VPS (virtual private servers) - 專⽤用主機 (dedicated servers) - PaaS (Platform as a service) ★ 參考:http://en.wikipedia.org/wiki/Software_deployment
  • 5.
    共享主機 (shared servers) •資源共享卻也互搶,假如不幸跟您在同⼀一台主機的 其他 PHP 應⽤用程式吃掉太多資源;或是主機服務商 超賣,都有可能影響到您的 PHP 應⽤用程式 • 無法客製化調整任何設定,⽐比⽅方說更新 PHP 版本、 額外安裝軟體 (如 Memcached、Redis、Elasticsearch) • 通常不會提供 SSH 連線⽅方式 (通常是 (s)FTP),也因 此很難⾃自動化部署;也無法透過版本控制部署對應 的程式碼版本
  • 6.
    VPS (virtual privateservers) • 看起來、感覺起來、運作起來就像⼀一台獨⽴立的裸機 (bare-metal) ⼀一樣,實際上它有可能是多個VPS 運⾏行在 同⼀一台實體主機上。但這些VPS 都有各⾃自獨⽴立的記憶 體、檔案系統、root 使⽤用者、IP 位址、CPU、頻寬…等 • 提供⽐比共享主機更多的彈性設定,包括: - root 權限的 SSH 連接 - 可以安裝任何您想要的軟體 • VPS 是⼤大多數 PHP 應⽤用程式理想的部署⽅方案,因為其 提供充分的系統資源 (CPU、記憶體、硬碟空間),且可 依需求升/降級。不過所有的設定都得⾃自⼰己來!
  • 7.
    專⽤用主機 (dedicated servers) •專⽤用主機就是 IDC 使⽤用的機架式主機 (rack-mounted machine) • 專⽤用主機完全就是⼀一台實體主機,它提供完整的資 源和效能,也可以提供 root 權限的 SSH 連接,也需 要⾃自⾏行設定和防護,但其無法像VPS 可以如此快速 的設定和啟⽤用。 • 假如您因為流量太⼤大⽽而讓VPS 的花費變⾼高,就可以 考慮改採專⽤用主機。(性價⽐比較⾼高,不過前提是需求 真的超過VPS 所提供的)
  • 8.
    PaaS (Platform asa service) • PaaS 是快速部署您的 PHP 應⽤用程式的⼀一種⽅方式,不 像VPS 或專⽤用主機,使⽤用者不需要管理與控制雲端 基礎設施,只需⾃自⾏行處理應⽤用程式部署與原始碼管 理,其他由 PaaS 提供商處理即可 • 您只需要登⼊入您的 PaaS 服務商後台,點幾個按鈕; 或是有些 PaaS 服務商有提供指令模式或 HTTP API 接⼝口可以讓您快速部署您的 PHP 應⽤用程式 • 假如您不想管理您的主機的話,推薦使⽤用 PaaS 做為 儲放⽅方案,並依需求升級/降級即可 ★ 參考:http://en.wikipedia.org/wiki/Platform_as_a_service
  • 9.
    使⽤用 PaaS 部署的好處 •⼀一般⽽而⾔言,PaaS 平台都⽀支援版本控制、PHP 版本設 定、多種資料庫、動態因應流量擴展等功能 • 因此,你只需要專注在程式開發即可,其他所有⼯工 作包括主機安裝、佈署設定、流量擴充等都可以由 PaaS ⾃自動完成 • 本⼯工作坊將採⽤用 Pagoda Box 這個 PaaS 服務部署應⽤用 程式
  • 10.
    Pagoda Box 簡介 •⼀一個 PaaS 服務,註冊帳號後,就可以隨時佈署應⽤用 程式⾄至該平台,並取得動態網址,開發⼈人員完全不 需要煩惱環境建置的問題 • 其提供 Tinker App 的免費額度供測試及 Demo ⽤用, 不過僅具備有限的運算能⼒力,且若應⽤用程式無⼈人瀏 覽時,反應速度會⾃自動降低 • 本單元將學習如何將⾃自⼰己撰寫的網路應⽤用程式部署 ⾄至 Pagoda Box ★ 參考: http://pagodabox.io/pricing/
  • 11.
  • 12.
  • 13.
    註冊 Pagoda Box帳號 填寫註冊資訊後 進⾏行 Email 驗證
  • 14.
    產⽣生 SSH Key •Pagoda Box 的遠端連線使⽤用 SSH 連線加密,因此要 先產⽣生⼀一組 Key 做為加密⾦金鑰 • 打開 comder.exe 並輸⼊入以下指令 ★ SSH Key 產⽣生教學: https://pagodabox.io/docs/setting_up_ssh-windows $  ssh-­‐keygen  -­‐t  rsa  -­‐C  "{請換成您的  email  }"   畫⾯面會請您輸⼊入  passphrase  (密碼)  可不輸⼊入   完成後會產⽣生兩個檔案:   C:{家⺫⽬目錄}.sshid_rsa  (私鑰)   C:{家⺫⽬目錄}.sshid_rsa.pub  (公鑰)
  • 15.
    登記 SSH Key •接著,要把⾃自⼰己的公錀登記在 pagoda box 的帳號 內,這樣 pagoda box 才會允許我們連上主機 • 有兩種⽅方式登記 - 初始化 App 時若沒有 SSH Key 則會出現提⽰示 - ⽇日後要加 Key 則是在帳號設定內增加
  • 16.
    初始化時設定 SSH Key Key的名稱 (可⾃自取) 公錀內容
  • 17.
    帳號設定內設定 SSH Key Key的名稱 (可⾃自取) 公錀內容 已經登記的 Key
  • 18.
    增加 Boxfile • PagodaBox 的運作原理,是透過讀取專案資料夾內 的 Boxfile 了解應⽤用程式所需要的所有部署動作: - 啟動對應的機器 - 執⾏行所有 build 指令,包括 composer、artisan - 設定環境變數,並傳遞給應⽤用程式 - 並依照 Boxfile 內的指令進⾏行⾃自動化佈署 • 請下載教學資源資料夾內程式碼⽚片段的 Boxfile 及 Boxfile.install ⾄至專案資料夾內 ★ Boxfile 詳細內容: https://pagodabox.io/docs/boxfile_overview
  • 19.
    設定 App key •Laravel 的加密運算是透過 .env 裡的 APP_KEY 來處 理,在 Pagoda Box 部署後也需要將這個環境變數傳 遞給 App 使⽤用 • 請將 .env 裡的 APP_KEY 複製貼到 Boxfile 裡對應的 位置: APP_ENV=local   APP_DEBUG=true   APP_KEY={your  key} .env global:      env:          -­‐  APP_ENV:  production          -­‐  APP_DEBUG:  false          -­‐  APP_KEY:  {your  key} Boxfile
  • 20.
    調整 log 設定 將config/app.php 的 log 設定改為 single
  • 21.
    調整 cache 設定 調整config/cache.php 裡 path 的位置
  • 22.
  • 23.
    Pagoda Box 部署流程 pagodabox web db client local commit deploy 分析 Boxfile create browse SmartGit
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
    執⾏行部署指令 • 依照 PagodaBox 的提⽰示,打開 comder.exe 並輸⼊入以 下指令: $  git  remote  add  pagoda  git@git.pagodabox.io:apps/{名稱}.git   $  git  push  pagoda  master
  • 29.
  • 30.
  • 31.
    0 downtime 部署 pagodabox web 1 db local commit deploy 分析 Boxfile create browse web 2 client replace browse SmartGit
  • 32.
    單元總結 • 在這個單元裡我們學到了些什麼? - 何謂部署? -部署應⽤用程式有哪些⽅方式可以選擇? - 如何使⽤用 Pagoda Box 來部署應⽤用程式?
  • 33.