You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

56 lines
2.3 KiB

#!/usr/bin/env bash
# ============================================================
# crm-app 更新重启脚本(测试环境自包含 compose,仅重启 crm-app)
#
# 前提:服务器上只有 jar(无源码)。crm-app 用含 LibreOffice 的基础镜像
# crm-runtime:latest + 挂载 crm-app-1.0.0-SNAPSHOT.jar 运行。mysql/redis/minio/nginx 不动。
#
# 用法:把本地打好的 crm-app-1.0.0-SNAPSHOT.jar 上传到项目根目录后,运行:
# ./deploy/restart.sh # 从项目根目录调用
# 或 cd deploy && ./restart.sh
# ============================================================
set -euo pipefail
# 定位项目根目录(本脚本在 deploy/ 下,根目录是其上一级)
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
JAR="crm-app-1.0.0-SNAPSHOT.jar"
COMPOSE_FILE="docker-compose.yml"
BASE_IMAGE="crm-runtime:latest"
BASE_DOCKERFILE="deploy/Dockerfile.base"
SERVICE="crm-app"
# docker compose v2 优先,回退 v1
if docker compose version >/dev/null 2>&1; then
DC="docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
DC="docker-compose"
else
echo "[✗] 未找到 docker compose / docker-compose" >&2; exit 1
fi
echo "==> 前置检查(项目根:$ROOT"
[ -f "$JAR" ] || { echo "[✗] 缺少 $JAR(请把本地打好的 jar 上传到项目根目录)" >&2; exit 1; }
[ -f "$COMPOSE_FILE" ] || { echo "[✗] 缺少 $COMPOSE_FILE" >&2; exit 1; }
echo " jar 大小:$(du -h "$JAR" | cut -f1)"
# 基础镜像不存在则 build(一次性;LibreOffice 层较久)
if ! docker image inspect "$BASE_IMAGE" >/dev/null 2>&1; then
echo "==> 基础镜像 $BASE_IMAGE 不存在,首次构建(含 LibreOffice,耗时较久)..."
docker build -f "$BASE_DOCKERFILE" -t "$BASE_IMAGE" .
else
echo "==> 基础镜像已存在,跳过构建"
fi
echo "==> 仅重启 $SERVICE(加载新 jar,其余服务不动)"
# --no-deps 不牵动 mysql/redis/minio;--force-recreate 确保重挂新 jar
$DC -f "$COMPOSE_FILE" up -d --no-deps --force-recreate "$SERVICE"
echo "==> 最近日志(10s 内启动情况)"
sleep 3
$DC -f "$COMPOSE_FILE" logs --tail=30 "$SERVICE"
echo
echo "[i] crm-app 不直接暴露端口,经 nginx:80 访问。核对状态:"
docker ps --filter "name=$SERVICE" --format ' {{.Names}} {{.Status}}'