From 530f6b8fec8b99c41ca9f350f87eb36b9081e37d Mon Sep 17 00:00:00 2001 From: xiaosi <2652281683@qq.com> Date: Fri, 4 Sep 2026 15:26:02 +0800 Subject: [PATCH] chore: add shared frontend deploy script Provide scripts/deploy.sh and npm run deploy for build + rsync-like upload to the production nginx dist directory over SSH. --- package.json | 3 +- scripts/deploy.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100755 scripts/deploy.sh diff --git a/package.json b/package.json index 7ede254..239cb3c 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "deploy": "bash scripts/deploy.sh" }, "dependencies": { "axios": "^1.6.8", diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100755 index 0000000..6b9d91b --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# 部署 laic-frontend 到生产 nginx 目录 +# +# 用法: +# npm run deploy +# ./scripts/deploy.sh +# ./scripts/deploy.sh --skip-build +# +# 依赖: +# - Node.js / npm +# - ssh 能免密登录 DEPLOY_HOST(默认 jg-serv1,见 ~/.ssh/config) +# +# 可选环境变量: +# DEPLOY_HOST=jg-serv1 +# DEPLOY_PATH=/usr/share/nginx/laic-frontend/dist + +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +DEPLOY_HOST="${DEPLOY_HOST:-jg-serv1}" +DEPLOY_PATH="${DEPLOY_PATH:-/usr/share/nginx/laic-frontend/dist}" +SKIP_BUILD=0 + +for arg in "$@"; do + case "$arg" in + --skip-build) SKIP_BUILD=1 ;; + -h|--help) + sed -n '2,20p' "$0" + exit 0 + ;; + *) + echo "未知参数: $arg" >&2 + echo "支持: --skip-build | --help" >&2 + exit 1 + ;; + esac +done + +need() { + command -v "$1" >/dev/null 2>&1 || { + echo "缺少命令: $1" >&2 + exit 1 + } +} + +need npm +need ssh +need tar + +echo "==> 检查 SSH: $DEPLOY_HOST" +if ! ssh -o BatchMode=yes -o ConnectTimeout=8 "$DEPLOY_HOST" 'echo ok' >/dev/null; then + echo "无法免密 SSH 到 $DEPLOY_HOST。请先配置 ~/.ssh/config 与密钥。" >&2 + exit 1 +fi + +if [[ "$SKIP_BUILD" -eq 0 ]]; then + echo "==> npm run build" + npm run build +else + echo "==> 跳过 build(--skip-build)" +fi + +if [[ ! -d dist ]] || [[ -z "$(ls -A dist 2>/dev/null || true)" ]]; then + echo "dist/ 不存在或为空,请先构建。" >&2 + exit 1 +fi + +echo "==> 同步 dist/ -> ${DEPLOY_HOST}:${DEPLOY_PATH}" +# macOS tar 可能带 Apple xattr;远端 GNU tar 会告警,不影响内容 +tar -C dist -czf - . \ + | ssh -o BatchMode=yes "$DEPLOY_HOST" \ + "mkdir -p '$DEPLOY_PATH' && rm -rf '$DEPLOY_PATH'/* && tar -C '$DEPLOY_PATH' -xzf -" + +echo "==> 校验远端文件" +ssh -o BatchMode=yes "$DEPLOY_HOST" \ + "test -f '$DEPLOY_PATH/index.html' && ls -lah '$DEPLOY_PATH' | head -20" + +echo "DEPLOY_OK host=$DEPLOY_HOST path=$DEPLOY_PATH"