Files
hair-keeper/simple_deploy.sh

69 lines
2.1 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.
#!/bin/bash
# 此脚本用来一键部署到生产服务器
# 需事先配置好ssh免密登录目标服务器需要安装好node、pnpm、tsx、pm2来运行程序
set -e
# 配置
REMOTE_USER=""
REMOTE_HOST=""
REMOTE_PORT=""
PROJECT_NAME=""
REMOTE_DIR="~/$PROJECT_NAME"
pnpm run lint
echo "🔨 开始构建项目..."
pnpm run build
echo "📦 准备部署文件..."
# 创建临时目录
TEMP_DIR=$(mktemp -d)
trap "rm -rf $TEMP_DIR" EXIT
# 复制必要文件
cp -r .next-prod $TEMP_DIR/
cp -r public $TEMP_DIR/
cp -r prisma $TEMP_DIR/
cp package.json $TEMP_DIR/
cp pnpm-lock.yaml $TEMP_DIR/
cp next.config.ts $TEMP_DIR/
echo "🚀 上传文件到服务器..."
ssh ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p ${REMOTE_DIR}"
rsync -avz --delete \
--exclude=node_modules \
--exclude=.git \
$TEMP_DIR/ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
# 上传环境变量文件
echo "📝 上传环境变量文件..."
[ -f .env ] && scp .env ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/.env
[ -f .env.production ] && scp .env.production ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/.env.production
echo "⚙️ 在服务器上配置和启动服务..."
ssh ${REMOTE_USER}@${REMOTE_HOST} << ENDSSH
cd ${REMOTE_DIR}
# 安装生产依赖包括prisma用于数据库迁移和pm2用于进程管理
echo "📥 安装依赖..."
pnpm install --prod
# 运行数据库迁移
echo "🗄️ 运行数据库迁移..."
npx prisma migrate deploy
npx prisma generate
# 使用PM2管理Next.js服务
echo "🔄 使用PM2重启服务..."
/home/user/.local/share/pnpm/pm2 delete $PROJECT_NAME || true
/home/user/.local/share/pnpm/pm2 start pnpm --name $PROJECT_NAME -- start -p ${REMOTE_PORT}
# 保存当前 PM2 进程列表的快照,使其在系统重启后能自动恢复
/home/user/.local/share/pnpm/pm2 save
echo "✅ 部署完成!服务运行在端口 ${REMOTE_PORT}"
echo "📊 查看服务状态: pm2 status"
echo "📝 查看日志: pm2 logs $PROJECT_NAME"
echo "❌ 关闭服务: pm2 delete $PROJECT_NAME"
ENDSSH
echo "🎉 部署成功!"
echo "访问地址: http://${REMOTE_HOST}:${REMOTE_PORT}"