build.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. set -e
  3. # ========== 配置 ==========
  4. PROJECT_DIR=$(cd "$(dirname "$0")" && pwd)
  5. VERSION='1.2.1'
  6. ENV='dev'
  7. MODULE='aitori-bi-v2'
  8. REGISTRY='registry.cn-shenzhen.aliyuncs.com/bantbox'
  9. REMOTE_DEV="root@192.168.0.155"
  10. REMOTE_TEST="root@34.146.228.227"
  11. REMOTE_PRO="root@34.146.222.45"
  12. # ========== 函数 ==========
  13. usage() {
  14. echo ""
  15. echo "Usage:"
  16. echo " $0 [-e env] [-v version] [-h]"
  17. echo ""
  18. echo "Options:"
  19. echo " -e 部署环境 (dev/test/pro),默认: dev"
  20. echo " -v 镜像版本号,默认: 1.2.1"
  21. echo " -h 显示帮助"
  22. echo ""
  23. }
  24. docker_login() {
  25. echo "[+] Docker login..."
  26. docker login --username=arche@1030463161912241 --password=bantbox@2021 registry.cn-shenzhen.aliyuncs.com
  27. }
  28. build_image() {
  29. local IMAGE_TAG="${REGISTRY}/${MODULE}:${VERSION}-${ENV}"
  30. echo "[+] ================================"
  31. echo "[+] 开始构建镜像..."
  32. echo "[+] 环境: ${ENV}"
  33. echo "[+] 版本: ${VERSION}"
  34. echo "[+] 镜像: ${IMAGE_TAG}"
  35. echo "[+] ================================"
  36. cd "$PROJECT_DIR"
  37. docker build \
  38. --build-arg ACTIVE_ENV="${ENV}" \
  39. -t "${MODULE}:${VERSION}" \
  40. -t "${IMAGE_TAG}" \
  41. .
  42. echo "[+] 推送镜像: ${IMAGE_TAG}"
  43. docker push "${IMAGE_TAG}"
  44. echo "[+] 构建完成"
  45. echo "[+] ================================"
  46. }
  47. restart_app() {
  48. local IMAGE_TAG="${REGISTRY}/${MODULE}:${VERSION}-${ENV}"
  49. local REMOTE=""
  50. local MEMORY_LIMIT="-m 2g"
  51. case $ENV in
  52. dev) REMOTE=$REMOTE_DEV ;;
  53. test) REMOTE=$REMOTE_TEST ;;
  54. pro)
  55. REMOTE=$REMOTE_PRO
  56. MEMORY_LIMIT=""
  57. ;;
  58. *)
  59. echo "[-] 未知环境: $ENV"
  60. exit 1
  61. ;;
  62. esac
  63. echo "[+] ================================"
  64. echo "[+] 重启远程服务: ${REMOTE}"
  65. echo "[+] ================================"
  66. ssh "$REMOTE" << EEOOFF
  67. set -e
  68. echo "[remote] 停止旧容器..."
  69. docker rm -f ${MODULE} || true
  70. echo "[remote] 拉取新镜像..."
  71. docker pull ${IMAGE_TAG}
  72. echo "[remote] 启动新容器..."
  73. docker run -d \
  74. --name ${MODULE} \
  75. --restart always \
  76. ${MEMORY_LIMIT} \
  77. -p 9901:8080 \
  78. -p 9902:8090 \
  79. --volume /etc/localtime:/etc/localtime \
  80. -v /logs:/logs \
  81. -v /data/www/file/:/data/www/file/ \
  82. -v /usr/share/fonts/:/usr/share/fonts/ \
  83. -e ACTIVE_ENV=${ENV} \
  84. --privileged=true \
  85. ${IMAGE_TAG}
  86. echo "[remote] 容器已启动"
  87. docker ps --filter "name=${MODULE}" --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
  88. EEOOFF
  89. echo "[+] 远程部署完成"
  90. echo "[+] ================================"
  91. }
  92. # ========== 解析参数 ==========
  93. while getopts "e:v:h" arg; do
  94. case $arg in
  95. e)
  96. ENV=$OPTARG
  97. echo "[+] 部署环境: $ENV"
  98. ;;
  99. v)
  100. VERSION=$OPTARG
  101. echo "[+] 镜像版本: $VERSION"
  102. ;;
  103. h)
  104. usage
  105. exit 0
  106. ;;
  107. *)
  108. usage
  109. exit 1
  110. ;;
  111. esac
  112. done
  113. # ========== 执行 ==========
  114. docker_login
  115. build_image
  116. restart_app