Selaa lähdekoodia

添加执行脚本

ChenYu 7 kuukautta sitten
vanhempi
sitoutus
bfa9d153a5
4 muutettua tiedostoa jossa 165 lisäystä ja 2 poistoa
  1. 11 0
      .dockerignore
  2. 13 1
      Dockerfile
  3. 140 0
      build.sh
  4. 1 1
      src/main/resources/application.yaml

+ 11 - 0
.dockerignore

@@ -0,0 +1,11 @@
+.git
+.gitignore
+.idea
+*.iml
+target
+doc
+README.md
+build.sh
+*.md
+.dockerignore
+Dockerfile

+ 13 - 1
Dockerfile

@@ -1,3 +1,15 @@
+# ============ Stage 1: Maven Build ============
+FROM maven:3.9-eclipse-temurin-21 AS builder
+
+WORKDIR /build
+
+COPY pom.xml .
+RUN mvn dependency:go-offline -B
+
+COPY src ./src
+RUN mvn clean package -DskipTests -B
+
+# ============ Stage 2: Runtime ============
 FROM eclipse-temurin:21-jre
 
 LABEL maintainer="chenyu"
@@ -18,7 +30,7 @@ WORKDIR /app
 RUN mkdir -p /app/logs \
     && chown -R 1000:1000 /app
 
-COPY target/*.jar /app/app.jar
+COPY --from=builder /build/target/*.jar /app/app.jar
 RUN chown 1000:1000 /app/app.jar
 
 USER 1000

+ 140 - 0
build.sh

@@ -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

+ 1 - 1
src/main/resources/application.yaml

@@ -1,6 +1,6 @@
 # ---  server  ---
 server:
-  port: 8080
+  port: 9901
 # ---  spring  ---
 spring:
   servlet: