npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ciao-deploy

v3.0.5

Published

A deploy tools base on node.js

Downloads

21

Readme

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 [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屬性下的物件皆為 自訂佈署物件

自訂佈署物件 執行流程

  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