From c4ac36fc037ac76c6678ec46b05ecdaad7e64017 Mon Sep 17 00:00:00 2001 From: MikiVL Date: Sun, 26 Jul 2026 09:53:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=83=A8=E7=BD=B2=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=9A=E5=88=87=E6=8D=A2=E5=88=B0=20Caddy=20+=20sys?= =?UTF-8?q?temd=20=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - deploy.sh 改为使用 Caddy host 架构(不再依赖 docker nginx) - 前端 dist 部署到 /opt/mikivl/note(Caddy note.mikivl.online root) - 主页从 ../mikivl.online/index.html 上传(防止覆盖最新主页) - 添加 better-sqlite3 自动重新编译逻辑 - docker-compose.yml 移除 program1 只读挂载限制 Co-Authored-By: Claude Sonnet 4.6 --- deploy.sh | 69 ++++++++++++++++++++++++++++++---------------- docker-compose.yml | 2 +- 2 files changed, 47 insertions(+), 24 deletions(-) diff --git a/deploy.sh b/deploy.sh index 46cda80..2645c76 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,51 +1,74 @@ #!/usr/bin/env bash # deploy.sh — 本地运行,构建并上传到 VPS +# 架构:Caddy (host) + Node.js systemd service (host) set -euo pipefail -VPS_USER="root" -VPS_HOST="your.vps.ip" # ← 替换为你的 VPS IP 或域名 +VPS_HOST="mikivl" VPS_DIR="/opt/mikivl" +# 主页文件位置(使用 mikivl.online 主仓库的最新版本) +HOMEPAGE_SRC="../mikivl.online/index.html" info() { printf "\033[36m[INFO]\033[0m %s\n" "$*"; } ok() { printf "\033[32m[OK]\033[0m %s\n" "$*"; } die() { printf "\033[31m[ERROR]\033[0m %s\n" "$*" >&2; exit 1; } # ── Step 1: 本地构建 ────────────────────────────────────────────────────────── -info "Building Vite app (base=/app/) ..." +info "Building Vite app ..." npm run build ok "Build complete → dist/" # ── Step 2: 上传文件 ────────────────────────────────────────────────────────── -info "Uploading to ${VPS_USER}@${VPS_HOST}:${VPS_DIR} ..." +info "Uploading to ${VPS_HOST}:${VPS_DIR} ..." -ssh "${VPS_USER}@${VPS_HOST}" "mkdir -p ${VPS_DIR}/{homepage,app,nginx,program1/server,program1/node_modules}" +# 个人主页(从主仓库上传最新版本) +if [ -f "${HOMEPAGE_SRC}" ]; then + scp "${HOMEPAGE_SRC}" "${VPS_HOST}:${VPS_DIR}/homepage/index.html" + ok "Homepage uploaded from ${HOMEPAGE_SRC}" +else + die "Homepage source not found: ${HOMEPAGE_SRC}" +fi -# 个人主页 -scp homepage/index.html "${VPS_USER}@${VPS_HOST}:${VPS_DIR}/homepage/" - -# App 构建产物 -rsync -az --delete dist/ "${VPS_USER}@${VPS_HOST}:${VPS_DIR}/app/" +# App 构建产物 → note 目录(Caddy 的 note.mikivl.online root) +rsync -az --delete dist/ "${VPS_HOST}:${VPS_DIR}/note/" # 后端源码 -rsync -az server/ "${VPS_USER}@${VPS_HOST}:${VPS_DIR}/program1/server/" -scp package.json package-lock.json "${VPS_USER}@${VPS_HOST}:${VPS_DIR}/program1/" - -# Nginx 配置 + Docker Compose -scp nginx/default.conf "${VPS_USER}@${VPS_HOST}:${VPS_DIR}/nginx/" -scp docker-compose.yml "${VPS_USER}@${VPS_HOST}:${VPS_DIR}/" +rsync -az server/ "${VPS_HOST}:${VPS_DIR}/program1/server/" +scp package.json package-lock.json "${VPS_HOST}:${VPS_DIR}/program1/" ok "Upload complete." # ── Step 3: VPS 上安装依赖并重启服务 ───────────────────────────────────────── -info "Restarting services on VPS ..." +info "Installing dependencies and restarting program1 service on VPS ..." -ssh "${VPS_USER}@${VPS_HOST}" bash <<'REMOTE' +ssh "${VPS_HOST}" bash <<'REMOTE' set -euo pipefail +NODE=/root/.nvm/versions/node/v24.15.0/bin/node +NPM=/root/.nvm/versions/node/v24.15.0/bin/npm + cd /opt/mikivl/program1 -npm ci --omit=dev -cd /opt/mikivl -docker compose up -d --remove-orphans -docker compose ps +${NPM} ci --ignore-scripts + +# 检查 better-sqlite3 是否需要重新编译 +REQUIRED_VERSION=$(${NODE} -e "process.stdout.write(String(process.versions.modules))") +BUILT_VERSION=$(${NODE} -e " +try { + const b = require('./node_modules/better-sqlite3'); + process.stdout.write('ok'); +} catch(e) { + process.stdout.write('rebuild'); +} +" 2>/dev/null || echo "rebuild") + +if [ "${BUILT_VERSION}" = "rebuild" ]; then + echo "[INFO] Rebuilding better-sqlite3 for Node $(${NODE} -v) ..." + cd node_modules/better-sqlite3 + ${NODE} /root/.nvm/versions/node/v24.15.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js rebuild + cd ../.. +fi + +systemctl restart program1.service +sleep 3 +systemctl is-active program1.service && echo "[OK] program1.service is running" REMOTE -ok "Deployment complete! → https://www.mikivl.online" +ok "Deployment complete! → https://note.mikivl.online" diff --git a/docker-compose.yml b/docker-compose.yml index 7baa322..cc9d2b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: - MODELS_FILE=/app/models_data/models.json - NODE_ENV=production volumes: - - ./program1:/app:ro + - ./program1:/app - models_data:/app/models_data expose: - "3001"