{"id":20718732,"url":"https://github.com/ciao-chung/ciao-deploy","last_synced_at":"2026-05-10T16:08:02.675Z","repository":{"id":33650424,"uuid":"158334669","full_name":"ciao-chung/ciao-deploy","owner":"ciao-chung","description":"個人的環境設定、佈署相關工具","archived":false,"fork":false,"pushed_at":"2022-12-03T01:32:51.000Z","size":11168,"stargazers_count":1,"open_issues_count":18,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-08T05:31:47.244Z","etag":null,"topics":["deployment","nodejs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ciao-chung.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-20T05:17:55.000Z","updated_at":"2020-12-04T08:00:14.000Z","dependencies_parsed_at":"2023-01-15T02:00:58.103Z","dependency_job_id":null,"html_url":"https://github.com/ciao-chung/ciao-deploy","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciao-chung%2Fciao-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciao-chung%2Fciao-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciao-chung%2Fciao-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciao-chung%2Fciao-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ciao-chung","download_url":"https://codeload.github.com/ciao-chung/ciao-deploy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242995878,"owners_count":20218814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deployment","nodejs"],"created_at":"2024-11-17T03:14:32.460Z","updated_at":"2026-05-10T16:07:57.615Z","avatar_url":"https://github.com/ciao-chung.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ciao Deploy\n\n\u003e 個人的環境設定、佈署相關工具\n\n![deploy](https://raw.githubusercontent.com/ciao-chung/ciao-deploy/master/meta/demo.gif)\n\n## 環境需求\n\n- Node.js 8.x up (可以直接執行專案根目錄的nodejs.sh來安裝)\n\n```bash\ncurl -sL https://raw.githubusercontent.com/ciao-chung/ciao-deploy/master/nodejs.sh | bash\n```\n\n## 安裝\n\n```bash\nsudo yarn global add ciao-deploy\n```\n\n## 指令\n\n可執行**ciao-deploy -h**查看所有可用指令\n\n透過 **--command** 參數來選擇要執行的指令\n\n```bash\nciao-deploy --command={command-name}\n```\n\n**可用指令**\n\n- env: 基本環境安裝\n- fish: 安裝Fish Shell\n- php-setup-upload-max-size: 設定PHP最大上傳檔案大小\n- mysql: 安裝MySQL\n- mysql-user-create: 建立MySQL使用者\n- mysql-user-delete: 刪除MySQL使用者\n- mysql-db-create: 建立MySQL DB\n- mysql-db-delete: 刪除MySQL DB\n- backup-db: 透過git repo備份DB\n- apache: 初始化Apache\n- domain-sign: 簽Domain\n- domain-proxy: 簽Proxy Domain\n- domain-delete: 刪除domain\n- ssl: 安裝Let's Encrypt certbot\n- ssl-sign: 簽SSL\n- ssl-delete: 移除SSL\n- workspace: 工作環境設定\n- phpmyadmin: 安裝phpMyAdmin\n- web-deploy: 佈署Web專案(Vue、Laravel)\n- web-deploy-config: 產生Web Deploy設定檔\n- custom-deploy: 自訂佈署\n- setup-deploy-env: 一鍵設定本機端佈署環境\n- setup-remote-env: 一鍵設定遠端Web佈署環境\n\n### 基本環境安裝(env)\n\n**參數**\n\n- base(optional): Boolean, 安裝\n- php(optional): Boolean, 安裝php7.1及相關extension\n- phpgearman(optional): Boolean, 安裝php-gearman\n- composer(optional): Boolean, 安裝composer\n\n\n### 設定PHP最大上傳檔案大小(php-setup-upload-max-size)\n\n**參數**\n\n- size(required): String, 設定的大小包含單位, 例如8M\n\n### MySQL相關指令\n\n**安裝MySQL(mysql)參數**\n\n- password(required): String, 安裝MySQL的Root密碼\n\n**建立MySQL使用者(mysql-user-create)參數**\n\n- rootPassword(required): String, MySQL的Root密碼\n- username(required): String, 使用者帳號\n- password(required): String, 使用者密碼\n\n**刪除MySQL使用者(mysql-user-delete)參數**\n\n- rootPassword(required): String, MySQL的Root密碼\n- username(required): String, 使用者帳號\n\n**刪除MySQL DB(mysql-db-create)參數**\n\n- rootPassword(required): String, MySQL的Root密碼\n- db(required): String, 資料庫名稱\n\n**建立MySQL DB(mysql-db-delete)參數**\n\n- rootPassword(required): String, MySQL的Root密碼\n- db(required): String, 資料庫名稱\n\n### 透過git repo備份DB(backup-db)\n\n**參數**\n\n- username(required): String, MySQL使用者帳號\n- password(required): String, MySQL使用者密碼\n- db(required): Array, 要備份的DB名稱, 使用逗號區隔(ex: --db=db_1,db_2,db_3)\n- repo(required): String, Git Repository\n\n**範例**\n\n```bash\nciao-deploy --command=backup-db --db=db_1,db_2,db_3 --repo=git@repo.git --username=username --password=password\n```\n\n### Domain相關指令\n\ndomain-proxy\n\n**簽Domain(domain-sign)參數**\n\n- domain(required): String, Web Domain\n- path(required): String, Web資料夾\n\n**簽Proxy Domain(domain-proxy)參數**\n\n- domain(required): String, Web Domain\n- port(required): String, 要轉的port\n\n**移除Domain(domain-delete)參數**\n\n- domain(required): String, Web Domain\n\n### SSL相關指令\n\n**簽SSL(ssl-sign)參數**\n\n- domain(required): String, Web Domain\n- email(required): String, Certbot要設定憑證過期前通知的email\n\n**移除SSL(ssl-delete)參數**\n\n- domain(required): String, Web Domain\n\n### 安裝phpMyAdmin(phpmyadmin)\n\n**參數**\n\n- password(required): String, 安裝MySQL的Root密碼\n\n### 工作環境設定(workspace)\n\n**參數**\n\n以下參數皆為Boolean格式\n\n- base(optional): Boolean, 安裝基本工具(gnome-disk-utility、apidoc、openvpn)\n- chrome(optional): Boolean, 安裝Google Chrome\n- desktop(optional): Boolean, 設定桌面Soft Link\n- dolphin(optional): Boolean, 設定Dolphin檔案管理 \n- media(optional): Boolean, 安裝多媒體相關工具\n- ngrok(optional): Boolean, 安裝Ngrok\n- phpstorm(optional): Boolean, 安裝PHP Storm\n- record(optional): Boolean, 安裝螢幕錄影工具\n- unetbootin(optional): Boolean, 安裝Unetbootin\n- dbeaver(optional): Boolean, 安裝DBeaver\n- all(optional): Boolean, 全部設定、安裝\n\n### 一鍵設定本機端佈署環境(setup-deploy-env)\n\n此指令將自動執行下列指令, 請斟酌情境使用\n\n- fish\n- env\n- apache\n\n### 一鍵設定遠端Web佈署環境(setup-remote-env)\n\n此指令將自動執行下列指令, 請斟酌情境使用\n\n- fish\n- env\n- apache\n- mysql\n- ssl\n\n**參數**\n\n- mysqlRootPassword(required): String, 安裝MySQL的Root密碼\n\n## Web Deploy(web-deploy)設定\n\n### 本機端環境需求\n\n\u003e 可直接透過 ciao-deploy --command=setup-deploy-env 來一鍵設定本機端佈署環境\n\n- Node.js 8.x up\n- Yarn\n- PHP 7.1 up\n- Composer\n\n### command參數\n\n- dump(optional): Boolean, 查看deploy設定檔內容(不會執行佈署)\n- first(optional): Boolean, 第一次佈署, 會另外執行下列的初始化動作\n  - 如果有佈署後端會執行 **php artisan storage:link** 建立storage link\n- config(required): String, 佈署設定檔絕對路徑\n\n### Web佈署設定檔說明\n\n**範例(app/copyfile/config.example.yml)**\n\n```yaml\ndeploy:\n    source:\n        branch: master\n        repo: repo\n    target:\n        frontend:\n            folder: Frontend\n            user: ciao\n            host: remote.host\n            path: /path/to/frontend\n            apibase: https://api.example.com\n            before_build:\n                - 'pwd'\n            build_script: 'yarn build --doc --doc_exclude=BackStage'\n        backend:\n            folder: Backend\n            user: ciao\n            host: remote.host\n            path: /path/to/frontend\n            migrate: true\n            env:\n                APP_KEY: APP_KEY\n                APP_DEBUG: false\n                DB_DATABASE: db_name\n                DB_USERNAME: mysql_user\n                DB_PASSWORD: mysql_password\n                CORS: 'https://webcache.googleusercontent.com,http://localhost:8080,https://example.com'\n                PHOTO_BASE_URL: http://exmpale.com/storage\n            cron:\n                name: demo-laravel-project\n                user: ciao\n            queue:\n                appName: laravel-project-queue \n```\n\n#### source(程式碼來源)\n\n\u003e required\n \n- repo(required): String, git來源\n- branch(optional): String, 要佈署的分支, 預設為master\n\n#### target -\u003e frontend(前端)\n\n\u003e optional\n \n- folder(optional): String, 前端資料夾名稱, 預設為Frontend\n- user(required): String, 主機登入帳號\n- host(required): String, 主機位址\n- path(required): String, 主機要rsync位置(絕對路徑)\n- apibase(required): String, 前端apibase\n- before_build(optional): Array, 一些Webpack安裝、打包之前要做的事情(例如寫一些前端需要的設定檔), 可以在這邊做\n- build_script(required): String, 因為各種前端打包的方式太多種, 直接在這裡設定\n\n#### target -\u003e backend(後端)\n\n\u003e optional\n \n- folder(optional): String, 前端資料夾名稱, 預設為Frontend\n- user(required): String, 主機登入帳號\n- host(required): String, 主機位址\n- path(required): String, 主機要rsync位置(絕對路徑)\n- migrate(optional): Boolean, 佈署完成後自動執行migrate, 預設為false\n- env(optional): Object, 要設定的Laravel .env參數, 使用此參數的後端專案需安裝imliam/laravel-env-set-command\n- cron(optional): 自動設定laravel排程, 原理是在/etc/cron.d/中新增一個cron job\n  檔案, 必須設定下列屬性\n  - name(required): 排程檔案名稱(在/etc/crod.d下的排程檔案檔名), 每個專案必須不同否則會被覆蓋或刪除\n  - user(required): 執行排程的身份, 也就是寫cronjob內的user\n- queue(optional): 透過pm2背景執行laravel queue worker\n  - appName(required): 顯示在pm2的app name \n\n## 自訂佈署(custom-deploy)設定\n\n### command參數\n\n- dump(optional): Boolean, 查看deploy設定檔內容(不會執行佈署)\n- first(optional): Boolean, 定義為第一次佈署, 在對遠端主機操作(remote.execute)之前會先執行下方設定檔中的**first_execute**指令\n- config(required): String, 佈署設定檔絕對路徑\n\n### 自訂佈署設定檔說明\n\n\u003e 情境: 從無到有建立一個SSR服務\n\n**範例(app/copyfile/custom-deploy.example.yml)**\n\n```yaml\ndeploy:\n    init:\n        description: '初始化環境'\n        remote:\n            user: ciao\n            host: host.com\n            first_execute:\n                - 'curl -sL https://raw.githubusercontent.com/ciao-chung/ciao-deploy/master/nodejs.sh | bash'\n                - 'sudo yarn global add ciao-deploy'\n                - 'ciao-deploy --command=fish'\n                - 'ciao-deploy --command=apache'\n                - 'ciao-deploy --command=ssl'\n    ssr:\n        description: '佈署SSR服務'\n        execute:\n            - 'cp /path/to/ssr.config ./ssr.json'\n        remote:\n            rsync: true\n            user: ciao\n            host: host.com\n            path: /home/ciao/config\n            first_execute:\n                - 'sudo yarn global add ciao-ssr'\n                - 'ciao-deploy --command=workspace --chrome'\n                - 'find /usr/local/share/.config/yarn/global/node_modules/puppeteer/.local-chromium -type d | xargs -L1 -Ixx sudo chmod 755 xx'\n                - 'find /usr/local/share/.config/yarn/global/node_modules/puppeteer/.local-chromium -type f -perm /u+x | xargs -L1 -Ixx sudo chmod 755 xx'\n                - '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'\n                - 'ciao-deploy --command=domain-proxy --domain=ssr.foo.com --port=3000'\n                - 'ciao-deploy --command=ssl-sign --domain=ssr.foo.com --email=foobar@gmail.com'\n                - 'mkdir -p /home/ciao/ssr-cache'\n            execute:\n                - 'sudo pm2 unstartup'\n                - 'sudo pm2 delete ssr'\n                - 'sudo pm2 start ciao-ssr --name=\"ssr\" -- --config=/home/ciao/config/ssr.json'\n                - 'sudo pm2 startup'\n                - 'sudo pm2 save'\n\n```\n\n在deploy屬性下的物件皆為 **自訂佈署物件**\n\n    \n**自訂佈署物件** 執行流程\n\n1. 依照為每個佈署建立一個暫存資料夾當作工作空間( **自訂佈署物件** 的key當作資料夾名稱)\n1. 先執行**execute**中的指令(如果有設定execute的話)\n1. 執行rsync, 將暫存資料夾中的檔案做rsync(如果有設定rsync的話)\n1. 執行remote中的**first_execute**中的遠端主機指令(如果有設定remote.first_execute的話)\n1. 執行remote中的**execute**中的遠端主機指令(如果有設定remote.execute的話)\n1. 繼續執行下一個 **自訂佈署物件** , 如果是最後一個就清空所有暫存資料夾\n\n\n以下為 **自訂佈署物件** 說明\n\n- description(optional): String, 該佈署說明, 單純在Terminal中顯示用\n- execute(optional): Array, 本機端的操作, 可作為準備rsync檔案的準備指令或其他操作\n- remote(optional): Object, 遠端主機操作物件, 主要設定對遠端主機的操作、rsync\n    - user(required): String, 遠端主機登入帳號\n    - host(required): String, 遠端主機登入位址\n    - rsync(optional): Boolean, 將前面暫存資料夾內的所有檔案做rsync,預設為false\n    - path(optional): String, rsync到遠端的路徑\n    - first_execute(optional): Array, 首次佈署需要執行的遠端主機指令, 當執行自訂佈署時使用**--first**參數將會執行\n    - execute(optional): Array, 佈署需要執行的遠端主機指令, 每次佈署皆會執行\n    \n### Multi Server架構\n\n\u003e 適合多台主機需要佈署時使用\n\n**先執行web-deploy指令使用純打包模式**\n\n****\n```bash\n\n# 使用web-deploy指令的buildOnlyPath選項打包後的路徑\nciao-deploy --command=web-deploy \\\n    --config=/path/to/config.yml \\\n    --buildOnlyPath /home/site/project/\n\n# 使用rsync-multi指定前面打包完成的路徑\nciao-deploy --command=rsync-multi \\\n    --config=/path/to/config.yml \\\n    --source=/home/site/project/\n```\n\n**多台Server的設定檔YAML範例**\n\n```yaml\ndeploy:\n    source:\n        branch: master\n        repo: repo\n    target:\n        backend:\n            folder: Backend\n            user: ciao\n            host: remote.host\n            path: /path/to/frontend\n            cron:\n                name: demo-laravel-project\n                user: ciao\n            queue:\n                appName: laravel-project-queue\n    rsync:\n        rules:\n            -\n                #  master server\n                backend:\n                    folder: Backend\n                    user: ciao\n                    host: remote.host\n                    path: /path/to/frontend\n                    cron:\n                        name: demo-laravel-project\n                        user: ciao\n                    queue:\n                        appName: laravel-project-queue\n            -\n                # slave server不需要設定cron job\n                backend:\n                    folder: Backend\n                    user: ciao\n                    host: remote.host\n                    path: /path/to/frontend\n                    queue:\n                        appName: laravel-project-queue\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciao-chung%2Fciao-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fciao-chung%2Fciao-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciao-chung%2Fciao-deploy/lists"}