168 lines
4.4 KiB
Bash
168 lines
4.4 KiB
Bash
#!/bin/bash
|
||
|
||
# Paper Burner X - 部署前检查和修复脚本
|
||
|
||
echo "======================================"
|
||
echo "Paper Burner X - 部署前检查"
|
||
echo "======================================"
|
||
echo ""
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 检查函数
|
||
check_command() {
|
||
if command -v $1 &> /dev/null; then
|
||
echo -e "${GREEN}✓${NC} $1 已安装"
|
||
return 0
|
||
else
|
||
echo -e "${RED}✗${NC} $1 未安装"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 1. 检查必要的命令
|
||
echo "1. 检查系统依赖..."
|
||
check_command docker || DOCKER_MISSING=1
|
||
check_command docker-compose || DOCKER_COMPOSE_MISSING=1
|
||
check_command node || NODE_MISSING=1
|
||
check_command npm || NPM_MISSING=1
|
||
echo ""
|
||
|
||
# 2. 检查环境变量文件
|
||
echo "2. 检查配置文件..."
|
||
if [ -f ".env" ]; then
|
||
echo -e "${GREEN}✓${NC} .env 文件存在"
|
||
else
|
||
echo -e "${YELLOW}!${NC} .env 文件不存在,从模板复制..."
|
||
cp .env.example .env
|
||
echo -e "${YELLOW}⚠${NC} 请编辑 .env 文件并配置必要的环境变量!"
|
||
echo " 必须修改:"
|
||
echo " - DB_PASSWORD"
|
||
echo " - JWT_SECRET"
|
||
echo " - ADMIN_EMAIL"
|
||
echo " - ADMIN_PASSWORD"
|
||
fi
|
||
echo ""
|
||
|
||
# 3. 安装后端依赖
|
||
echo "3. 安装后端依赖..."
|
||
if [ -d "server/node_modules" ]; then
|
||
echo -e "${GREEN}✓${NC} 后端依赖已安装"
|
||
else
|
||
echo -e "${YELLOW}→${NC} 正在安装后端依赖..."
|
||
cd server
|
||
npm install
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✓${NC} 后端依赖安装成功"
|
||
else
|
||
echo -e "${RED}✗${NC} 后端依赖安装失败"
|
||
exit 1
|
||
fi
|
||
cd ..
|
||
fi
|
||
echo ""
|
||
|
||
# 4. 生成 Prisma Client
|
||
echo "4. 生成 Prisma Client..."
|
||
cd server
|
||
npx prisma generate
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✓${NC} Prisma Client 生成成功"
|
||
else
|
||
echo -e "${RED}✗${NC} Prisma Client 生成失败"
|
||
exit 1
|
||
fi
|
||
cd ..
|
||
echo ""
|
||
|
||
# 5. 检查前端文件
|
||
echo "5. 检查前端文件..."
|
||
if [ -f "index.html" ]; then
|
||
echo -e "${GREEN}✓${NC} index.html 存在"
|
||
else
|
||
echo -e "${RED}✗${NC} index.html 不存在"
|
||
exit 1
|
||
fi
|
||
|
||
if [ -f "js/storage/storage-adapter.js" ]; then
|
||
echo -e "${GREEN}✓${NC} storage-adapter.js 存在"
|
||
else
|
||
echo -e "${RED}✗${NC} storage-adapter.js 不存在"
|
||
exit 1
|
||
fi
|
||
echo ""
|
||
|
||
# 6. 提供部署选项
|
||
echo "======================================"
|
||
echo "部署选项:"
|
||
echo "======================================"
|
||
echo ""
|
||
echo "选择部署模式:"
|
||
echo " 1) Vercel 前端部署(纯静态)"
|
||
echo " 2) Docker 后端部署(完整功能)"
|
||
echo " 3) 本地开发模式"
|
||
echo ""
|
||
read -p "请选择 (1-3): " choice
|
||
|
||
case $choice in
|
||
1)
|
||
echo ""
|
||
echo "Vercel 前端部署步骤:"
|
||
echo "1. 访问 https://vercel.com"
|
||
echo "2. 导入此 GitHub 仓库"
|
||
echo "3. 保持默认配置点击部署"
|
||
echo "4. 完成!"
|
||
echo ""
|
||
echo "注意:Vercel 模式下数据存储在浏览器本地"
|
||
;;
|
||
2)
|
||
echo ""
|
||
echo "正在启动 Docker 服务..."
|
||
|
||
# 检查 .env 是否配置
|
||
if grep -q "changeme" .env; then
|
||
echo -e "${RED}⚠${NC} 警告:.env 文件包含默认值!"
|
||
echo " 请编辑 .env 文件后再启动服务"
|
||
exit 1
|
||
fi
|
||
|
||
# 启动 Docker
|
||
docker-compose up -d
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}✓${NC} Docker 服务启动成功!"
|
||
echo ""
|
||
echo "访问地址:"
|
||
echo " 主应用: http://localhost:3000"
|
||
echo " 管理面板: http://localhost:3000/admin"
|
||
echo ""
|
||
echo "查看日志: docker-compose logs -f app"
|
||
else
|
||
echo -e "${RED}✗${NC} Docker 服务启动失败"
|
||
exit 1
|
||
fi
|
||
;;
|
||
3)
|
||
echo ""
|
||
echo "启动本地开发服务器..."
|
||
cd server
|
||
npm run dev &
|
||
SERVER_PID=$!
|
||
echo ""
|
||
echo -e "${GREEN}✓${NC} 开发服务器已启动"
|
||
echo " 后端 API: http://localhost:3000/api"
|
||
echo " 前端: 直接打开 index.html"
|
||
echo ""
|
||
echo "按 Ctrl+C 停止服务器"
|
||
wait $SERVER_PID
|
||
;;
|
||
*)
|
||
echo "无效选择"
|
||
exit 1
|
||
;;
|
||
esac
|