| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #!/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"
- local MYSQL_HOST=""
- local MYSQL_PORT="3306"
- local MYSQL_DATABASE="aitori"
- local MYSQL_USERNAME="root"
- local MYSQL_PASSWORD=""
- local REDIS_HOST=""
- local REDIS_PORT="6379"
- local REDIS_PASSWORD=""
- local REDIS_DATABASE="1"
- case $ENV in
- dev)
- REMOTE=$REMOTE_DEV
- MYSQL_HOST="127.0.0.1"
- MYSQL_PASSWORD=""
- REDIS_HOST="127.0.0.1"
- REDIS_PASSWORD=""
- ;;
- test)
- REMOTE=$REMOTE_TEST
- MYSQL_HOST="10.146.0.2"
- MYSQL_PASSWORD='mysql@aitori!@#'
- REDIS_HOST="10.146.0.2"
- REDIS_PASSWORD='redis@aitori!@#'
- ;;
- pro)
- REMOTE=$REMOTE_PRO
- MEMORY_LIMIT=""
- MYSQL_HOST="35.189.132.138"
- MYSQL_PASSWORD='mysql@aitori!@#'
- REDIS_HOST="10.146.0.3"
- REDIS_PASSWORD='redis@aitori!@#'
- ;;
- *)
- echo "[-] 未知环境: $ENV"
- exit 1
- ;;
- esac
- echo "[+] ================================"
- echo "[+] 重启远程服务: ${REMOTE}"
- echo "[+] MySQL: ${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}"
- echo "[+] Redis: ${REDIS_HOST}:${REDIS_PORT} db=${REDIS_DATABASE}"
- 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:9901 \
- -p 9902:8090 \
- --volume /etc/localtime:/etc/localtime \
- -v /logs/${MODULE}:/app/logs \
- -v /data/www/file/:/data/www/file/ \
- -e ACTIVE_ENV=${ENV} \
- -e MYSQL_HOST=${MYSQL_HOST} \
- -e MYSQL_PROT=${MYSQL_PORT} \
- -e MYSQL_DATABASE=${MYSQL_DATABASE} \
- -e MYSQL_USERNAME=${MYSQL_USERNAME} \
- -e MYSQL_PASSWORD='${MYSQL_PASSWORD}' \
- -e REDIS_HOST=${REDIS_HOST} \
- -e REDIS_PORT=${REDIS_PORT} \
- -e REDIS_PASSWORD='${REDIS_PASSWORD}' \
- -e REDIS_DATABASE=${REDIS_DATABASE} \
- -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
|