2016/03/05

手動 Zero Down Time Laravel Deploymenet

目錄結構

web-app
|-- current  (symbol-link to laravel-app-ver-01)
|-- laravel-app-ver-01
|-- .env
|-- storage
|-- cache

必要的基本設置
*nginx 先設定指向 web-app/current/public
*.env 跟 storage 放在 web-app 根目錄, laravel-app-ver01 內則是直接 link 他們

接下來開始佈署流程

working dir: web-app

1. git clone your-laravel-app
2. mv your-laravel-app laravel-app-ver02

這時候目錄下會長這樣

web-app
|-- current (symbol-link to laravel-app-ver-01)
|-- laravel-app-ver-01
|-- laravel-app-ver-02
|-- .env
|-- storage
|-- cache

3. cd laravel-app-ver-02

# checkout 到你要 deploy 的 branch
4. git checkout --track -b release origin/release

# 刪除 storage 資料夾
5. rm -rf storage

# 把需要的檔案 link 進來 (甚至 node_modules 也可以 link ,可減少 npm install 的時間)
6. ln -s web-app/storage storage
7. ln -s web-app/.env .env
8. ln -s web-app/bootstrap/cache cache

# 剩下的是看需要什麼就跑什麼
composer update --no-scripts
npm install
gulp
php artisan migrate

最後要做的就是把 current link 抽換成 laravel-app-ver-02

然後就可以砍掉 laravel-app-ver01 了

// 不知道為什麼 overwrite 的時候要反過來...
// 可以觀察到前面的 rules 都是 A -> B 的時候參數順序是 A, B
// 但是當要讓 current -> laravel-app-ver-02 的時候卻是帶 B, A
ln -snf laravel-app-ver-02 current

※ 以上的動作可以直接用 envoyer 做掉,一個月 10美金。

No comments:

Post a Comment