ciao-deploy
v3.0.5
Published
A deploy tools base on node.js
Downloads
21
Readme
Ciao Deploy
個人的環境設定、佈署相關工具
環境需求
- Node.js 8.x up (可以直接執行專案根目錄的nodejs.sh來安裝)
curl -sL https://raw.githubusercontent.com/ciao-chung/ciao-deploy/master/nodejs.sh | bash
安裝
sudo yarn global add ciao-deploy
指令
可執行ciao-deploy -h查看所有可用指令
透過 --command 參數來選擇要執行的指令
ciao-deploy --command={command-name}
可用指令
- env: 基本環境安裝
- fish: 安裝Fish Shell
- php-setup-upload-max-size: 設定PHP最大上傳檔案大小
- mysql: 安裝MySQL
- mysql-user-create: 建立MySQL使用者
- mysql-user-delete: 刪除MySQL使用者
- mysql-db-create: 建立MySQL DB
- mysql-db-delete: 刪除MySQL DB
- backup-db: 透過git repo備份DB
- apache: 初始化Apache
- domain-sign: 簽Domain
- domain-proxy: 簽Proxy Domain
- domain-delete: 刪除domain
- ssl: 安裝Let's Encrypt certbot
- ssl-sign: 簽SSL
- ssl-delete: 移除SSL
- workspace: 工作環境設定
- phpmyadmin: 安裝phpMyAdmin
- web-deploy: 佈署Web專案(Vue、Laravel)
- web-deploy-config: 產生Web Deploy設定檔
- custom-deploy: 自訂佈署
- setup-deploy-env: 一鍵設定本機端佈署環境
- setup-remote-env: 一鍵設定遠端Web佈署環境
基本環境安裝(env)
參數
- base(optional): Boolean, 安裝
- php(optional): Boolean, 安裝php7.1及相關extension
- phpgearman(optional): Boolean, 安裝php-gearman
- composer(optional): Boolean, 安裝composer
設定PHP最大上傳檔案大小(php-setup-upload-max-size)
參數
- size(required): String, 設定的大小包含單位, 例如8M
MySQL相關指令
安裝MySQL(mysql)參數
- password(required): String, 安裝MySQL的Root密碼
建立MySQL使用者(mysql-user-create)參數
- rootPassword(required): String, MySQL的Root密碼
- username(required): String, 使用者帳號
- password(required): String, 使用者密碼
刪除MySQL使用者(mysql-user-delete)參數
- rootPassword(required): String, MySQL的Root密碼
- username(required): String, 使用者帳號
刪除MySQL DB(mysql-db-create)參數
- rootPassword(required): String, MySQL的Root密碼
- db(required): String, 資料庫名稱
建立MySQL DB(mysql-db-delete)參數
- rootPassword(required): String, MySQL的Root密碼
- db(required): String, 資料庫名稱
透過git repo備份DB(backup-db)
參數
- username(required): String, MySQL使用者帳號
- password(required): String, MySQL使用者密碼
- db(required): Array, 要備份的DB名稱, 使用逗號區隔(ex: --db=db_1,db_2,db_3)
- repo(required): String, Git Repository
範例
ciao-deploy --command=backup-db --db=db_1,db_2,db_3 [email protected] --username=username --password=password
Domain相關指令
domain-proxy
簽Domain(domain-sign)參數
- domain(required): String, Web Domain
- path(required): String, Web資料夾
簽Proxy Domain(domain-proxy)參數
- domain(required): String, Web Domain
- port(required): String, 要轉的port
移除Domain(domain-delete)參數
- domain(required): String, Web Domain
SSL相關指令
簽SSL(ssl-sign)參數
- domain(required): String, Web Domain
- email(required): String, Certbot要設定憑證過期前通知的email
移除SSL(ssl-delete)參數
- domain(required): String, Web Domain
安裝phpMyAdmin(phpmyadmin)
參數
- password(required): String, 安裝MySQL的Root密碼
工作環境設定(workspace)
參數
以下參數皆為Boolean格式
- base(optional): Boolean, 安裝基本工具(gnome-disk-utility、apidoc、openvpn)
- chrome(optional): Boolean, 安裝Google Chrome
- desktop(optional): Boolean, 設定桌面Soft Link
- dolphin(optional): Boolean, 設定Dolphin檔案管理
- media(optional): Boolean, 安裝多媒體相關工具
- ngrok(optional): Boolean, 安裝Ngrok
- phpstorm(optional): Boolean, 安裝PHP Storm
- record(optional): Boolean, 安裝螢幕錄影工具
- unetbootin(optional): Boolean, 安裝Unetbootin
- dbeaver(optional): Boolean, 安裝DBeaver
- all(optional): Boolean, 全部設定、安裝
一鍵設定本機端佈署環境(setup-deploy-env)
此指令將自動執行下列指令, 請斟酌情境使用
- fish
- env
- apache
一鍵設定遠端Web佈署環境(setup-remote-env)
此指令將自動執行下列指令, 請斟酌情境使用
- fish
- env
- apache
- mysql
- ssl
參數
- mysqlRootPassword(required): String, 安裝MySQL的Root密碼
Web Deploy(web-deploy)設定
本機端環境需求
可直接透過 ciao-deploy --command=setup-deploy-env 來一鍵設定本機端佈署環境
- Node.js 8.x up
- Yarn
- PHP 7.1 up
- Composer
command參數
- dump(optional): Boolean, 查看deploy設定檔內容(不會執行佈署)
- first(optional): Boolean, 第一次佈署, 會另外執行下列的初始化動作
- 如果有佈署後端會執行 php artisan storage:link 建立storage link
- config(required): String, 佈署設定檔絕對路徑
Web佈署設定檔說明
範例(app/copyfile/config.example.yml)
deploy:
source:
branch: master
repo: repo
target:
frontend:
folder: Frontend
user: ciao
host: remote.host
path: /path/to/frontend
apibase: https://api.example.com
before_build:
- 'pwd'
build_script: 'yarn build --doc --doc_exclude=BackStage'
backend:
folder: Backend
user: ciao
host: remote.host
path: /path/to/frontend
migrate: true
env:
APP_KEY: APP_KEY
APP_DEBUG: false
DB_DATABASE: db_name
DB_USERNAME: mysql_user
DB_PASSWORD: mysql_password
CORS: 'https://webcache.googleusercontent.com,http://localhost:8080,https://example.com'
PHOTO_BASE_URL: http://exmpale.com/storage
cron:
name: demo-laravel-project
user: ciao
queue:
appName: laravel-project-queue
source(程式碼來源)
required
- repo(required): String, git來源
- branch(optional): String, 要佈署的分支, 預設為master
target -> frontend(前端)
optional
- folder(optional): String, 前端資料夾名稱, 預設為Frontend
- user(required): String, 主機登入帳號
- host(required): String, 主機位址
- path(required): String, 主機要rsync位置(絕對路徑)
- apibase(required): String, 前端apibase
- before_build(optional): Array, 一些Webpack安裝、打包之前要做的事情(例如寫一些前端需要的設定檔), 可以在這邊做
- build_script(required): String, 因為各種前端打包的方式太多種, 直接在這裡設定
target -> backend(後端)
optional
- folder(optional): String, 前端資料夾名稱, 預設為Frontend
- user(required): String, 主機登入帳號
- host(required): String, 主機位址
- path(required): String, 主機要rsync位置(絕對路徑)
- migrate(optional): Boolean, 佈署完成後自動執行migrate, 預設為false
- env(optional): Object, 要設定的Laravel .env參數, 使用此參數的後端專案需安裝imliam/laravel-env-set-command
- cron(optional): 自動設定laravel排程, 原理是在/etc/cron.d/中新增一個cron job
檔案, 必須設定下列屬性
- name(required): 排程檔案名稱(在/etc/crod.d下的排程檔案檔名), 每個專案必須不同否則會被覆蓋或刪除
- user(required): 執行排程的身份, 也就是寫cronjob內的user
- queue(optional): 透過pm2背景執行laravel queue worker
- appName(required): 顯示在pm2的app name
自訂佈署(custom-deploy)設定
command參數
- dump(optional): Boolean, 查看deploy設定檔內容(不會執行佈署)
- first(optional): Boolean, 定義為第一次佈署, 在對遠端主機操作(remote.execute)之前會先執行下方設定檔中的first_execute指令
- config(required): String, 佈署設定檔絕對路徑
自訂佈署設定檔說明
情境: 從無到有建立一個SSR服務
範例(app/copyfile/custom-deploy.example.yml)
deploy:
init:
description: '初始化環境'
remote:
user: ciao
host: host.com
first_execute:
- 'curl -sL https://raw.githubusercontent.com/ciao-chung/ciao-deploy/master/nodejs.sh | bash'
- 'sudo yarn global add ciao-deploy'
- 'ciao-deploy --command=fish'
- 'ciao-deploy --command=apache'
- 'ciao-deploy --command=ssl'
ssr:
description: '佈署SSR服務'
execute:
- 'cp /path/to/ssr.config ./ssr.json'
remote:
rsync: true
user: ciao
host: host.com
path: /home/ciao/config
first_execute:
- 'sudo yarn global add ciao-ssr'
- 'ciao-deploy --command=workspace --chrome'
- 'find /usr/local/share/.config/yarn/global/node_modules/puppeteer/.local-chromium -type d | xargs -L1 -Ixx sudo chmod 755 xx'
- 'find /usr/local/share/.config/yarn/global/node_modules/puppeteer/.local-chromium -type f -perm /u+x | xargs -L1 -Ixx sudo chmod 755 xx'
- 'find /usr/local/share/.config/yarn/global/node_modules/puppeteer/.local-chromium -type f -not -perm /u+x | xargs -L1 -Ixx sudo chmod 644 xx'
- 'ciao-deploy --command=domain-proxy --domain=ssr.foo.com --port=3000'
- 'ciao-deploy --command=ssl-sign --domain=ssr.foo.com [email protected]'
- 'mkdir -p /home/ciao/ssr-cache'
execute:
- 'sudo pm2 unstartup'
- 'sudo pm2 delete ssr'
- 'sudo pm2 start ciao-ssr --name="ssr" -- --config=/home/ciao/config/ssr.json'
- 'sudo pm2 startup'
- 'sudo pm2 save'
在deploy屬性下的物件皆為 自訂佈署物件
自訂佈署物件 執行流程
- 依照為每個佈署建立一個暫存資料夾當作工作空間( 自訂佈署物件 的key當作資料夾名稱)
- 先執行execute中的指令(如果有設定execute的話)
- 執行rsync, 將暫存資料夾中的檔案做rsync(如果有設定rsync的話)
- 執行remote中的first_execute中的遠端主機指令(如果有設定remote.first_execute的話)
- 執行remote中的execute中的遠端主機指令(如果有設定remote.execute的話)
- 繼續執行下一個 自訂佈署物件 , 如果是最後一個就清空所有暫存資料夾
以下為 自訂佈署物件 說明
- description(optional): String, 該佈署說明, 單純在Terminal中顯示用
- execute(optional): Array, 本機端的操作, 可作為準備rsync檔案的準備指令或其他操作
- remote(optional): Object, 遠端主機操作物件, 主要設定對遠端主機的操作、rsync
- user(required): String, 遠端主機登入帳號
- host(required): String, 遠端主機登入位址
- rsync(optional): Boolean, 將前面暫存資料夾內的所有檔案做rsync,預設為false
- path(optional): String, rsync到遠端的路徑
- first_execute(optional): Array, 首次佈署需要執行的遠端主機指令, 當執行自訂佈署時使用**--first**參數將會執行
- execute(optional): Array, 佈署需要執行的遠端主機指令, 每次佈署皆會執行
Multi Server架構
適合多台主機需要佈署時使用
先執行web-deploy指令使用純打包模式
# 使用web-deploy指令的buildOnlyPath選項打包後的路徑
ciao-deploy --command=web-deploy \
--config=/path/to/config.yml \
--buildOnlyPath /home/site/project/
# 使用rsync-multi指定前面打包完成的路徑
ciao-deploy --command=rsync-multi \
--config=/path/to/config.yml \
--source=/home/site/project/
多台Server的設定檔YAML範例
deploy:
source:
branch: master
repo: repo
target:
backend:
folder: Backend
user: ciao
host: remote.host
path: /path/to/frontend
cron:
name: demo-laravel-project
user: ciao
queue:
appName: laravel-project-queue
rsync:
rules:
-
# master server
backend:
folder: Backend
user: ciao
host: remote.host
path: /path/to/frontend
cron:
name: demo-laravel-project
user: ciao
queue:
appName: laravel-project-queue
-
# slave server不需要設定cron job
backend:
folder: Backend
user: ciao
host: remote.host
path: /path/to/frontend
queue:
appName: laravel-project-queue