新增部署脚本

This commit is contained in:
2025-12-21 17:57:31 +08:00
parent cfd12f01db
commit 3c102aaa7e
3 changed files with 133 additions and 1 deletions
+100
View File
@@ -0,0 +1,100 @@
#!/bin/bash
# 部署脚本 - 将构建好的 course-web 前端项目上传到服务器
# 支持版本管理和回滚
# 使用方法: ./deploy.sh [deploy|rollback]
SERVER_IP="101.200.208.45"
USERNAME="root"
REMOTE_ROOT="/data/www"
APP_NAME="course-of-life"
DEPLOY_ROOT="${REMOTE_ROOT}/${APP_NAME}-releases"
SYMLINK_PATH="${REMOTE_ROOT}/${APP_NAME}"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
RELEASE_PATH="${DEPLOY_ROOT}/${TIMESTAMP}"
function deploy() {
echo "🚀 开始部署 ${APP_NAME} 到服务器..."
# 1. 环境检查
if ! command -v npm &> /dev/null; then
echo "❌ 错误: 未找到npm命令"
exit 1
fi
# 2. 项目构建
echo "🧹 清理旧构建..."
rm -rf dist
echo "📦 开始构建..."
if ! npm run build; then
echo "❌ 构建失败"
exit 1
fi
if [ ! -d "dist" ]; then
echo "❌ 错误: dist目录不存在"
exit 1
fi
# 3. 准备远程目录
echo "📁 准备远程目录: ${RELEASE_PATH}"
ssh "${USERNAME}@${SERVER_IP}" "mkdir -p ${RELEASE_PATH}" || {
echo "❌ 无法创建远程目录"
exit 1
}
# 4. 上传文件
echo "📤 上传文件..."
if scp -r dist/* "${USERNAME}@${SERVER_IP}:${RELEASE_PATH}/"; then
echo "✅ 文件上传成功"
else
echo "❌ 文件上传失败"
# 清理失败的发布目录
ssh "${USERNAME}@${SERVER_IP}" "rm -rf ${RELEASE_PATH}"
exit 1
fi
# 5. 切换版本 (原子操作)
echo "🔄 切换当前版本..."
# ln -sfn: force update symlink
ssh "${USERNAME}@${SERVER_IP}" "ln -sfn ${RELEASE_PATH} ${SYMLINK_PATH}" || {
echo "❌ 版本切换失败"
exit 1
}
# 6. 权限修正
ssh "${USERNAME}@${SERVER_IP}" "chmod -R 755 ${RELEASE_PATH}"
# 7. 清理旧版本 (保留最近5个)
echo "🧹 清理旧版本..."
ssh "${USERNAME}@${SERVER_IP}" "cd ${DEPLOY_ROOT} && ls -t | tail -n +6 | xargs -I {} rm -rf {}"
echo "✅ 部署完成!"
echo "🌍 访问地址: http://${SERVER_IP}/${APP_NAME}/"
}
function rollback() {
echo "Reverting to previous version..."
# 获取倒数第二个版本目录
PREV_VERSION=$(ssh "${USERNAME}@${SERVER_IP}" "cd ${DEPLOY_ROOT} && ls -t | head -n 2 | tail -n 1")
if [ -z "$PREV_VERSION" ]; then
echo "❌ 没有可回滚的版本"
exit 1
fi
echo "🔄 回滚到版本: ${PREV_VERSION}"
ssh "${USERNAME}@${SERVER_IP}" "ln -sfn ${DEPLOY_ROOT}/${PREV_VERSION} ${SYMLINK_PATH}" && \
echo "✅ 回滚成功" || echo "❌ 回滚失败"
}
# 主逻辑
case "$1" in
rollback)
rollback
;;
*)
deploy
;;
esac
+1
View File
@@ -5,6 +5,7 @@ import tailwindcss from '@tailwindcss/vite'
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
base: '/course-of-life/',
server: {
proxy: {
'/api': {