Files
MemeStudio/deploy.sh

48 lines
2.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# ─── 配置 ───────────────────────────────────────────
SERVER="root@119.91.211.52"
REMOTE_DIR="/root/apps/meme-studio"
APP_NAME="meme-studio"
# ─── 颜色 ───────────────────────────────────────────
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m'
step() { echo -e "\n${GREEN}$1${NC}"; }
warn() { echo -e "${YELLOW}$1${NC}"; }
fail() { echo -e "${RED}$1${NC}"; exit 1; }
START_TIME=$(date +%s)
# ─── 1. 本地构建 ────────────────────────────────────
step "构建项目..."
pnpm run build || fail "构建失败"
# ─── 2. 创建远程目录 ────────────────────────────────
step "初始化远程目录..."
ssh "$SERVER" "mkdir -p $REMOTE_DIR/.next/static $REMOTE_DIR/public"
# ─── 3. 同步文件(排除 node_modules由服务器安装───
step "同步文件到服务器..."
rsync -az --delete --exclude='node_modules' .next/standalone/ "$SERVER:$REMOTE_DIR/"
rsync -az .next/static/ "$SERVER:$REMOTE_DIR/.next/static/"
rsync -az public/ "$SERVER:$REMOTE_DIR/public/"
rsync -az prisma/ "$SERVER:$REMOTE_DIR/prisma/"
rsync -az .env.production "$SERVER:$REMOTE_DIR/.env"
rsync -az ecosystem.config.js "$SERVER:$REMOTE_DIR/"
rsync -az package.json package-lock.json "$SERVER:$REMOTE_DIR/"
# ─── 4. 远程安装依赖 & 重启 ─────────────────────────
step "安装依赖并重启服务..."
ssh "$SERVER" "cd $REMOTE_DIR && npm install --production && npx prisma generate && (pm2 restart $APP_NAME 2>/dev/null || pm2 start ecosystem.config.js)"
# ─── 完成 ───────────────────────────────────────────
END_TIME=$(date +%s)
ELAPSED=$((END_TIME - START_TIME))
echo -e "\n${GREEN}✔ 部署完成!耗时 ${ELAPSED}s${NC}"