zzxia-op-super-invincible-lollipop (for short: Lollipop)
中文名:豬豬俠之運維超級無敵棒棒糖(簡稱:棒棒糖)
這是一套集環境搭建,項目構建、部署、發佈及周邊的運維工具箱,已在生產環境使用多年。適用docker集羣(k8s、swarm、docker-compose)及Web站點等項目發佈,支持灰度、擴縮容與回滾。這些工具也可以獨立使用,比如項目構建、部署發佈、Webhook server、dns修改、服務器登錄異常警報、數據庫備份歸檔與還原、表格繪製、申請與續簽(泛)域名證書等等,具體參考幫助。如果你在使用中遇到任何問題請在Issues中提出,或留下聯繫方式線下溝通,或直接加wx:zzxia_ggbond ,加好友時請註明你來自哪個平台!。
項目地址:https://gitee.com/zhf_sy/zzxia-op-super-invincible-lollipop
[toc]
1 介紹
這是一套集環境搭建,項目構建、部署、發佈及周邊的運維工具箱。適用docker集羣(k8s、swarm、docker-compose)及Web站點等項目發佈,支持灰度、擴縮容與回滾。這些工具也可以獨立使用,比如項目構建、部署發佈、Webhook server、dns修改、服務器登錄異常警報、數據庫備份歸檔與還原、表格繪製、申請與續簽(泛)域名證書等等,具體參考幫助。如果你在使用中遇到任何問題請在Issues中提出,或留下聯繫方式線下溝通,或直接加wx:zzxia_ggbond ,加好友時請註明你來自哪個平台!。
1.1 特點
- 項目構建:可以指定構建方法、輸出方法、一鍵發佈方式等(也可以使用自帶的python鈎子程序或Jenkins等外部鈎子程序調用腳本實現自動化構建發佈)。
- 發佈環境:支持多種docker容器編排:k8s、swarm、docker-compose(市面主流工具只支持k8s);支持多種集羣與多集羣並存;支持目錄式發佈,例如nginx等。
- 項目發佈:可以指定發佈相關的所有參數與變量,這個參數變量可以是全局的,也可以是某一項目專有的,這裏包括但不限於服務運行參數、變量、端口、副本數、Java運行參數變量,容器變量、容器啓動命令參數,命名空間 、主機名等。只需要修改項目發佈清單就可以搞定所有項目,方便快捷(不同於一般系統那種每個項目都是一個獨立配置文件,難以批量修改,與主流helm工具大相徑庭,俗話説:不是同一個科技樹)。
- 多環境統一配置,極大降低環境差異造成的參數差異隱患。
- 所有微服務在同一個表格中完成配置,非常方便對比差異與增加,和主流helm使用了完全相反的實現理念。
- 結果輸出界面美觀清晰,有表格及顏色區分,也包含耗時、進度條與郵箱手機消息通知。
- 標準化錯誤輸出,通過錯誤消息及代碼,可以輕鬆知道問題所在。
- shell語言,模塊化編碼,使得每個人可以輕鬆的增加自己的專屬功能。shell語言還帶來的好處是極少存在版本升級帶來的運行異常問題,也不挑Linux版本(極少功能使用Python實現)。
1.2 適用條件
- 適用於基於微服務docker集羣架構與或nginx前端。主要提供java、node語言類別項目(其他語言項目也可以,只需添加相關語言模塊即可,這很簡單,只是構建命令不一樣而已,其他大同小異)。
- 特別適用於的中小團隊,腳本命令使用超簡單,可以實現你想要的任意構建與發佈要求,幫助齊全,也可以把這些代碼集成到你的CI/CD中(比如Jenkins),實現標準化管理,對於大團隊也可以輕鬆嵌入到現有CI/CD系統中。
- 從開發層面:使用不固定分支發佈代碼,使用高度可選擇的發佈項目、發佈時間、發佈參數,比如:隨意發佈某項目、某分支、跳過測試、無更新強制發佈、構建日誌與結果通知方式、開發自助等。也可以一個簡且短的命令對所有項目進行檢查更新與構建發佈。日常常規使用只需根據自己設置的默認參數構建發佈,構建發佈命令非常簡短,無需輸入命令參數。
- 從CI/CD層面:可能很多團隊在使用Jenkins或gitlab等實現全自動構建發佈或手動選擇項目及參數進行構建與發佈,如果你在使用全自動化方式(大團隊標配),則建議你保持,無需考慮使用本項目(當然:也可以把此項目嵌入到你的流水線系統,這樣不需要自己寫發佈代碼);如果你沒有實現全自動化,而是讓開發人員在網頁上用鼠標點選項目與參數實現構建發佈,則強烈建議使用本項目。我們知道,在微服務架構下,隨便都是幾十上百,甚至幾百上千的項目,如果沒有全自動化,在網頁上點擊要發佈的項目真是折磨,這比使用本項目腳本發佈會慢很多很多,時間就是頭髮。另外:即便你在開發測試環境使用全自動化構建發佈,但在生產環境也較少使用全自動化發佈,仍然需要手動發佈或觸發發佈,那麼你嵌入此項目將是一個不錯的選擇。使用此項目,初期開發人員可能會根據過往經驗牴觸這種發佈方式,當他們用久了就會喜歡上這種發佈方式,因為這種掌控感會讓他們欲罷不能。
- 從運維層面:通過腳本初始化環境,無需手動進行,添加新項目時,只需維護envs中的清單及相關定製化變量即可,無需大動干戈。可能有些人喜歡一個項目維護一個或幾個靜態配置文件,如果有多個項目需要修改時,就需要修改一大批文件,這會很低效,而在這裏,把所有項目參數都集中項目清單中(表格),只需要修改兩三個個配置文清單文件即可,開發人員可以自行完成構建發佈(開發測試環境),無需運維在場,構建發佈一條命令搞定,消息自動提醒,發佈態勢運維可隨時掌控,省心省力。另外shell腳本不像其他,運維人都會shell語言編程,可以根據自己的需要定製,而且這些腳本都是模塊化的,而且關鍵點都有註釋,自己修改也很容易。一切盡在掌握,這是運維人的終極追求,不是嗎?
1.3 功能
- 環境搭建:這個對於每個公司可能會有所不同,但大同小異,自己調整或用其他方式搭建。
- 參數初始化:初始化環境,為構建發佈做準備。
- nginx項目配置初始化:根據參數文件初始化項目目錄、配置文件(http|https、端口、運行方式、後端端口、附加配置等),自動添加修改域名A記錄,自動申請https證書(我放在集羣外,也可以放在集羣內)
- 項目構建:對Java、Node、Dockerfile等項目進行構建打包,提供了豐富的構建參數供選擇,比如:並行、分支、靜默、強制、測試、(代碼審查)、郵件、釘釘、微信
- 項目發佈docker-service:提供列表、創建、刪除、回滾、更新、縮擴容、鏡像版本、狀態、明細等功能
- 項目發佈nginx:提供項目列表、發佈上線、項目回滾
- 項目構建發佈:一鍵構建發佈功能,提供有豐富參數選擇,但默認也是最好的選擇
1.4 喜歡她,就滿足她:
- 【Star】她,讓她看到你是愛她的;
- 【Watching】她,時刻感知她的動態;
- 【Fork】她,為她增加新功能,修Bug,讓她更加卡哇伊;
- 【Issue】她,告訴她有哪些小脾氣,她會改的,手動小綿羊;
- 【打賞】她,為她買jk;
2 軟件架構
2.1 代碼語言
- Linux shell
- Python
2.2 關係圖
2.3 功能與依賴
2.3.1 構建工具(build.sh;build-parallel.sh;gogogo.sh)
| 序號 | 類別 | 構建方法 | 輸出方法 | 必要軟件環境 |
|---|---|---|---|---|
| 1 | product | NONE | NONE | |
| 2 | docker_image_push | docker;docker倉庫 | ||
| 3 | Dockerfile | docker_build | NONE | docker |
| 4 | docker_image_push | docker;docker倉庫 | ||
| 5 | Java | mvn_package或gradle | NONE | java_jdk;maven或gradle |
| 6 | deploy_war | java_jdk;maven或gradle | ||
| 7 | deploy_jar_to_repo | java_jdk;maven或gradle;maven倉庫 | ||
| 8 | docker_image_push | java_jdk;maven或gradle;docker;docker倉庫 | ||
| 9 | Node | npm_install | NONE | node;npm |
| 10 | docker_image_push | node;npm;docker;docker倉庫 | ||
| 11 | npm_build | direct_deploy | node;npm | |
| 12 | docker_image_push | node;npm;docker;docker倉庫 | ||
| 13 | 自定義 | 自定義 | 自定義 | 自定義 |
gogogo.sh是自動化構建+發佈工具
2.3.2 發佈工具(docker-cluster-service-deploy.sh;web-release.sh;gogogo.sh)
| 序號 | 類別 | 部署類型 | 必要軟件環境 |
|---|---|---|---|
| 1 | docker-cluster-service-deploy.sh | swarm | docker;swarm |
| 2 | k8s | docker;k8s | |
| 3 | docker-compose | docker;docker-compose | |
| 4 | web-release.sh | nginx或其他web服務器 | nginx或其他web服務器 |
| 5 | gogogo.sh | 上面所有類型(構建+發佈) | build.sh;docker-cluster-service-deploy.sh;web-release.sh |
2.3.3 其他工具
| 序號 | 腳本 | 用途 | 必要軟件環境 |
|---|---|---|---|
| 1 | deploy/docker-image-search.sh | 從私有docker倉庫搜索docker鏡像 | docker;docker倉庫 |
| 2 | deploy/docker-tag-push.sh | 推送docker鏡像到私有docker倉庫 | docker;docker倉庫 |
| 3 | op/aliyun-dns.sh | 用阿里雲dns做解析的域名修改工具 | 阿里雲CLI;阿里雲dns |
| 4 | tools/godaddy-dns.sh | 用Godaddy dns做解析的域名修改工具 | curl;godaddy |
| 5 | tools/cert-letsencrypt-wildcart.sh | 在Let'sencrypt上申請泛域名證書 | certbot |
| 6 | tools/send_mail.sh | 發送郵件 | mailx;郵件服務器賬號 |
| 7 | tools/dingding_conver_to_markdown_list.sh | 發送釘釘消息 | python;釘釘機器人 |
| 8 | tools/format_table.sh | 格式化表格 | awk |
| 9 | tools/draw_table.sh | 嚴格格式化表格 | awk |
| 10 | init/1-sshkey-copy.sh | 免密登錄 | sshpass |
| 11 | init/send_login_alert_msg.sh | 發送用户登錄警報消息 | python;釘釘機器人 |
| 12 | init/send_mail_attach_my_log.sh | 發送自定義日誌到郵箱 | mailx;郵件服務器賬號 |
| 13 | init/nginx-config/nginx-cert-letsencrypt-a.sh | 在Let'sencrypt上申請A域名證書 | certbot;nginx |
| 14 | init/nginx-config/nginx-root.sh | 創建nginx web站點目錄 | |
| 15 | init/nginx-config/nginx-conf.sh | 創建nginx配置文件 | nginx |
| 16 | init/nginx-config/nginx-dns.sh | 創建nginx站點域名A記錄 | op/aliyun-dns.sh; op/godaddy-dns.sh |
| 17 | init/nginx-config/web-release-on-nginx.sh | 上線或回滾nginx站點 | nginx |
| 18 | init/pg/backup/pg_backup_or_restore.sh | 備份pg數據庫 | pg |
| 19 | init/pg/backup/pg_list_backup_or_restore.sh | 備份pg數據庫指定清單 | pg |
| 20 | init/webhook/ | webhook前後端 | python3 |
| 21 | 其他 | 略 |
3 安裝
項目運行在Linux系統之上,基本環境安裝部分是基於CentOS,如果你用的是Ubuntu,可是自行修改,或手動安裝。基本運行環境一般自行安裝,每個公司都有自己的特有要求。
3.1 服務器準備
一般配置:
| 服務器類別 | 數量 | 説明 | 例如 |
|---|---|---|---|
| deploy | 1 | 用於構建與發佈、webhook | |
| docker集羣 | 1~n | 根據自己需要 | k8s;swarm;docker-compose |
| nginx | 0~n | 根據自己需要 | 放到集羣也行 |
| db | 0~n | 根據自己需要 | postgresql;mysql |
| docker倉庫 | 0~1 | 根據自己需要 | docker registry |
| maven倉庫 | 0~1 | 根據自己需要 | nexus |
| 代碼倉庫 | 0~1 | 根據自己需要 | gitalb |
3.2 Deploy主機初始化
創世之初
3.2.1 安裝基礎軟件
yum install -y tmux ansible sshpass git python3-pip
3.2.2 克隆項目
克隆項目到deploy主機上,假設【home項目路徑 = ~/zzxia-om-super-invincible-lollipop】
3.3 環境配置文件
環境配置文件是後面項目初始化與運行的基礎。
如果沒有特別説明,以下則皆在目錄【home項目路徑/init】下完成
3.3.1 創建專屬配置文件
基於【home項目路徑/init/envs.sample】示例創建自己的環境變量文件
cp -r home項目路徑/init/envs.sample home項目路徑/init/envs-MyName
請參考【README.md】修改home項目路徑/init/envs-MyName中的配置文件。如果增減了配置文件,也需要同時修改【0-init-envs.sh】腳本文件。
3.3.2 初始化配置配置文件
$ ./00-cp-【0-init-envs.sh】-to-here.sh --help
用法:
sh ./00-cp-【0-init-envs.sh】-to-here.sh [-h|--help]
sh ./00-cp-【0-init-envs.sh】-to-here.sh {Path-To-envs文件目錄} #--- 拷貝envs目錄中的【0-init-envs.sh】到當前目錄
$ ./00-cp-【0-init-envs.sh】-to-here.sh ./envs-MyName
$ ./0-init-envs.sh --help
用法:
sh ./0-init-envs.sh [-h|--help]
sh ./0-init-envs.sh [-r|--rm] #--- 刪除項目環境文件
sh ./0-init-envs.sh [-c|--copy {環境名稱}] <-f|--from {Path-To-envs文件目錄}> #--- 拷貝envs目錄中以【---環境名稱】結尾的文件到指定路徑,比如:【prod|stag|dev|其他任意名稱】
$ ./0-init-envs.sh -c dev -f ./envs-MyName
3.4 SSH登錄配置
如果沒有特別説明,以下則皆在目錄【home項目路徑/init】下完成
3.4.1 登錄跳過RSA key"yes/no"驗證,會話保持
修改配置文件/etc/ssh/ssh_config:
StrictHostKeyChecking no
ServerAliveInterval 60
3.4.2 生成sshkey用於免密登錄
ssh-keygen -C '便於識別的名字'
3.4.3 免密登錄
$ ./1-sshkey-copy.sh --help
用法:./1-sshkey-copy.sh [用户] [密碼] [主機列表文件]
$ ./1-sshkey-copy.sh [用户] [密碼] host-ip.list
3.5 為了減少異常發生,你可能需要關掉一些麻煩
關閉防火牆,略 關閉selinux,略
3.6 安裝base軟件環境
如果沒有特別説明,以下則皆在目錄【home項目路徑/init】下完成
# java、mvn、node(根據需要安裝)
./install-build-envs.sh
# hosts(一般不需要)
ansible-playbook install-hosts.yml
# 一般必須
ansible-playbook install-base.yml
ansible-playbook install-config-base.yml
# reboot 重新裝載變量RUN_ENV
ansible all --become -m shell -a "reboot"
3.7 密碼配置文件
密碼配置文件是後面項目運行的基礎,這些一般不要保存在倉庫中,請放在隱秘的角落,就像小電影一樣。
這些文件都會在構建或發佈的時候被env.sh引入。
如果沒有特別説明,以下則皆在目錄【home項目路徑/init】下完成
3.7.1創建專屬密碼配置文件
基於【home項目路徑/init/my_sec_envs.sample】示例創建自己的密碼配置文件
cp -r home項目路徑/init/my_sec_envs.sample home項目路徑/init/my_sec_envs-MyName
請參考【README.md】修改home項目路徑/init/my_sec-MyName中的配置文件。如果增減了配置文件,也需要同時修改【install-config-my_sec_envs.yml】ansible-playbook文件。
3.7.2 部署密碼配置文件
ansible-playbook install-config-my_sec_envs.yml
3.8 其他周邊軟件
這些軟件不是必須的,請根據自己的需要選擇安裝,也可以自己用其他方式安裝
# docker相關
ansible-playbook install-docker.yml
ansible-playbook install-config-docker.yml
# docker倉庫,你可能用的是harbor
ansible-playbook install-docker_registry.yml
ansible-playbook install-config-docker_registry.yml
# maven倉庫、npm倉庫
ansible-playbook install-nexus.yml
# postgresql
ansible-playbook install-pg.yml
ansible-playbook install-config-pg.yml
# nginx相關
ansible-playbook install-nginx.yml
ansible-playbook install-config-nginx.yml
# 證書相關
ansible-playbook install-certbot.yml
ansible-playbook install-config-certbot.yml
# 其他略
# 根據自己需要安裝
3.9 安裝集羣
請自行安裝(k8s或swarm或docker-compose)
支持多種集羣並行運行,也支持多命名空間或網絡空間
4 配置
【安裝】環節對【環境配置文件】只是簡單帶過,其實這是非常關鍵的一環,所以在這裏對主要配置進行詳細説明
所有的説明都寫在註釋裏或者表頭裏,請一定仔細研讀
文件位置:【home項目路徑/init/envs.sample】
4.1 【env.sh---dev】
【home項目路徑/init/envs.sample/env.sh---dev】
#!/bin/bash
# 0 基本
LOLLIPOP_PLATFORM_NAME="超甜B&D系統" #--- 給本構建發佈系統取個名字
BUILD_LOG_WEBSITE_DOMAIN_A="build-log" #--- 這個需要與【nginx.list】中【項目名】為【build-log】的【域名A記錄】保持一致,一般無需更改此項
ERROR_EXIT='NO' #--- 出錯立即退出,YES|NO
# DEBUG 模式
DEBUG='YES' #--- YES|NO,如果設置DEBUG='YES',則將容器所有內部端口publish出來,一般用於【dev】環境
# Debug模式容器隨機端口範圍
DEBUG_RANDOM_PORT_MIN=45000 #--- 最小
DEBUG_RANDOM_PORT_MAX=49999 #--- 最大
# 根據需要選擇【npm|cnpm】
NPM_BIN='npm'
# 1 Build
## 倉庫及分支
export GIT_REPO_URL_BASE="git@g.zjlh.lan:gc"
#export GIT_REPO_URL_BASE="https://g.zjlh.lan/gc"
export GIT_BRANCH='develop'
## 跳過測試
export BUILD_SKIP_TEST='NO' #--- YES|NO
# 2 Docker集羣相關
## 運行方式
# fuck : 直接執行命令;.
# notfuck : 打印命令到屏幕,自行拷貝執行
export FUCK='notfuck'
## 集羣類型
## ----------------------------------------
## A swarm.
### 遠程管理
#export SWARM_DOCKER_HOST="ssh://root@192.168.11.141:2222"
export SWARM_DOCKER_HOST="tcp://192.168.11.71:2375"
### 基本運行參數
#### 網絡
export SWARM_DEFAULT_NETWORK='onet_1' #--- 默認值,可以在服務清單中指定其他
### docker log driver
export DOCKER_LOG_DRIVER='json-file'
#export DOCKER_LOG_DRIVER='fluentd'
#### Json file
export JSON_LOG_MAX_FILE_SIZES="100m"
export JSON_LOG_MAX_FILES=5
#### Fluentd
#export FLUENTD_SERVER_ADDR="192.168.11.83"
#export FLUENTD_SERVER_PORT="24224"
## ----------------------------------------
## B k8s
export K8S_NAMESAPCE='default' #--- 默認值,可以在服務清單中指定其他
export DOCKER_REPO_SECRET_NAME='my-docker-repo-pw' #--- 請自行創建相關secret
## ----------------------------------------
## C docker-compose
### 網絡
export NETWORK_COMPOSE='net_gc'
## ----------------------------------------
# 3 Build 與 Docker
## 密碼相關 ( *** 存放在【~/.my_sec/*.sec/*.sec】下的文件皆包含密碼,不推薦保存到代碼倉庫 *** )
for FILE in $(find "${HOME}/.my_sec" -type f -name '*.sec')
do
. ${FILE}
done
## Container env(自定義希望注入到docker容器的環境變量)
export CONTAINER_ENVS_PUB_FILE="${HOME}/.my_sec/container-envs-pub.sec"
##############################################################
#
# 以下部分不需要修改
#
# 0 組裝日誌
# https://docs.docker.com/config/containers/logging/configure/
export DOCKER_LOG_PUB="--log-driver=json-file --log-opt max-size=${JSON_LOG_MAX_FILE_SIZES:-100m} --log-opt max-file=${JSON_LOG_MAX_FILES:-5} --log-opt labels=\${SERVICE_NAME}"
#
case "${DOCKER_LOG_DRIVER}" in
gelf)
export DOCKER_LOG_PUB="--log-driver=gelf --log-opt gelf-address=udp://${GELF_SERVER_ADDR}:${GELF_SERVER_PORT:-12201} --log-opt tag=\${SERVICE_NAME}"
;;
fluentd)
export DOCKER_LOG_PUB="--log-driver=fluentd --log-opt fluentd-address=udp://${FLUENTD_SERVER_ADDR}:${FLUENTD_SERVER_PORT:-24224} --log-opt tag=\${SERVICE_NAME}"
;;
json-file)
export DOCKER_LOG_PUB="--log-driver=json-file --log-opt max-size=${JSON_LOG_MAX_FILE_SIZES:-100m} --log-opt max-file=${JSON_LOG_MAX_FILES:-5} --log-opt labels=\${SERVICE_NAME}"
;;
*)
export DOCKER_LOG_PUB="--log-driver=json-file --log-opt max-size=${JSON_LOG_MAX_FILE_SIZES:-100m} --log-opt max-file=${JSON_LOG_MAX_FILES:-5} --log-opt labels=\${SERVICE_NAME}"
;;
esac
4.2 【project.list】
這個是build.sh及gogogo.sh的關鍵配置文件
【home項目路徑/init/envs.sample/project.list】
## 項目清單
###
### 2【類別:LANGUAGE_CATEGORY】= [ product|dockerfile|java|node|自定義 ]
### 1 product :成品
### 2 dockerfile:Dockerfile
### 3 java :Java
### 4 node :Node
###
### 3【項目名:PJ】= [自定義名稱]
###
### 4【構建方法:BUILD_METHOD】= [ NONE | docker_build | java:[mvn_package|gradle|自定義] | node:[original|build|自定義] ]
### 0 類別='*' : NONE : 跳過構建,用【gogogo.sh】時,也會跳過發佈
### 1 類別='product' : NONE : 跳過構建,成品無需構建
### 2 類別='dockerfile' : docker_build : 即docker build
### 3 類別='java' : mvn_package : 即mvn package
### : mvn_deploy : 即mvn deploy
### : gradle : 即gradle ......(沒搞)
### 4 類別='node' : npm_install : npm install
### : npm_build : npm install && npm build
###
### 5【輸出方法:OUTPUT_METHOD】= [ dockerfile:[docker_image_push|NONE] | java:[deploy_war|deploy_jar_to_repo|docker_image_push|NONE] | node:[direct_deploy|docker_image_push|NONE] ]
### 1 類別='product' : docker_image_push : 僅用於推送docker鏡像到docker倉庫
### 2 類別='dockerfile' : docker_image_push : 推送docker鏡像到倉庫
### : NONE : 無需輸出
### 3 類別='java' : deploy_war : 輸出war包(沒搞)
### : deploy_jar_to_repo : 推送jar包到maven倉庫
### : docker_image_push : 推送docker鏡像到倉庫
### : NONE : 無需輸出,比如已經deploy到倉庫等
### 4 類別='node' : direct_deploy : 拷貝輸出文件到nginx_real服務器
### : docker_image_push : 推送docker_image_push鏡像到倉庫
### : NONE : 無需輸出,一般用於前端公共組件項目,供其他項目鏈接用
###
### 6【鏡像名:DOCKER_IMAGE_NAME】= [自定義名稱]
### 當輸出方法='docker_image_push'時,鏡像名不能為空
###
### 7【鏈接node_project:LINK_NODE_PROJECT】= [node_module來源項目名稱]
### 將此node項目中的node_module軟鏈接到當前項目,用以避免重複編碼與重複下載node_module
###
### 8【GOGOGO發佈方式:GOGOGO_RELEASE_METHOD】= [ NONE | docker_cluster | web_release | 自定義 ]
### 注:用【gogogo.sh】腳本自動構建與發佈時使用的參數
### 1 NONE : 無需發佈
### 2 docker_cluster : 用【docker-cluster-service-deploy.sh】發佈
### 3 web_release : 用【web-release.sh】發佈
###
### 9【優先級:PRIORITY】= [ 數字 ]
### 數字越小越優先
###
### ***** 以上種種,都可以自己定義,然後調整相關腳本即可 *****
###
#| LANGUAGE_CATEGORY | PJ | BUILD_METHOD | OUTPUT_METHOD | DOCKER_IMAGE_NAME | LINK_NODE_PROJECT |GOGOGO_RELEASE_METHOD | PRIORITY |
#| **類別** | **項目名** | **構建方法** | **輸出方法** | **鏡像名** | **鏈接node_project** | **GOGOGO發佈方式** | **優先級** |
#| -------- | ------------------------------ | ------------ | ----------------- | ------------------------------ | -------------------- | ------------------ | ---------- |
| product | neo4j | NONE | docker_image_push | neo4j | | docker_cluster | 0 |
| product | fluentd | NONE | docker_image_push | fluentd-gcl | | docker_cluster | 0 |
| dockerfile| my-oracle-java-8 | docker_build | docker_image_push | my-oracle-java-8 | | NONE | 1 |
| java | gc-common | mvn_deploy | NONE | | | NONE | 5 |
| java | gc-gray | mvn_deploy | NONE | | | NONE | 5 |
| java | gc-auth-service | mvn_package | docker_image_push | gc-auth-service | | docker_cluster | 10 |
| java | gc-monitor | mvn_package | docker_image_push | gc-monitor | | docker_cluster | 20 |
| node | gc-common-front | npm_install | NONE | | | NONE | 100 |
| node | gc-platform-node | npm_install | docker_image_push | gc-platform-node | | docker_cluster | 110 |
| node | gc-agent-front | npm_build | direct_deploy | | gc-common-front | web_release | 110 |
| node | gc-fastprotect-front | npm_build | direct_deploy | | | web_release | 110 |
| product | nacos-server | NONE | docker_image_push | nacos-server | | docker_cluster | 0 |
4.3 【docker-cluster-service.list---dev、docker-cluster-service.list。append.1---dev、docker-cluster-service.list.append.2---dev】
這個是發佈docker服務時的關鍵文件,這裏可以實現較為複雜的部署要求,也可以根據需要增加列以實現更為複雜的需求
- 【home項目路徑/init/envs.sample/docker-cluster-service.list---dev】
### 4【POD副本數:POD_REPLICAS】= [ 數字|${變量名} ]
### 1 數字 : 例如:2
### 2 ${變量名} : 例如:【${SERVICE_NAME}】
###
### 5【容器PORTS:CONTAINER_PORTS】= [ 外部端口號1:內部端口號2, 外部端口號3:內部端口號4, ...... , ${變量名} ]
### 若有多個,則用【,】分隔
### 示例:【17474:7474】
### 【${xName}:7474】
### 【27474:7474,7687:7687】
###
### 6【優先級:PRIORITY】= [ 數字 ]
### 數字越小越優先
###
### 7【備註:NOTE】= [ 自定義 ]
### 説明信息
###
###
### A.1 更多擴展項,請在文件【docker-cluster-service.list.append.1】中添加
### 3 集羣
### 4 主機名
### 5 部署位置
###
###
### A.2 更多擴展項,請在文件【docker-cluster-service.list.append.2】中添加
### 3 JAVA選項
### 4 容器ENVS
### 5 容器CMDS
###
###
### ***** 以上種種,都可以自己定義,然後調整相關腳本即可 *****
###
### ***** 上文提到的變量名可以是下文表頭的名字、也可以是sh中可以獲得的變量名 *****
###
#| SERVICE_NAME | DOCKER_IMAGE_NAME | POD_REPLICAS | CONTAINER_PORTS | PRIORITY | NOTE |
#| **服務名** | **DOCKER鏡像名** | **POD副本數** | **容器PORTS** | **優先級** | **備註** |
#| ---------------------- | ----------------------- | ------------: | ------------------ | ---------- | ---------------------------- |
|neo4j-srv |neo4j | 1 | 7474:7474,7687:7687| 0 | |
|redis-srv |redis | 1 | 6379:6379 | 0 | |
|nacos-server-1 |nacos-server | 1 | 8848:8848,9848:9848,9555:9555| 0| |
|nacos-server-2 |nacos-server | 1 | :8848,:9848,:9555 | 20 | |
|nacos-server-3 |nacos-server | 1 | :8848,:9848,:9555 | 20 | |
|gc-gateway |gc-gateway | 1 | 13000:13000 | 15 | |
|gc-monitor |gc-monitor | 1 | :13030 | 20 | |
|gc-client-service |gc-client-service | 1 | :23000 | 20 | |
|gc-client-app-service |gc-client-app-service | 1 | :23100 | 20 | |
|gc-travel-service |gc-travel-service | 1 | :20201 | 20 | |
- 【home項目路徑/init/envs.sample/docker-cluster-service.list.append.1---dev】
### ---------------------------------------------------------------------------------------
###.
### 2【服務名:SERVICE_NAME】= [ 自定義名稱 ].
###
### 3【集羣:CLUSTER】= [ swarm|k8s|compose|自定義 ]
### 1 swarm : swarm
### 2 k8s : k8s
### 3 compose : docker-compose
###
### 4【主機名:HOST_NAME】= [ 自定義 ]
### 須符合主機名稱規範
###
### 5【部署位置:DEPLOY_PLACEMENT】= [ NET:網絡 , L:label鍵值對 | NS:命名空間, L:label鍵值對 | SSH:<用户@>主機名或IP <-p ssh端口> ]
### 1 集羣='swarm' : NET:網絡, L:label鍵值對 : NET 即network,默認在env.sh---*中定義,這裏可以省略
### : L 即Label,指定標籤,可以有多個,代表服務部署到這個標籤主機節點,可以不指定
### 2 集羣='k8s' : NS:命名空間, L:label鍵值對 : NS 即k8s命名空間,默認在env.sh---*中定義,這裏可以省略
### : L 同上,即Label,指定標籤,可以有多個,代表服務部署到這個標籤主機節點,可以不指定
### 3 集羣='compose' : SSH:<用户@>主機名或IP <-p ssh端口> : 需要ssh到目標節點實現免密碼登錄,【用户名】及【ssh端口】可以省略
### 若有多個參數,則用【,】分隔
### 示例:【L:node=worker_node_2】
### 【NET:net1, L:node=worker, L:aa=bbb】
### 【NET:net1】
### 【NS:demo_space, L:node=worker, L:aa=bbb】
### 【NS:demo_space】
### 【SSH:root@192.168.11.77 -p 22】
### 【SSH:192.168.11.77】
###
###
### ***** 以上種種,都可以自己定義,然後調整相關腳本即可 *****
###
### ***** 上文提到的變量名可以是下文表頭的名字、也可以是sh中可以獲得的變量名 *****
###
#| SERVICE_NAME | CLUSTER | HOST_NAME | DEPLOY_PLACEMENT |
#| **服務名** | **集羣** | **主機名** | **部署位置** |
#| ---------------------- | -------- | ------------- | ---------------------------------------------------------- |
|neo4j-srv | swarm | | |
|redis-srv | swarm | | |
|nacos-server-1 | swarm |nacos-server-a | |
|nacos-server-2 | swarm |nacos-server-b | |
|nacos-server-3 | swarm |nacos-server-c | |
|gc-gateway | swarm | | |
|gc-monitor | swarm | | |
|gc-client-service | k8s | | |
|gc-client-app-service | compose | | SSH:192.168.11.77 |
|gc-travel-service | k8s | | |
- 【home項目路徑/init/envs.sample/docker-cluster-service.list.append.2---dev】
## docker cluster 服務部署清單擴展
###
### 此文件【docker-cluster-service.list.append.2】是【docker-cluster-service.list】的擴展,請確保兩個文件的【服務名】相匹配,否則無效,如果某服務不需要擴展項,則可以刪除該行
###
###.
### ---------------------------------------------------------------------------------------
###.
### 2【服務名:SERVICE_NAME】= [ 自定義名稱 ].
### 確保與【docker-cluster-service.list】中的【服務名】相匹配,否則無效
###.
### 3【JAVA選項:JAVA_OPTIONS】= [ Java參數1 , Java參數2, Java參數n, JAVA_OPT_FROM_FILE="/path/to/filename" ]
### 如果有多個,則用【,】號分隔,例如:【-Dencoding=UTF-8,-Dfile=${FILE},JAVA_OPT_FROM_FILE="/path/to/filename"】
### - 指定為具體參數,例如:【-Dencoding=UTF-8】
### - 指定變量參數,例如:【-Dfile=${FILE}】
### - 指定從文件獲取,參數名需指定為【JAVA_OPT_FROM_FILE】,例如:【JAVA_OPT_FROM_FILE="/path/to/filename"】,建議放在【init/my_spec_envs/】目錄下,用git管理
###.
### 4【容器ENVS:CONTAINER_ENVS】= [ 變量1=值1, 變量2=值2, 變量n=值n, ENVS_FROM_FILE="/path/to/filename"]
### 如果有多個,則用【,】號分隔,例如:【aa=1,bb=2,NEO4J_AUTH=${NEO4J_USER}/${NEO4J_PASSWORD},ENVS_FROM_FILE="/path/to/filename"】
### - 指定為具體參數,例如:【aa=1,bb=2】
### - 指定變量參數,例如:【NEO4J_AUTH=${NEO4J_USER}/${NEO4J_PASSWORD}】
### - 指定從文件獲取,參數名需指定為【ENVS_FROM_FILE】,例如【ENVS_FROM_FILE="/path/to/filename"】,建議放在【init/my_spec_envs/】目錄下,用git管理
###.
### 5【容器CMDS:CONTAINER_CMDS】= [ 命令參數2, 命令參數n, CMDS_FROM_FILE="/path/to/filename" ]
### 如果有多個,則用【,】號分隔,例如:【--quiet,--requirepass "${REDIS_PASSWORD}",CMDS_FROM_FILE="/path/to/filename"】
### - 指定為具體參數,例如:【--quiet】
### - 指定變量參數,例如:【--requirepass "${REDIS_PASSWORD}"】
### - 指定從文件獲取,參數名需指定為【CMDS_FROM_FILE】,例如【CMDS_FROM_FILE="/path/to/filename"】,建議放在【init/my_spec_envs/】目錄下,用git管理
###.
###
### ***** 以上種種,都可以自己定義,然後調整相關腳本即可 *****
###
### ***** 上文提到的變量名可以是下文表頭的名字、也可以是sh中可以獲得的變量名 *****
###
#| SERVICE_NAME | JAVA_OPTIONS | CONTAINER_ENVS | CONTAINER_CMDS |
#| **服務名** | **JAVA選項** | **容器ENVS** | **容器CMDS** |
#| ---------------------- | --------------------------------- | ---------------------------------------------------------- | --------------------------------- |
|neo4j-srv | | NEO4J_AUTH="${NEO4J_USER}/${NEO4J_PASSWORD}" | |
|redis-srv | | |--requirepass "${REDIS_PASSWORD}" |
|nacos-server-1 | | ENVS_FROM_FILE=../init/my_spec_envs/nacos.env | |
|nacos-server-2 | | ENVS_FROM_FILE=../init/my_spec_envs/nacos.env | |
|nacos-server-3 | | ENVS_FROM_FILE=../init/my_spec_envs/nacos.env | |
|gc-gateway | -Xms512m -Xmx512m | | |
|gc-monitor | -Xms512m -Xmx512m | | |
|gc-client-service | -Xms512m -Xmx512m | | |
|gc-client-app-service | -Xms512m -Xmx512m | | |
|gc-travel-service | -Xms512m -Xmx512m | | |
4.4 【nginx.list---dev】
這個是發佈web服務時的關鍵文件,也是生成nginx配置文件、自動生成域A記錄的關鍵配置文件
【home項目路徑/init/envs.sample/nginx.list---dev】
## nginx網站配置清單
###
### 2【項目名:PJ】= [ 自定義名稱 ]
###
### 3【域名A記錄:DOMAIN_A】= [ 自定義名稱 ]
### 不要加域名後綴,部署時根據運行環境自動添加
###
### 4【http端口:FRONT_HTTP_PORT】= [ 端口號 ]
### 運行在http下時的端口號
###
### 5【https端口:FRONT_HTTPS_PORT】= [ 端口號 ]
### 運行在https下時的端口號
###
### 6【方式:MODE】= [ realserver|realserver ]
### 1 realserver : 作為real server
### 2 proxyserver : 作為代理服務器,必須要有【後端協議端口】參數
###
### 7【後端協議端口:BACKEND_PROTOCOL_PORT】= [ 協議:端口號 ]
### 協議 = [ http | https ]
###
### 8【附加項:ITEMS】= [auth_basic,autoindex,upload_size=100m,try_files]中的一個或多個,用【,】分隔
### 1 auth_basic : 添加驗證;
### 2 autoindex : 目錄瀏覽;
### 3 upload_size=100m : 文件上傳大小;
### 4 try_files : try_files $uri $uri/ /index.html;
###
### 9【域名A記錄IP:DOMAIN_IPS】= [ IP地址1,IP地址2,IP地址n ]
### 域名A記錄指向的IP地址,如果有多個,則用【,】分隔
###
### 10【優先級:PRIORITY】= [ 數字 ]
### 數字越小越優先
###
### ***** 以上種種,都可以自己定義,然後調整相關腳本即可 *****
###
#| PJ | DOMAIN_A |FRONT_HTTP_PORT|FRONT_HTTPS_PORT| MODE |BACKEND_PROTOCOL_PORT| ITEMS | DOMAIN_IPS | PRIORITY |
#| **項目名** | **域名A記錄** | **http端口** | **https端口** | **方式** | **後端協議端口** | **附加項** | **域名A記錄IP** | **優先級** |
#| ---------------------------- | ------------------- | ------------ | ------------- | ----------- | ---------------- | -------------------- | --------------- | ---------- |
| build-log | build-log | 80 | 443 | realserver | | auth_basic,autoindex | 192.168.11.77 | 5 |
| log | log | 80 | 443 | proxyserver | http:5601 | auth_basic | 192.168.11.77 | 5 |
| gc-platform-node | bmp-platform-node | 80 | 443 | proxyserver | http:41300 | | 192.168.11.77 | 5 |
| gc-client-mobile-h5-front | app-client-h5 | 80 | 443 | realserver | | try_files | 192.168.11.77 | 5 |
| gc-client-app-service | app-client-public | 80 | 443 | proxyserver | http:23100 | upload_size=50m | 192.168.11.77 | 5 |
5 使用
5.1 使用説明
請使用-h|--help參數運行sh腳本即可看到使用説明。
所有幫助裏面都包含以下部分:
用途:......
依賴:......
注意:......
用法:......
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
正則 :正則匹配
完全正則:完全正則匹配
示例:......
相信你可以根據幫助迅速上手
5.2 項目構建
5.2.1 一般構建
幫助信息如下:
$ ./deploy/build.sh --help
用途:用於項目構建,生成docker鏡像並push到倉庫
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
/root/deploy-bmp/deploy/env.sh
/root/deploy-bmp/deploy/project.list
/root/deploy-bmp/deploy/../tools/send_mail.sh
/root/deploy-bmp/deploy/docker-tag-push.sh
/root/deploy-bmp/deploy/../tools/format_table.sh
/root/deploy-bmp/deploy/../tools/dingding_conver_to_markdown_list-deploy.sh
注意:
* 名稱正則表達式完全匹配,會自動在正則表達式的頭尾加上【^ $】,請規避
* 輸入命令時,參數順序不分先後
用法:
./build.sh [-h|--help]
./build.sh [-l|--list]
./build.sh <-M|--mode [normal|function]> <-c|--category [dockerfile|java|node|自定義]> <-b|--branch {代碼分支}> <-e|--email {郵件地址}> <-s|--skiptest> <-f|--force> <-v|--verbose> <{項目1} {項目2} ... {項目n} ... {項目名稱正則表達式完全匹配}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出可構建的項目清單
-M|--mode 指定構建方式,二選一【normal|function】,默認為normal方式。此參數用於被外部調用
-c|--category 指定構建項目語言類別:【dockerfile|java|node|自定義】,參考:/root/deploy-bmp/deploy/project.list
-b|--branch 指定代碼分支,默認來自env.sh
-e|--email 發送日誌到指定郵件地址,如果與【-U|--user-name】同時存在,則將會被替代
-s|--skiptest 跳過測試,默認來自env.sh
-f|--force 強制重新構建(無論是否有更新)
-v|--verbose 顯示更多過程信息
示例:
#
./build.sh -l #--- 列出可構建的項目清單
#
./build.sh #--- 構建所有項目,用默認分支
./build.sh -b 分支a #--- 構建所有項目,用分支a
./build.sh -b 分支a 項目1 項目2 #--- 構建項目:【項目1、項目2】,用【分支a】
./build.sh 項目1 項目2 #--- 構建項目:【項目1、項目2】,用默認分支
# 按類別
./build.sh -c java #--- 構建所有java項目,用默認分支
./build.sh -c java -b 分支a #--- 構建所有java項目,用【分支a】
./build.sh -c java -b 分支a 項目1 項目2 #--- 構建node項目:【項目1、項目2】,用【分支a】
./build.sh -c java 項目1 項目2 #--- 構建node項目:【項目1、項目2】,用默認分支
# 項目名稱用正則表達式完全匹配
./build.sh .*xxx.* #--- 構建項目名稱正則匹配【^.*xxx.*】的項目,用默認分支
./build.sh [ab]*xxx #--- 構建項目名稱正則匹配【^[ab]*xxx$】的項目,用默認分支
./build.sh sss.*eee #--- 構建項目名稱正則匹配【^sss.*eee$】的項目,用默認分支
./build.sh sss.* #--- 構建項目名稱正則匹配【^sss.*$】的項目,用默認分支
# 發郵件
./build.sh --email xm@xxx.com #--- 構建所有項目,用默認分支,將錯誤日誌發送到郵箱【xm@xxx.com】
./build.sh --email xm@xxx.com 項目1 項目2 #--- 構建項目:【項目1、項目2】,用默認分支,將錯誤日誌發送到郵箱【xm@xxx.com】
# 測試
./build.sh -b 分支a -s 項目1 項目2 #--- 構建項目:【項目1、項目2】,用【分支a】,跳過測試
# 強制重新構建
./build.sh -f 項目1 項目2 #--- 構建【項目1、項目2】,用默認分支,無論有沒有更新都進行強制構建
# 顯示更多信息
./build.sh -v --email xm@xxx.com #--- 構建所有項目,用默認分支,顯示更多過程信息並將錯誤日誌發送到郵箱【xm@xxx.com】
./build.sh -v --email xm@xxx.com 項目1 項目2 #--- 構建項目:【項目1、項目2】,用默認分支,顯示更多詳細信息並將錯誤日誌發送到郵箱【xm@xxx.com】
# 外調用★
./build.sh -M function 項目1 #--- 構建項目:【項目1】,用默認分支
./build.sh -M function -b 分支a 項目1 #--- 構建項目:【項目1】,用分支【分支a】
日常使用:
$ ./build.sh #--- 所有項目
$ ./build.sh 項目1 項目2 #--- 指定項目
$ ./build.sh proj.* #--- 指定正則匹配【proj.*】的項目
$ ./build.sh -c java #--- 指定項目類別
上面提供了豐富的參數,你可以靈活使用,且容易上手。
5.2.2 並行構建
這可以加快構建速度
幫助信息如下:
$ ./deploy/build-parallel.sh --help
用途:以並行的方式運行構建腳本,以加快構建速度
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
/root/deploy-bmp/deploy/env.sh
/root/deploy-bmp/deploy/project.list
/root/deploy-bmp/deploy/build.sh
/root/deploy-bmp/deploy/../tools/format_table.sh
/root/deploy-bmp/deploy/../tools/dingding_conver_to_markdown_list-deploy.sh
注意:
* 名稱正則表達式完全匹配,會自動在正則表達式的頭尾加上【^ $】,請規避
* 輸入命令時,參數順序不分先後
用法:
./build-parallel.sh [-h|--help]
./build-parallel.sh [-l|--list]
./build-parallel.sh <-n|--number> <-c [dockerfile|java|node|自定義]> <-b {代碼分支}> <-e|--email {郵件地址}> <-s|--skiptest> <-f|--force> <{項目1} {項目2} ... {項目n}> ... {項目名稱正則表達式完全匹配}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出可構建的項目清單
-n|--number 並行構建項目的數量,默認為2個
-c|--category 指定構建項目語言類別:【dockerfile|java|node|自定義】,參考:/root/deploy-bmp/deploy/project.list
-b|--branch 指定代碼分支,默認來自env.sh
-e|--email 發送日誌到指定郵件地址,如果與【-U|--user-name】同時存在,則將會被替代
-s|--skiptest 跳過測試,默認來自env.sh
-f|--force 強制重新構建(無論是否有更新)
示例:
#
./build-parallel.sh -l #--- 列出可構建的項目清單
# 在build.sh的用法基礎上選擇是否加上【-n】參數即可
./build-parallel.sh #--- 構建所有項目,用默認分支,同時構建默認個
./build-parallel.sh -n 4 #--- 構建所有項目,用默認分支,同時構建4個
./build-parallel.sh -n 4 -b 分支a #--- 構建所有項目,用【分支a】,同時構建4個
./build-parallel.sh -n 4 -c java #--- 構建所有java項目,用默認分支,同時構建4個
./build-parallel.sh 項目1 項目2 #--- 構建【項目1、項目2】,用默認分支,同時構建默認個
./build-parallel.sh --email xm@xxx.com 項目1 項目2 #--- 構建【項目1、項目2】,用默認分支,同時構建默認個,將錯誤日誌發送到郵箱【xm@xxx.com】
./build-parallel.sh -s -f 項目1 項目2 #--- 構建【項目1、項目2】,用默認分支,同時構建默認個,跳過測試,強制重新構建(無論是否有更新)
./build-parallel.sh sss #--- 構建項目名稱正則匹配【^sss$】的項目,用默認分支,同時構建默認個
# 更多示例請參考【build.sh】
日常使用:
$ ./build-parallel.sh #--- 所有項目,默認並行2個
$ ./build-parallel.sh -n 5 #--- 所有項目,一次並行構建5個
$ ./build-parallel.sh -n 5 -c java #--- 指定項目類別java,一次並行構建5個
5.3 項目發佈
5.3.1 docker項目發佈(k8s|swarm|docker-compose)
幫助信息如下:
$ ./deploy/docker-cluster-service-deploy.sh --help
用途:用於創建、更新、查看、刪除......服務
依賴:
/root/deploy-bmp/deploy/docker-cluster-service.list
/root/.my_sec/container-envs-pub.sec
/root/deploy-bmp/deploy/docker-arg-pub.list
/root/deploy-bmp/deploy/container-hosts-pub.list
/root/deploy-bmp/deploy/java-options-pub.list
/root/deploy-bmp/deploy/env.sh
/root/deploy-bmp/deploy/docker-image-search.sh
/root/deploy-bmp/deploy/../tools/format_table.sh
/root/deploy-bmp/deploy/../tools/dingding_conver_to_markdown_list-deploy.sh
注意:
* 名稱正則表達式完全匹配,會自動在正則表達式的頭尾加上【^ $】,請規避
* 一般服務名(非灰度服務名)為項目清單中的服務名,灰度服務名為為【項目清單服務名】+【--】+【灰度版本號】
* 輸入命令時,參數順序不分先後
用法:
./docker-cluster-service-deploy.sh [-h|--help]
./docker-cluster-service-deploy.sh [-l|--list] #--- 列出配置文件中的服務清單
./docker-cluster-service-deploy.sh [-L|--list-run swarm|k8s] #--- 列出指定集羣中運行的所有服務,不支持持【docker-compose】
# 創建、修改
./docker-cluster-service-deploy.sh <-M|--mode [normal|function]> [-c|--create|-m|--modify] <-D|--debug> <<-t|--tag {模糊鏡像tag版本}> | <-T|--TAG {精確鏡像tag版本}>> <-n|--number {副本數}> <-V|--release-version {版本號}> <-G|--gray> <{服務名1} {服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
# 更新
./docker-cluster-service-deploy.sh <-M|--mode [normal|function]> [-u|--update] <<-t|--tag {模糊鏡像tag版本}> | <-T|--TAG {精確鏡像tag版本}>> <-V|--release-version {版本號}> <-G|--gray> <{服務名1} {服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
# 回滾
./docker-cluster-service-deploy.sh <-M|--mode [normal|function]> [--b|rollback] <-V|--release-version {版本號}> <-G|--gray> <{服務名1} {服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
#
# 擴縮容
./docker-cluster-service-deploy.sh <-M|--mode [normal|function]> [-S|--scale] [-n|--number {副本數}] <-V|--release-version {版本號}> <-G|--gray> <{服務名或灰度服務名1} {服務名或灰度服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
# 刪除
./docker-cluster-service-deploy.sh <-M|--mode [normal|function]> [-r|--rm] <-V|--release-version {版本號}> <-G|--gray> <-a|--all-release> <{服務名1} {服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
# 狀態
./docker-cluster-service-deploy.sh [-s|--status] <-V|--release-version {版本號}> <-G|--gray> <-a|--all-release> <{服務名1} {服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
# 詳情
./docker-cluster-service-deploy.sh [-d|--detail] <-V|--release-version {版本號}> <-G|--gray> <-a|--all-release> <{服務名1} {服務名2} ... {服務名正則表達式完全匹配}> <-F|--fuck>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help :幫助
-l|--list :列出配置文件中的服務清單
-L|--list-run :列出指定集羣中運行的所有服務,不支持【docker-compose】集羣
-F|--fuck :直接運行命令,默認:僅顯示命令行
-c|--create :創建服務,基於服務清單參數
-m|--modify :修改服務,基於服務清單參數
-u|--update :更新鏡像版本
-b|--rollback :回滾服務(回滾到非今天構建的上一個版本)
-S|--scale :副本數設置
-r|--rm :刪除服務
-s|--status : 獲取服務運行狀態
-d|--detail : 獲取服務詳細信息
-D|--debug : 開啓開發者Debug模式,目前用於開放所有容器服務端口
-t|--tag :模糊鏡像tag版本
-T|--TAG :精確鏡像tag版本
-n|--number :Pod副本數
-G|--gray : 設置灰度標誌為:gray,默認:normal
-V|--release-version : 發佈版本號
-a|--all-release : 所有已發佈的版本,包含帶版本號的、不帶版本號的、灰度的、非灰度的
-M|--mode :指定構建方式,二選一【normal|function】,默認為normal方式。此參數用於被外部調用
示例:
# 服務清單
./docker-cluster-service-deploy.sh -l #--- 列出配置文件中的服務清單
./docker-cluster-service-deploy.sh -L swarm #--- 列出【swarm】集羣中運行的所有服務
# 僅顯示最終命令行或直接執行(用於檢查命令是否有錯誤)
./docker-cluster-service-deploy.sh -c 服務1 #--- 根據服務清單顯示創建【服務1】的命令行
./docker-cluster-service-deploy.sh -c 服務1 -F #--- 根據服務清單創建【服務1】
# 服務名稱正則完全匹配
./docker-cluster-service-deploy.sh -c .*xxx.* -F #--- 創建服務名稱正則完全匹配【^.*xxx.*$】的服務,使用最新鏡像
./docker-cluster-service-deploy.sh -u [.]*xxx -F #--- 更新服務名稱正則完全匹配【^[.]*xxx$】的服務,使用最新鏡像
# 創建
./docker-cluster-service-deploy.sh -c -F #--- 根據服務清單創建所有服務
./docker-cluster-service-deploy.sh -c 服務1 服務2 -F #--- 創建【服務1】、【服務2】服務
./docker-cluster-service-deploy.sh -c -D 服務1 服務2 -F #--- 創建【服務1】、【服務2】服務,並開啓開發者Debug模式
./docker-cluster-service-deploy.sh -c -T 2020.12.11 服務1 服務2 -F #--- 創建【服務1】、【服務2】服務,且使用的鏡像版本為【2020.12.11】
./docker-cluster-service-deploy.sh -c -t 2020.12 服務1 服務2 -F #--- 創建【服務1】、【服務2】服務,且使用的鏡像版本包含【2020.12】的最新鏡像
./docker-cluster-service-deploy.sh -c -n 2 服務1 服務2 -F #--- 創建【服務1】、【服務2】服務,且副本數為【2】
./docker-cluster-service-deploy.sh -c -T 2020.12.11 -n 2 服務1 服務2 -F #--- 創建【服務1】、【服務2】服務,且使用的鏡像版本為【2020.12.11】,副本數為【2】
./docker-cluster-service-deploy.sh -c -V yyy 服務1 服務2 -F #--- 創建【服務1】、【服務2】,版本號為【yyy】
./docker-cluster-service-deploy.sh -c -G 服務1 服務2 -F #--- 創建【服務1】、【服務2】的灰度服務
./docker-cluster-service-deploy.sh -c -G -V yyy 服務1 服務2 -F #--- 創建【服務1】、【服務2】的灰度服務,版本號為【yyy】
# 修改
./docker-cluster-service-deploy.sh -m 服務1 服務2 -F #--- 修改【服務1】、【服務2】服務
./docker-cluster-service-deploy.sh -m 服務1 服務2 -V yyy -F #--- 根據服務清單修改所有版本號為【yyy】的服務
./docker-cluster-service-deploy.sh -m -T 2020.12.11 服務1 服務2 -F #--- 修改【服務1】、【服務2】服務,且使用的鏡像版本為【2020.12.11】
./docker-cluster-service-deploy.sh -m -t 2020.12 服務1 服務2 -F #--- 修改【服務1】、【服務2】服務,且使用的鏡像版本包含【2020.12】的最新鏡像
./docker-cluster-service-deploy.sh -m -n 2 服務1 服務2 -F #--- 修改【服務1】、【服務2】服務,且副本數為【2】
./docker-cluster-service-deploy.sh -m -T 2020.12.11 -n 2 服務1 服務2 -F #--- 修改【服務1】、【服務2】服務,且使用的鏡像版本為【2020.12.11】,副本數為【2】
# 更新鏡像
./docker-cluster-service-deploy.sh -u -F #--- 根據服務清單更新設置所有服務的最新鏡像tag版本(如果今天構建過)
./docker-cluster-service-deploy.sh -u 服務1 服務2 -F #--- 設置【服務1】、【服務2】服務的最新鏡像tag版本(如果今天構建過)
./docker-cluster-service-deploy.sh -u -t 2020.12 -F #--- 根據服務清單更新設置所有服務,且鏡像tag版本包含【2020.12】的最新鏡像
./docker-cluster-service-deploy.sh -u -t 2020.12 服務1 服務2 -F #--- 更新【服務1】、【服務2】有服務,且鏡像tag版本包含【2020.12】的最新鏡像
./docker-cluster-service-deploy.sh -u -T 2020.12.11 -F #--- 根據服務清單更新設置所有服務,且鏡像tag版本為【2020.12.11】的鏡像
./docker-cluster-service-deploy.sh -u -T 2020.12.11 服務1 服務2 -F #--- 更新【服務1】、【服務2】有服務,且鏡像tag版本為【2020.12.11】的鏡像
# 回滾
./docker-cluster-service-deploy.sh -b -F #--- 根據服務清單回滾所有服務(如果今天構建過)
./docker-cluster-service-deploy.sh -b 服務1 服務2 -F #--- 回滾【服務1】、【服務2】服務(如果今天構建過)
./docker-cluster-service-deploy.sh -b 服務1 服務2 -V yyy -F #--- 回滾【服務1】、【服務2】服務,且版本號為【yyy】(如果今天構建過)
#
# 擴縮容
./docker-cluster-service-deploy.sh -S -n 2 -F #--- 根據服務清單設置所有服務的pod副本數為2
./docker-cluster-service-deploy.sh -S -n 2 服務1 服務2 -F #--- 設置【服務1】、【服務2】服務的pod副本數為2
./docker-cluster-service-deploy.sh -S -n 2 -G 服務1 服務2 -F #--- 設置【服務1】、【服務2】的灰度服務的pod副本數為2
./docker-cluster-service-deploy.sh -S -n 2 -G -V yyy 服務1 服務2 -F #--- 設置【服務1】、【服務2】的灰度服務,且版本為【yyy】的pod副本數為2
# 刪除
./docker-cluster-service-deploy.sh -r -F #--- 根據服務清單刪除所有服務
./docker-cluster-service-deploy.sh -r 服務1 服務2 -F #--- 刪除【服務1】、【服務2】服務
./docker-cluster-service-deploy.sh -r -G 服務1 服務2 -F #--- 刪除【服務1】、【服務2】的灰度服務
./docker-cluster-service-deploy.sh -r -V yyy 服務1 服務2 -F #--- 刪除【服務1】、【服務2】,且版本為【yyy】的服務
./docker-cluster-service-deploy.sh -r -V yyy -G 服務1 服務2 -F #--- 刪除【服務1】、【服務2】,且版本為【yyy】的灰度服務
./docker-cluster-service-deploy.sh -r -a 服務1 服務2 -F #--- 刪除模糊匹配【服務1】、【服務2】的服務,包含帶版本號的、不帶版本號的、灰度的、非灰度的
# 運行狀態(更多請參考【刪除】)
./docker-cluster-service-deploy.sh -s -F #--- 根據服務清單獲取服務運行狀態
./docker-cluster-service-deploy.sh -s 服務1 服務2 -F #--- 獲取【服務1】、【服務2】服務運行狀態
./docker-cluster-service-deploy.sh -s -G 服務1 服務2 -F #--- 獲取【服務1】、【服務2】的灰度服務運行狀態
# 運行詳細信息(更多請參考【刪除】)
./docker-cluster-service-deploy.sh -d -F #--- 根據服務清單獲服務運行取詳細信息
./docker-cluster-service-deploy.sh -d 服務1 服務2 -F #--- 獲取【服務1】、【服務2】服務運行詳細信息
# 外調用★
./docker-cluster-service-deploy.sh -M function -u 服務1 -F #--- 更新部署【服務1】,使用最新鏡像
./docker-cluster-service-deploy.sh -M function -u -T 2020.12.11 服務1 -F #--- 更新部署【服務1】,使用版本為【2020.12.11】的鏡像
日常使用:
$ ./docker-cluster-service-deploy.sh -c -F #--- 正常發佈所有
$ ./docker-cluster-service-deploy.sh -c -F -V 2.1 -G 服務1 服務2 #--- 灰度發佈服務1、服務2,版本號:2.1
$ ./docker-cluster-service-deploy.sh -u -F 服務1 服務2 #--- 更新服務1、服務2
$ ./docker-cluster-service-deploy.sh -u -F service.* #--- 更新匹配【service.*】的服務
項目會根據優先級進行構建與發佈
5.3.2 web項目發佈
幫助信息如下:
$ ./deploy/web-release.sh --help
用途:Web站點發布上線
依賴:
/root/deploy-bmp/deploy/nginx.list
/root/deploy-bmp/deploy/../tools/format_table.sh
/root/deploy-bmp/deploy/../tools/dingding_conver_to_markdown_list-deploy.sh
/root/deploy-bmp/deploy/env.sh
nginx上:/root/nginx-config/web-release-on-nginx.sh
注意:運行在nginx節點上
* 【上線(ship)】流程包含以下四個子流程【構建】、【測試(test)】、【部署(deploy)】、【發佈(release)】。原地發佈(即部署 == 發佈)
* 名稱正則表達式完全匹配,會自動在正則表達式的頭尾加上【^ $】,請規避
* 輸入命令時,參數順序不分先後
用法:
./web-release.sh [-h|--help]
./web-release.sh [-l|--list] #--- 列出項目
./web-release.sh <-M|--mode [normal|function]> [-r|--release] <{項目1} {項目2} ... {項目n} ... {項目名稱正則表達式完全匹配}> #--- 發佈上線今天的版本
./web-release.sh <-M|--mode [normal|function]> [-b|--rollback] <{項目1} {項目2} ... {項目n} ... {項目名稱正則表達式完全匹配}> #--- 回滾到上一個版本
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 項目列表
-r|--release 發佈
-b|--rollback 回滾
-M|--mode :指定構建方式,二選一【normal|function】,默認為normal方式。此參數用於被外部調用
示例:
./web-release.sh -l #--- 列出所有項目
#
./web-release.sh -r #--- 發佈所有項目
./web-release.sh -r 項目a 項目b #--- 發佈【項目a、項目b】
#
./web-release.sh -b #--- 回滾所有項目
./web-release.sh -b 項目a 項目b #--- 回滾【項目a、項目b】
# 服務名稱用正則完全匹配
./web-release.sh -r .*xxx.* #--- 發佈項目名稱正則完全匹配【^.*xxx.*$】的第一個項目
./web-release.sh -b [.]*xxx #--- 回滾項目名稱正則完全匹配【^[.]*xxx$】的第一個項目
# 外調用★
./web-release.sh -M function -r #--- 函數調用方式發佈所有項目
./web-release.sh -M function -r 項目a 項目b #--- 函數調用方式發佈【項目a、項目b】
日常使用:
$ ./web-release.sh -r #--- 發佈所有
$ ./web-release.sh -r proj.* #--- 發佈正則匹配項目【proj.*】
$ ./web-release.sh -r 項目a 項目b #--- 發佈項目a、項目b
$ ./web-release.sh -b 項目a 項目b #--- 回滾項目a、項目b
5.4 構建發佈一條龍
幫助信息如下:
$ ./deploy/gogogo.sh --help
用途:用於項目構建併發布
依賴腳本:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
/root/deploy-bmp/deploy/env.sh
/root/deploy-bmp/deploy/project.list
/root/deploy-bmp/deploy/build.sh
/root/deploy-bmp/deploy/docker-cluster-service.list
/root/deploy-bmp/deploy/docker-cluster-service-deploy.sh
/root/deploy-bmp/deploy/../tools/format_table.sh
/root/deploy-bmp/deploy/../tools/dingding_conver_to_markdown_list-deploy.sh
注意:
- 構建完成後的發佈:如果目標服務不在運行中,則執行【create】;如果已經存在,則執行【update】。如果是以【create】方式執行,則【-G|--gray】參數有效
用法:
./gogogo.sh [-h|--help]
./gogogo.sh [-l|--list]
./gogogo.sh <-c [dockerfile|java|node|自定義]> <-b {代碼分支}> <-e|--email {郵件地址}> <-s|--skiptest> <-f|--force> <-v|--verbose> <-V|--release-version> <-G|--gray> <{項目1} {項目2} ... {項目n}> ... {項目名稱正則匹配}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出可構建的項目清單
-c|--category 指定構建項目語言類別:【dockerfile|java|node|自定義】,參考:/root/deploy-bmp/deploy/project.list
-b|--branch 指定代碼分支,默認來自env.sh
-e|--email 發送日誌到指定郵件地址,如果與【-U|--user-name】同時存在,則將會被替代
-s|--skiptest 跳過測試,默認來自env.sh
-f|--force 強制重新構建(無論是否有更新)
-v|--verbose 顯示更多過程信息
-G|--gray : 設置灰度標誌為:【gray】,默認:【normal】
-V|--release-version : 發佈版本號
示例:
#
./gogogo.sh -l #--- 列出可構建發佈的項目清單
# 類別
./gogogo.sh -c java #--- 構建發佈所有java項目,用默認分支
./gogogo.sh -c java -b 分支a #--- 構建發佈所有java項目,用分支a
./gogogo.sh -c java -b 分支a 項目1 項目2 #--- 構建發佈node【項目1、項目2】,用分支a(一般可不用-c參數)
./gogogo.sh -c java 項目1 項目2 #--- 構建發佈node【項目1、項目2】,用默認分支
# 一般
./gogogo.sh #--- 構建發佈所有項目,用默認分支
./gogogo.sh -b 分支a #--- 構建發佈所有項目,用【分支a】
./gogogo.sh -b 分支a 項目1 項目2 #--- 構建發佈【項目1、項目2】,用【分支a】
./gogogo.sh 項目1 項目2 #--- 構建發佈【項目1、項目2】,用默認分支
# 郵件
./gogogo.sh --email xm@xxx.com 項目1 項目2 #--- 構建發佈【項目1、項目2】,將錯誤日誌發送到郵箱【xm@xxx.com】
# 跳過測試
./gogogo.sh -s 項目1 項目2 #--- 構建發佈【項目1、項目2】,跳過測試
# 強制重新構建
./gogogo.sh -f 項目1 項目2 #--- 強制重新構建發佈【項目1、項目2】,用默認分支,不管【項目1、項目2】有沒有更新
# 顯示更多信息
./gogogo.sh -v 項目1 項目2 #--- 構建發佈【項目1、項目2】,顯示更多信息
# 構建發佈帶版本號
./gogogo.sh -V 2.2 項目1 項目2 #--- 構建【項目1、項目2】,發佈版本號為【2.2】
# 構建完成後以灰度方式發佈
./gogogo.sh -G 項目1 項目2 #--- 構建【項目1、項目2】,並灰度發佈
./gogogo.sh -G -V 2.2 項目1 項目2 #--- 構建【項目1、項目2】,並灰度發佈,發佈版本號為【2.2】
# 項目名稱用正則匹配
./gogogo.sh .*xxx.* #--- 構建發佈項目名稱正則匹配【.*xxx.*】的項目(包含xxx的),用默認分支
./gogogo.sh [.]*xxx #--- 構建發佈項目名稱正則匹配【[.]*xxx】的項目(包含xxx的),用默認分支
./gogogo.sh xxx- #--- 構建發佈項目名稱正則匹配【xxx-】的項目(包含xxx-的),用默認分支
./gogogo.sh ^[xy] #--- 構建發佈項目名稱正則匹配【^[xy]】的項目(以x或y開頭的),用默認分支
./gogogo.sh ^sss #--- 構建發佈項目名稱正則匹配【^sss】的目(以sss開頭的),用默認分支
./gogogo.sh eee$ #--- 構建發佈項目名稱正則匹配【eee$】的目(以eee結尾的),用默認分支
./gogogo.sh ^sss.*eee$ #--- 構建發佈項目名稱正則匹配【^sss.*eee$】的項目(以以sss開頭,並且以eee結尾的),用默認分支
./gogogo.sh -c ja ^sss.*eee$ #--- 構建發佈項目類別正則匹配【ja】,且項目名稱正則匹配【^sss.*eee$】的項目(以以sss開頭,並且以eee結尾的),用默認分支
日常使用:
$ ./gogogo.sh #--- 構建發佈所有
$ ./gogogo.sh -G -V 2.2 項目1 項目2 #--- 構建並灰度發佈項目1、項目2
$ ./gogogo.sh proj.* #--- 構建發佈正則匹配【proj.*】的項目
項目會根據優先級進行構建與發佈
5.5 萬宗歸一工具
可以通過這一個工具幹完幾乎所有事情
$ ./gan.sh --help
用途:用於遠程安裝部署。模塊説明如下:
注意:在deploy節點上運行,需要一堆關聯腳本
用法:
./gan.sh [-h|--help] #--- 幫助
./gan.sh [-d|--do web|ngx-root|ngx-conf|cert|cert-w|pg-b-r|aliyun-dns|godaddy-dns] <參數1> ... <參數n> #--- 參數1...n 是 $1 模塊的參數
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-d|--do 某功能模塊
- build 【build.sh】:項目打包
- build-para 【build-parallel.sh】:並行項目打包
- gogogo 【gogogo.sh】:項目打包並部署上線
- docker 【docker-cluster-service-deploy.sh】:docker服務部署上線、回滾
- web 【web-release.sh】:網站代碼部署上線、回滾
- ngx-dns 【nginx-dns.sh】:網站域名A記錄添加或修改
- ngx-root 【nginx-root.sh】:網站root目錄初始化
- ngx-conf 【nginx-conf.sh】:網站nginx配置設置
- ngx-cert 【nginx-cert-letsencrypt-a.sh】:網站域名證書申請
- ngx-cert-w 【cert-letsencrypt-wildcart.sh】:泛域名證書申請與更新
- pg-b-r 【pg_list_backup_or_restore.sh】:備份或還原pg_m上的數據庫
- aliyun-dns 【aliyun-dns.sh】:修改aliyun dns
- godaddy-dns 【godaddy-dns.sh】:修改godaddy dns
示例:
#
./gan.sh -h
./gan.sh -d web -h #--- 運行web-release.sh命令幫助
./gan.sh -d web -r #--- 運行web-release.sh命令,發佈所有前端項目
./gan.sh -d web -r 項目a 項目b #--- 運行web-release.sh命令,發佈所有前端【項目a、項目b】
一般我會用它初始化nginx的root目錄及conf文件及dns A記錄,例如:
# nginx root目錄
$ ./gan.sh -d ngx-root --help
用途:用以在nginx服務器上生成項目站點目錄結構
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
/root/deploy-bmp/init/nginx-config/nginx.list
注意: 運行在deploy上
用法:
/root/deploy-bmp/init/nginx-config/nginx-root.sh [-h|--help]
/root/deploy-bmp/init/nginx-config/nginx-root.sh [-l|--list]
/root/deploy-bmp/init/nginx-config/nginx-root.sh <{項目1} {項目2} ... {項目n}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出可構建的項目清單
示例:
#
/root/deploy-bmp/init/nginx-config/nginx-root.sh -h #--- 幫助
/root/deploy-bmp/init/nginx-config/nginx-root.sh -l #--- 列出項目清單
#
/root/deploy-bmp/init/nginx-config/nginx-root.sh #--- 為所有項目建立項目目錄
/root/deploy-bmp/init/nginx-config/nginx-root.sh 項目a 項目b #--- 為【項目a、項目b】建立項目目錄
$ ./gan.sh -d ngx-root #--- 為所有項目建立nginx root目錄
$ ./gan.sh -d ngx-root 項目1 #--- 為項目1建立nginx root目錄
# nginx conf
$ ./gan.sh -d ngx-conf --help
用途:用以生成項目nginx配置文件,並放置到nginx服務器上
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
/root/deploy-bmp/init/nginx-config/nginx.list
注意:運行在deploy節點上
用法:
/root/deploy-bmp/init/nginx-config/nginx-conf.sh [-h|--help]
/root/deploy-bmp/init/nginx-config/nginx-conf.sh [-l|--list]
/root/deploy-bmp/init/nginx-config/nginx-conf.sh [ [-p|--protocol http] | [-p|--protocol https -c|--cert wildcard|single] ] <{項目1} {項目2} ... {項目n}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出可構建的項目清單
-p|--protocol 協議,可選值【http|https】
-c|--cert 證書類型,可選值【wildcard|single】,分別代表泛域名證書或單域名證書
示例:
#
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -h #--- 幫助
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -l #--- 列出項目清單
#
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -p http #--- http方式,為所有項目創建配置文件
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -p http 項目a 項目b #--- http方式,為【項目a、項目b】創建配置文件
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -p https -c single #--- https普通域名證書方式,為所有項目創建配置文件
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -p https -c wildcard #--- https泛域名證書方式,為所有項目創建配置文件
/root/deploy-bmp/init/nginx-config/nginx-conf.sh -p https -c wildcard 項目a 項目b #--- https泛域名證書方式,為【項目a、項目b】創建配置文件
$ ./gan.sh -d ngx-conf -p https -c single #--- 為所有項目生成配置文件並部署,使用https+單域名證書
$ ./gan.sh -d ngx-conf -p https -c single 項目1 #--- 為項目1生成配置文件並部署,使用https+單域名證書
# dns A記錄
$ ./gan.sh -d ngx-dns --help
用途:根據/root/deploy-bmp/init/nginx-config/nginx.list,在deploy服務器上添加修改域名A記錄
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
/root/deploy-bmp/init/nginx-config/nginx.list
/root/deploy-bmp/init/nginx-config/../../tools/aliyun-dns.sh
/root/deploy-bmp/init/nginx-config/../../tools/godaddy-dns.sh
注意: 運行在deploy上
用法:
/root/deploy-bmp/init/nginx-config/nginx-dns.sh [-h|--help]
/root/deploy-bmp/init/nginx-config/nginx-dns.sh [-l|--list]
/root/deploy-bmp/init/nginx-config/nginx-dns.sh [ -p|--provider aliyun|godaddy|你自定義 ] <{項目1} {項目2} ... {項目n}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出可構建的項目清單
-p|--provider 指定你的域名解析提供商,可選擇aliyun|godaddy,也可以自己添加,畢竟供應商那麼多,我也給不全
示例:
#
/root/deploy-bmp/init/nginx-config/nginx-dns.sh -h #--- 幫助
/root/deploy-bmp/init/nginx-config/nginx-dns.sh -l #--- 列出項目清單
#
/root/deploy-bmp/init/nginx-config/nginx-dns.sh -p aliyun #--- 為所有項目添加域名記錄,域名解析為阿里雲
/root/deploy-bmp/init/nginx-config/nginx-dns.sh -p aliyun 項目a 項目b #--- 為【項目a、項目b】添加域名記錄,域名解析為阿里雲
$ ./gan.sh -d ngx-dns #--- 為所有項目添加域名A記錄
$ ./gan.sh -d ngx-dns 項目1 #--- 為項目1添加域名A記錄
好了,其他就不一一展示了
5.6 其他工具使用
5.6.1 私有倉庫docker鏡像搜索工具
$ ./deploy/docker-image-search.sh --help
用途:查詢docker鏡像
依賴:
/root/deploy-bmp/deploy/env.sh
/root/deploy-bmp/deploy/docker-cluster-service.list
注意:
* 輸入命令時,參數順序不分先後
用法:
./docker-image-search.sh [-h|--help]
./docker-image-search.sh [-l|--list]
./docker-image-search.sh <-e|--exclude {%鏡像版本%}> <-t|--tag {%鏡像版本%}> <-n|--newest {第幾新版本}> <-o|--output {路徑/文件}> <{服務1} ... {服務2} ...>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 清單
-e|--exclude 排除指定鏡像版本,支持模糊定義,一般用於排除今天打包的鏡像版本,用於部署回滾
-t|--tag 鏡像版本(tag)。支持模糊查找
-n|--newest 取第幾新的鏡像版本,例如: -n 1 :代表取最新的那個鏡像版本,-n 2:代表第二新的鏡像,有-n參數時輸出格式為:【服務名 tag版本 tag版本2 ...】;無-n參數時輸出為服務名 \ntag版本 \ntag版本2 \n...
-o|--output 輸出搜索結果不為空的服務名稱 到 指定【路徑/文件】
示例:
./docker-image-search.sh -h
./docker-image-search.sh -l
#
./docker-image-search.sh #--- 返回所有服務所有鏡像版本
./docker-image-search.sh 服務1 #--- 返回服務名為【服務1】的所有鏡像版本
#
./docker-image-search.sh -e 2021 服務1 #--- 返回服務名為服務1,且tag版本不包含【2021】的所有版本
./docker-image-search.sh -t 2021 服務1 #--- 返回服務名為服務1,且tag版本包含【2021】的所有版本
./docker-image-search.sh -n 1 服務1 #--- 返回服務名為服務1,且最新的鏡像tag版本
./docker-image-search.sh -n 2 服務1 #--- 返回服務名為服務1,且次新的鏡像tag版本(第二新)
#
./docker-image-search.sh -t 2021 -n 2 #--- 返回所有服務,且tag名包含【2021】,且次新的鏡像tag版本
./docker-image-search.sh -t 2021 -n 2 服務1 #--- 返回服務名為【服務1】,且tag版本包含【2021】,且次新的鏡像tag版本
./docker-image-search.sh -e 2021.01.22 -n 1 服務1 #--- 返回服務名為【服務1】,且除tag版本包含【2021.01.22】的鏡像外,最新的鏡像tag版本,一般用於排除今天【2021.01.22】的版本以回滾
./docker-image-search.sh -e 2021.01.22 -t 20 服務1 #--- 返回服務名為【服務1】,且除tag版本包含【2021.01.22】的鏡像外,且tag版本包含【20】的鏡像tag版本,返回最新的是個
#
./docker-image-search.sh -e 2021.01.22 -t 2021.01.01.01 -n 1 #--- 返回所有服務,且tag版本不包含【2021.01.22】,且包含【2021.01.01.01】,最新的tag版本
# 今日發佈與回滾:
./docker-image-search.sh -t 2021.01.22 -n 1 -o /root/1.txt #--- 返回所有服務,且tag名稱包含【2021.01.22】(今天),最新的鏡像tag版本,將服務清單輸出到文件/root/1.txt,一般用於發佈今天打包的服務清單
./docker-image-search.sh -e 2021.01.22 -n 1 -o /root/1.txt #--- 返回所有服務,且tag名稱不包含【2021.01.22】(今天),最新的鏡像tag版本,將服務清單輸出到文件/root/1.txt,一般用於今日發佈失敗後的回滾
5.6.2 阿里雲dns查詢與修改工具
$ ./tools/aliyun-dns.sh --help
用途:用於查詢修改dns信息
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
阿里雲CLI:aliyun
注意:
* 輸入命令時,參數順序不分先後
用法:
./aliyun-dns.sh [-h|--help]
./aliyun-dns.sh -A [replace|append|delete|query_domain|query_record] <-d {域名}> <-t [A|TXT|RNAME|...]> <-n {dns記錄名}> <-v {dns記錄值}> <-w {關鍵字}>
參數説明:
-h|--help 此幫助
-A|--Action 指定操作類型replace|append|delete|query_domain|query_record
-d|--domain 指定域名,默認為/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh中定義的${DOMAIN}
-t|--type 指定dns記錄類型A|TXT|CNAME|...
-n|--name 指定dns記錄名稱
-v|--value 指定dns記錄值
-w|--keyword 指定搜索關鍵字,在name及value中匹配
示例:
# 增加與修改:
./aliyun-dns.sh -A [replace|append] <-d 域名> [-t [A|TXT|CNAME|...]] [-n dns記錄名] [-v dns記錄值] #--- replace:刪除現有後新增; append:增加多一條
# 查詢:
./aliyun-dns.sh -A query_domain <-d 域名> #--- 查詢域名信息
./aliyun-dns.sh -A query_record <-d 域名> #--- 查詢域名下所有記錄
./aliyun-dns.sh -A query_record <-d 域名> [-t [A|TXT|CNAME|...]] #--- 查詢域名下該類型所有的記錄
./aliyun-dns.sh -A query_record <-d 域名> [-t [A|TXT|CNAME|...]] [-n dns記錄名] #--- 查詢域名下該類型該 名稱 所有的記錄
./aliyun-dns.sh -A query_record <-d 域名> [-w 關鍵字] #--- 查詢域名下模糊匹配該 名稱或值 所有的記錄
./aliyun-dns.sh -A query_record <-d 域名> [-t [A|TXT|CNAME|...]] [-w 關鍵字] #--- 查詢域名下該類型模糊匹配該 名稱或值 所有的記錄(此功能aliyun有bug)
5.6.3 godaddy dns查詢與修改工具
$ ./tools/godaddy-dns.sh --help
用途:用於查詢修改dns信息
依賴:
注意:
用法:
./godaddy-dns.sh [-h|--help]
./godaddy-dns.sh -A [replace|append|delete|query_domain|query_record] <-d {域名}> <-t [A|TXT|RNAME|...]> <-n {dns記錄名}> <-v {dns記錄值}>
參數説明:
-h|--help 此幫助
-A|--Action 指定操作類型replace|append|delete|query_domain|query_record
-d|--domain 指定域名,默認為/etc/profile.d/run.env.sh中定義的${DOMAIN}
-t|--type 指定dns記錄類型A|TXT|RNAME|...
-n|--name 指定dns記錄名稱
-v|--value 指定dns記錄值
示例:
# 增加與修改:
./godaddy-dns.sh -A [replace|append] <-d 域名> [-t [A|TXT|RNAME|...]] [-n dns記錄名] [-v dns記錄值] #--- replace:刪除現有後新增; append:增加多一條
# 查詢:
./godaddy-dns.sh -A query_domain <-d 域名> #--- 查詢域名信息
./godaddy-dns.sh -A query_record <-d 域名> #--- 查詢域名下所有記錄
./godaddy-dns.sh -A query_record <-d 域名> [-t [A|TXT|RNAME|...]] #--- 查詢域名下該類型所有的記錄
./godaddy-dns.sh -A query_record <-d 域名> [-t [A|TXT|RNAME|...]] [-n dns記錄名] #--- 查詢域名下該類型該名稱所有的記錄
5.6.4 泛域名證書申請與續期工具(支持阿里雲、騰訊雲、華為雲、godaddy,藉助了第三方項目)
$ ./tools/cert-letsencrypt-wildcart.sh --help
用途:用於申請與更新泛域名證書
更新Letsencrypt泛域名證書,拷貝到nginx服務器,然後reload
依賴:
/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
certbot
/root/deploy-bmp/tools/certbot-letencrypt-wildcardcertificates-sh/au.sh
注意:
* 本腳本基於項目https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
* 輸入命令時,參數順序不分先後
用法:
./cert-letsencrypt-wildcart.sh [-h|--help]
./cert-letsencrypt-wildcart.sh [-y|--yun [aly|hwy|godaddy]] [ [-r|--request=]<{主域名}> | [-u|--update=]<{主域名}> ] <-t|--test> #--- 申請或renew泛域名證書
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-y|--yun 指定dns解析商,aly:阿里雲;txy:騰訊雲;hwy:華為雲;godaddy,需要設置certbot-letencrypt-wildcardcertificates-sh/au.sh中相應的key、secret
-r|--request 申請Letsencrypt泛域名證書,短-選項與參數之間不能有空格,默認主域名為zzxia-op-super-invincible-lollipop.run-env.sh中定義的${DOMAIN}
-u|--update renew泛域名證書,要求同上
-t|--test 以--dry-run方式運行演練測試
示例:
./cert-letsencrypt-wildcart.sh -h
./cert-letsencrypt-wildcart.sh -y aly -r -t #--- 測試申請泛域名證書,dns域名解析商是阿里雲,域名是默認為zzxia-op-super-invincible-lollipop.run-env.sh定義的${DOMAIN}
./cert-letsencrypt-wildcart.sh -y aly -r #--- 申請泛域名證書,dns域名解析商是阿里雲,域名是默認為zzxia-op-super-invincible-lollipop.run-env.sh中定義的${DOMAIN}
./cert-letsencrypt-wildcart.sh -y aly -raaa.com #--- 申請泛域名證書,dns域名解析商是阿里雲,域名是aaa.com
./cert-letsencrypt-wildcart.sh -y aly -u #--- 更新泛域名證書,dns域名解析商是阿里雲,域名是默認為zzxia-op-super-invincible-lollipop.run-env.sh中定義的${DOMAIN}
5.6.5 郵件發送工具
$ ./tools/send_mail.sh --help
用途:使用mailx發送郵件
依賴:
mailx
/usr/local/bin/dingding_send_markdown.sh
注意:
* 輸入命令時,參數順序不分先後
用法:
./send_mail.sh [-h|--help]
./send_mail.sh [-s|--subject {主題}] [-c|--content {郵件內容}] <[-a|--attach {文件名1}] ... [-a|--attach {文件名n}]> <-o|--origin-option [{mailx選項]}> [{收件人1} ... <{收件人n}>]
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 查看本幫助
-s|--subject 郵件主題,注意事項:為避免空格問題,一定要用引號引起來,不管是字符串還是變量
-c|--content 郵件內容,注意事項同上
-a|--attach 郵件附件,可以有多個
-o|--origin-option mailx自帶的其他非必須參數選項,可以有多個,注意事項同上
示例:
# 一般用法:(-a 附件文件名不能有空格)
./send_mail.sh [-s "郵件主題"] [-c "郵件內容"] <[-a 文件名1] ... <[-a 文件名n]>> [收件人1] ... <收件人n>
# -c 之 郵件內容高級用法(郵件主題同之):
./send_mail.sh [-s 郵件主題] [-c "[郵件內容]" | "`echo ${郵件內容變量}`" | "`cat 郵件內容文件名`" ] [收件人1] ... <收件人n>
# -o 之 mailx自帶的高級選項用法,例如:添加-c、-b,如下:(更多高級選項請參考man mailx)
./send_mail.sh [-s 郵件主題] [-c "[郵件內容]" ] <[-o "-c 抄送地址"] ... <-o "-b 暗送地址">> [收件人1] ... <收件人n>
# 例如:(注意,分隔處不能有空格)
./send_mail.sh -s "${SS}" -c "222 33" -o "-c admin@gc.com,zhu@gc.com" -o "-b 豬豬俠@163.com" reg@gc.com
./send_mail.sh -s "${SS}" -c "222 33" -o "-c admin@gc.com,zhu@gc.com -b 豬豬俠@163.com" reg@gce.com
5.6.6 將數據輸出為表格工具1
$ ./tools/format_table.sh --help
用途:將數據輸出為表格
依賴:
注意:
* 輸入命令時,參數順序不分先後
用法:
./format_table.sh [-h|--help]
./format_table.sh <-d|--delimeter {分隔符}> <-t|--title {字段名1, 字段名2, ...}> <-r|--row {值1, 值2, ...}> <-f|--file {文件x} #--- 默認分隔符為【,】
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-d|--delimeter : 表格分隔符,默認分隔符為【,】
-t|--title :標題,例如: 'aa, bb,cc'
-r|--row : 行,例如:'aaaa, bbbbb,cccc'
-f|--file : 表格文件名
示例:
#
./format_table.sh -f 文件1 #--- 默認分隔符,標題與內容皆取自【文件1】
./format_table.sh -d '|' -f 文件1 #--- 分隔符為【|】,標題與內容皆取自【文件1】
#
./format_table.sh -d '|' -t 'A|B|C' -r 'aa|bb|cc' -r 'vv| |xx' #--- 定義標題,內容取自【'aa|bb|cc' ; 'vv| |xx'】
./format_table.sh -d '|' -t 'A|B|C' -f 文件1 #--- 定義標題,內容取自【文件1】
5.6.7 將數據輸出為表格工具2(彩色)
$ ./tools/draw_table.sh --help
用途:將文件以表格的形式輸出
依賴:
注意:
* 默認使用【\t】作為表格分隔符,如果是其他,請自行指定,否則會出錯;
* 表格連標題一起至少2行,至少有一行有2個及以上的字段,否則出錯。
* 輸入命令時,參數順序不分先後
用法:
./draw_table.sh [-h|--help]
./draw_table.sh <-d|--delimeter {表格分隔符}> <-s|--style [預定義樣式 | {%自定義樣式}]> <-c|--color [預定義顏色前景,背景,文字 | {%自定義顏色}]> < {文件名}
echo -e "AB\na\tb ......" | ./draw_table.sh <-d|--delimeter {表格分隔符}> <-s|--style [預定義樣式 | {%自定義樣式}]> <-c|--color [預定義顏色前景,背景,文字 | {%自定義顏色}]>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-d|--delimeter :定義表格列之間的分隔符,默認為【\t】
-s|--style :定義表格樣式,默認為【+++++++++,---|||】
# 前9位表示表格邊框,第10位表示填充字符,第11-13 表示行的上、中、下分隔符,第14-16表示列的左、中、右分隔符
s0 :' ' s8 : └─┘│┼│┌─┐ ─ ─│ │
s1 : └┴┘├┼┤┌┬┐ ───│││ s9 : ╚╩╝╠╬╣╔╦╗ ═ ═║ ║
s2 : └─┘│┼│┌─┐ ───│││ s10 : ╚═╝║╬║╔═╗ ═ ═║ ║
s3 : ╚╩╝╠╬╣╔╦╗ ═══║║║ s11 : ╙╨╜╟╫╢╓╥╖ ─ ─║ ║
s4 : ╚═╝║╬║╔═╗ ═══║║║ s12 : ╘╧╛╞╪╡╒╤╕ ═ ═│ │
s5 : ╙╨╜╟╫╢╓╥╖ ───║║║ s13 : ╘╧╛╞╪╡╒╤╕ ═ ═│ │
s6 : ╘╧╛╞╪╡╒╤╕ ═══│││ s14 : ╚╩╝╠╬╣╔╦╗ ───│││
s7 : └┴┘├┼┤┌┬┐ ─ ─│ │ s15 : +++++++++ ---|||
# 自定義
以【%】開頭,比如:【%123456789 abcABC】
#
-c|--color :定義表格顏色,默認為【@4,@8,@4】,含義為【拐角顏色,文字顏色,表格顏色】,或理解為【背景,前景,表格】顏色
# 顏色定義:
@1|@black @5|@blue
@2|@red @6|@purple
@3|@green @7|@cyan
@4|@yellow @8|@white
# 組合顏色
1 : @2,@8,@3
2 : @2,@8,@5
3 : @2,@5,@8
示例:
# 表格輸入
./draw_table.sh < 文件1 #--- 將【文件1】輸出為表格,所有皆為默認
echo -e AB\na\tb | bash ./draw_table.sh #--- 將echo內容輸出為表格,所有皆為默認
# 分隔符
./draw_table.sh < 文件1 #--- 使用默認分隔符
./draw_table.sh -t : < 文件1 #--- 使用默認分隔符【:】
./draw_table.sh -t | < 文件1 #--- 使用默認分隔符【|】
# 樣式
./draw_table.sh -s s15 < 文件1 #--- 使用表格樣式【s15】
./draw_table.sh -s '%123456789 abcABC' < 文件1 #--- 使用自定義表格樣式【%123456789 abcABC】
# 顏色
./draw_table.sh -c @red,@blue,@white < 文件1 #--- 使用背景前景表格顏色為【紅,藍,外】
./draw_table.sh -c @2,@5,@8 < 文件1 #--- 同上
./draw_table.sh -c 3 < 文件1 #--- 同上
./draw_table.sh -c \033[31m,\033[34m,\033[29m < 文件1 #--- 同上
#
./draw_table.sh -t : -s s15 < 文件1 #--- 使用【:】作為分隔符,【s15】為表格樣式
./draw_table.sh -t : -c @2,@5,@8 < 文件1 #--- 使用【:】作為分隔符,【紅,藍,外】為表格顏色
./draw_table.sh -s s15 -c @red,@blue,@white < 文件1 #--- 使用【s15】為表格樣式,【紅,藍,外】為表格顏色
./draw_table.sh -t : -s s15 -c @red,@blue,@white < 文件1 #--- 使用【:】作為分隔符,【s15】為表格樣式,【紅,藍,外】為表格顏色
5.6.8 釘釘消息發送工具
$ ./init/envs.sample/dingding_send_markdown.sh
# 用法: ./dingding_send_markdown.sh --title='sssss' --message="`cat mmm.txt`"
# ./dingding_send_markdown.sh --title 'sssss' --message "$( echo -e "### 用户:${USER} \n### 時間:${TIME} \n\n" )"
# ./dingding_send_markdown.sh --title 'sssss' --message "$( echo -e "### 用户:${USER} \n### 時間:`date` \n\n" )"
# 請將變量【dingding_api_url】修改為你自己的
$ ./init/envs.sample/dingding_conver_to_markdown_list.sh
# 用法: ./dingding_conver_to_markdown_list.sh "[Title]"
# ./dingding_conver_to_markdown_list.sh "[Title]" "aaa"
# ./dingding_conver_to_markdown_list.sh "[Title]" "aaa" "bbb"
# ./dingding_conver_to_markdown_list.sh "[Title]" "aaa" "bbb" ... "<list>"
# 請將變量【api_url】修改為你自己的
5.6.9 登錄警報
$ ./init/send_login_alert_msg.sh
# 用途:用户登錄時發送消息通知
# 注意:腳本拷貝到/etc/profile.d/下
# 自動從/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh引入以下變量,以實現IP白名單及其他依賴變量:
# RUN_ENV=${RUN_ENV:-'dev'}
# EMAIL=${EMAIL:-"kevinzu@xxx.com"}
# TRUST_IPS=${TRUST_IPS:-'辦公室:111.111.111., 家:222.222.22'}
# 依賴:/etc/profile.d/zzxia-op-super-invincible-lollipop.run-env.sh
# /usr/local/bin/dingding_send_markdown.sh
# 用法:
# 用户登錄時自動執行/etc/profile.d/下的腳本,包含本程序
5.6.10 舊docker鏡像清理工具
$ ./init/delete-docker-registry-image/clean_old_versions.py
$ ./init/delete-docker-registry-image/delete_docker_registry_image.py
# 用法(詳細請看README.md):
export REGISTRY_DATA_DIR="/srv/docker/docker_registry/data/docker/registry/v2" \
; cd /root/delete-docker-registry-image \
; ./clean_old_versions.py -s ./delete_docker_registry_image.py -i gcl -u https://127.0.0.1:5000 -l 30 -U ufipf -P 123456 --no_check_certificate \
; docker exec -ti dockerregistry_docker_registry_1 registry garbage-collect /etc/docker/registry/config.yml
5.6.11 pg數據備份還原工具
$ ./pg_backup_or_restore.sh --help
用途:用於pg數據庫備份or還原,一次僅處理一個數據庫。
依賴:
/root/postgresql_daemon.sh
/backup/pg/pg_backup_or_restore_by_user_postgres.sh
注意:需在root賬户下運行,會自動設置訪問限制、刪庫、創建、導入、取消限制。
用法:
./pg_backup_or_restore.sh [-h|--help]
./pg_backup_or_restore.sh [-b|--backup] {PATH/TO/FILENAME} {數據庫名} #--- 備份,文件格式為gzip,備份時會自動在指定的名字後面自動加上.gz
./pg_backup_or_restore.sh [-r|--resotore] {PATH/TO/FILENAME} {數據庫名} #--- 恢復,文件須為gzip格式
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
#
-b|--backup 備份
-r|--resotore 還原
示例:
./pg_list_backup_or_restore.sh --help
用途:用於pg數據庫備份or還原,僅備份或恢復pg_db.list中的數據庫。
依賴:
/root/postgresql_daemon.sh
/backup/pg/pg_list_backup_or_restore_by_user_postgres.sh
注意:需在root賬户下運行,在還原時會自動設置訪問限制、刪庫、創建、導入、取消限制。
用法:
./pg_list_backup_or_restore.sh [-h|--help]
./pg_list_backup_or_restore.sh [-b|--backup] <-d|--path-dir {備份目錄路徑}> <-c<{目標路徑}>|--copy-to-path=<{目標路徑}>> #--- 特別注意-c參數用法
./pg_list_backup_or_restore.sh [-r|--resotore] [-d|--path-dir {備份目錄路徑}]
./pg_list_backup_or_restore.sh [-s|--search] <-p|--search-path {搜索父目錄}> <-n|--search-name {搜索子目錄名}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
#
-b|--backup 備份
-r|--resotore 還原
-s|--search 搜索備份,用來幫助選擇用以還原的備份
-d|--path-dir 目錄,可以是相對或絕對路徑。在備份時,目標目錄必須是不存在的或者是空的,且可寫,默認路徑為./bak;在還原時,必須是已存在的,可讀
-c|--copy-to-path 拷貝副本到新路徑,默認為/oss/backup/pg-pufi/${YEAR}
-p|--search-path 指定搜索路徑,可以是相對或絕對路徑,默認為/oss/backup/pg-pufi/${YEAR}
-n|--search-name 指定搜索子目錄名,支持模糊搜索,默認為修改日期最新的那個
示例:
# 備份:
./pg_list_backup_or_restore.sh -b #--- 備份到默認目錄
./pg_list_backup_or_restore.sh -b -c./aa/bbb #--- 備份到默認目錄,並拷貝副本到./aa/bbb目錄下
./pg_list_backup_or_restore.sh -b -d ./xxx #--- 備份到./xxx目錄下
./pg_list_backup_or_restore.sh -b -d ./xxx -c./aa/bbb #--- 備份到./xxx目錄下,並拷貝副本到./aa/bbb目錄下
# 還原:
./pg_list_backup_or_restore.sh -r -d ./xxx/nnn #--- 從./xxx/nnn還原數據庫
# 搜索:
./pg_list_backup_or_restore.sh -s #--- 在默認位置搜索最新的備份
./pg_list_backup_or_restore.sh -s -n nnn #--- 在默認位置搜索名字為nnn的備份
./pg_list_backup_or_restore.sh -s -p ./aaa/bbb #--- 在./aaa/bbb目錄下搜索最新備份
./pg_list_backup_or_restore.sh -s -p ./aaa/bbb -n nnn #--- 在./aaa/bbb目錄下搜索名字為*nnn*的備份
6 後話
寫文檔是停費神的,將就看吧。如果你在使用中遇到任何問題請在Issues中提出,或留下聯繫方式線下溝通也可以。
寫文檔是停費神的,將就看吧。如果你在使用中遇到任何問題請在Issues中提出,或留下聯繫方式線下溝通也可以。