lfk29m-deploy

3.0.2 • Public • Published

Ciao Deploy

個人的環境設定、佈署相關工具

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 --repo=git@repo.git --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=foobar@gmail.com'
                - '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屬性下的物件皆為 自訂佈署物件

自訂佈署物件 執行流程

  1. 依照為每個佈署建立一個暫存資料夾當作工作空間( 自訂佈署物件 的key當作資料夾名稱)
  2. 先執行execute中的指令(如果有設定execute的話)
  3. 執行rsync, 將暫存資料夾中的檔案做rsync(如果有設定rsync的話)
  4. 執行remote中的first_execute中的遠端主機指令(如果有設定remote.first_execute的話)
  5. 執行remote中的execute中的遠端主機指令(如果有設定remote.execute的話)
  6. 繼續執行下一個 自訂佈署物件 , 如果是最後一個就清空所有暫存資料夾

以下為 自訂佈署物件 說明

  • 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

Readme

Keywords

none

Package Sidebar

Install

npm i lfk29m-deploy

Weekly Downloads

0

Version

3.0.2

License

MIT

Unpacked Size

6.12 MB

Total Files

110

Last publish

Collaborators

  • lfk29m