|
|
@@ -0,0 +1,140 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+set -e
|
|
|
+
|
|
|
+# ========== 配置 ==========
|
|
|
+PROJECT_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
|
+VERSION='1.2.1'
|
|
|
+ENV='dev'
|
|
|
+MODULE='aitori-bi-v2'
|
|
|
+REGISTRY='registry.cn-shenzhen.aliyuncs.com/bantbox'
|
|
|
+
|
|
|
+REMOTE_DEV="root@192.168.0.155"
|
|
|
+REMOTE_TEST="root@34.146.228.227"
|
|
|
+REMOTE_PRO="root@34.146.222.45"
|
|
|
+
|
|
|
+# ========== 函数 ==========
|
|
|
+
|
|
|
+usage() {
|
|
|
+ echo ""
|
|
|
+ echo "Usage:"
|
|
|
+ echo " $0 [-e env] [-v version] [-h]"
|
|
|
+ echo ""
|
|
|
+ echo "Options:"
|
|
|
+ echo " -e 部署环境 (dev/test/pro),默认: dev"
|
|
|
+ echo " -v 镜像版本号,默认: 1.2.1"
|
|
|
+ echo " -h 显示帮助"
|
|
|
+ echo ""
|
|
|
+}
|
|
|
+
|
|
|
+docker_login() {
|
|
|
+ echo "[+] Docker login..."
|
|
|
+ docker login --username=arche@1030463161912241 --password=bantbox@2021 registry.cn-shenzhen.aliyuncs.com
|
|
|
+}
|
|
|
+
|
|
|
+build_image() {
|
|
|
+ local IMAGE_TAG="${REGISTRY}/${MODULE}:${VERSION}-${ENV}"
|
|
|
+
|
|
|
+ echo "[+] ================================"
|
|
|
+ echo "[+] 开始构建镜像..."
|
|
|
+ echo "[+] 环境: ${ENV}"
|
|
|
+ echo "[+] 版本: ${VERSION}"
|
|
|
+ echo "[+] 镜像: ${IMAGE_TAG}"
|
|
|
+ echo "[+] ================================"
|
|
|
+
|
|
|
+ cd "$PROJECT_DIR"
|
|
|
+
|
|
|
+ docker build \
|
|
|
+ --build-arg ACTIVE_ENV="${ENV}" \
|
|
|
+ -t "${MODULE}:${VERSION}" \
|
|
|
+ -t "${IMAGE_TAG}" \
|
|
|
+ .
|
|
|
+
|
|
|
+ echo "[+] 推送镜像: ${IMAGE_TAG}"
|
|
|
+ docker push "${IMAGE_TAG}"
|
|
|
+
|
|
|
+ echo "[+] 构建完成"
|
|
|
+ echo "[+] ================================"
|
|
|
+}
|
|
|
+
|
|
|
+restart_app() {
|
|
|
+ local IMAGE_TAG="${REGISTRY}/${MODULE}:${VERSION}-${ENV}"
|
|
|
+ local REMOTE=""
|
|
|
+ local MEMORY_LIMIT="-m 2g"
|
|
|
+
|
|
|
+ case $ENV in
|
|
|
+ dev) REMOTE=$REMOTE_DEV ;;
|
|
|
+ test) REMOTE=$REMOTE_TEST ;;
|
|
|
+ pro)
|
|
|
+ REMOTE=$REMOTE_PRO
|
|
|
+ MEMORY_LIMIT=""
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ echo "[-] 未知环境: $ENV"
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+
|
|
|
+ echo "[+] ================================"
|
|
|
+ echo "[+] 重启远程服务: ${REMOTE}"
|
|
|
+ echo "[+] ================================"
|
|
|
+
|
|
|
+ ssh "$REMOTE" << EEOOFF
|
|
|
+set -e
|
|
|
+echo "[remote] 停止旧容器..."
|
|
|
+docker rm -f ${MODULE} || true
|
|
|
+
|
|
|
+echo "[remote] 拉取新镜像..."
|
|
|
+docker pull ${IMAGE_TAG}
|
|
|
+
|
|
|
+echo "[remote] 启动新容器..."
|
|
|
+docker run -d \
|
|
|
+ --name ${MODULE} \
|
|
|
+ --restart always \
|
|
|
+ ${MEMORY_LIMIT} \
|
|
|
+ -p 9901:8080 \
|
|
|
+ -p 9902:8090 \
|
|
|
+ --volume /etc/localtime:/etc/localtime \
|
|
|
+ -v /logs:/logs \
|
|
|
+ -v /data/www/file/:/data/www/file/ \
|
|
|
+ -v /usr/share/fonts/:/usr/share/fonts/ \
|
|
|
+ -e ACTIVE_ENV=${ENV} \
|
|
|
+ --privileged=true \
|
|
|
+ ${IMAGE_TAG}
|
|
|
+
|
|
|
+echo "[remote] 容器已启动"
|
|
|
+docker ps --filter "name=${MODULE}" --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
|
|
|
+EEOOFF
|
|
|
+
|
|
|
+ echo "[+] 远程部署完成"
|
|
|
+ echo "[+] ================================"
|
|
|
+}
|
|
|
+
|
|
|
+# ========== 解析参数 ==========
|
|
|
+
|
|
|
+while getopts "e:v:h" arg; do
|
|
|
+ case $arg in
|
|
|
+ e)
|
|
|
+ ENV=$OPTARG
|
|
|
+ echo "[+] 部署环境: $ENV"
|
|
|
+ ;;
|
|
|
+ v)
|
|
|
+ VERSION=$OPTARG
|
|
|
+ echo "[+] 镜像版本: $VERSION"
|
|
|
+ ;;
|
|
|
+ h)
|
|
|
+ usage
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ usage
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+done
|
|
|
+
|
|
|
+# ========== 执行 ==========
|
|
|
+
|
|
|
+docker_login
|
|
|
+build_image
|
|
|
+restart_app
|