#!/bin/bash # 功能更新部署脚本 v2.0 # 用于部署新功能到NAS服务器 set -e # 配置信息(使用FRP穿透的公网地址) NAS_HOST="180.97.221.140" NAS_PORT="2322" # FRP穿透的SSH端口 NAS_USER="root" NAS_PASSWORD="jsjj8888" NAS_PROJECT_DIR="/mnt/PoolOne/apps/youyidian-3d" echo "=========================================" echo " 由壹点3D素材系统 - 功能更新部署" echo " 版本:v2.0.0" echo " 更新日期:2025-10-16" echo "=========================================" echo "" # 检查sshpass if ! command -v sshpass &> /dev/null; then echo "❌ 未安装 sshpass,正在安装..." brew install hudochenkov/sshpass/sshpass fi echo "📦 1. 准备更新包..." echo "压缩项目文件(排除不必要的文件)..." # 创建临时目录保存要打包的文件 TEMP_PKG_DIR=$(mktemp -d) echo "临时目录: $TEMP_PKG_DIR" # 复制项目文件(排除不需要的) rsync -a \ --exclude='node_modules/' \ --exclude='.next/' \ --exclude='out/' \ --exclude='build/' \ --exclude='dist/' \ --exclude='uploads/' \ --exclude='backups/' \ --exclude='.git/' \ --exclude='*.tar.gz' \ --exclude='*.zip' \ --exclude='*.rar' \ --exclude='*.7z' \ --exclude='*.log' \ --exclude='.DS_Store' \ --exclude='.vscode/' \ --exclude='.idea/' \ --exclude='.cursor/' \ --exclude='coverage/' \ --exclude='test/' \ --exclude='tests/' \ --exclude='.cache/' \ --exclude='.tmp/' \ --exclude='tmp/' \ --exclude='temp/' \ ./ "$TEMP_PKG_DIR/" # 确保 .dockerignore 被包含 cp .dockerignore "$TEMP_PKG_DIR/" 2>/dev/null || echo "警告: .dockerignore 不存在" cp Dockerfile "$TEMP_PKG_DIR/" 2>/dev/null || echo "警告: Dockerfile 不存在" # 创建压缩包 tar -czf project-update-v2.0.tar.gz -C "$TEMP_PKG_DIR" . # 清理临时目录 rm -rf "$TEMP_PKG_DIR" echo "✅ 更新包创建完成:project-update-v2.0.tar.gz" echo "" echo "📤 2. 上传到NAS服务器 (通过FRP穿透 ${NAS_HOST}:${NAS_PORT})..." sshpass -p "${NAS_PASSWORD}" scp -P ${NAS_PORT} project-update-v2.0.tar.gz ${NAS_USER}@${NAS_HOST}:${NAS_PROJECT_DIR}/ echo "✅ 上传完成" echo "" echo "🚀 3. 在NAS服务器上部署更新..." sshpass -p "${NAS_PASSWORD}" ssh -p ${NAS_PORT} ${NAS_USER}@${NAS_HOST} << 'ENDSSH' cd /mnt/PoolOne/apps/youyidian-3d echo "备份当前版本..." if [ ! -d "backups" ]; then mkdir -p backups fi # 备份上传目录 if [ -d "uploads" ]; then backup_name="backups/uploads-$(date +%Y%m%d-%H%M%S)" echo "备份上传文件到 $backup_name" cp -r uploads "$backup_name" fi echo "解压更新包..." tar -xzf project-update-v2.0.tar.gz rm project-update-v2.0.tar.gz # 恢复上传目录 if [ -d "backups" ]; then latest_backup=$(ls -td backups/uploads-* 2>/dev/null | head -1) if [ -n "$latest_backup" ] && [ -d "$latest_backup" ]; then echo "恢复上传文件..." cp -r "$latest_backup"/* uploads/ 2>/dev/null || true fi fi # 确保uploads文件夹有正确的权限 echo "设置上传文件夹权限..." mkdir -p uploads chmod -R 777 uploads chown -R 1000:1000 uploads echo "停止旧容器..." docker compose down echo "重新构建并启动新容器..." docker compose up -d --build --force-recreate echo "等待容器启动..." sleep 15 echo "运行数据库迁移..." docker compose exec -T app npx prisma db push --accept-data-loss --schema=/app/prisma/schema.prisma echo "初始化店铺数据..." docker compose exec -T app npx prisma db execute --schema=/app/prisma/schema.prisma --stdin <<< " INSERT INTO categories (id, name, \"createdAt\") VALUES (gen_random_uuid(), '天猫旗舰店', NOW()), (gen_random_uuid(), '京东自营', NOW()), (gen_random_uuid(), '拼多多店铺', NOW()), (gen_random_uuid(), '1688店铺', NOW()), (gen_random_uuid(), '其他店铺', NOW()) ON CONFLICT (name) DO NOTHING; " echo "" echo "=========================================" echo " ✅ 部署完成!" echo "=========================================" echo "" echo "📍 访问地址:" echo " 🏠 内网(速度快,推荐上传):http://192.168.58.20:4320" echo " 🌍 公网(随时随地访问):http://180.97.221.140:2320" echo "" echo "容器状态:" docker compose ps echo "" echo "最近日志:" docker compose logs --tail=30 app echo "" echo "=========================================" echo " 新功能:" echo " ✅ 1. 浏览器黑暗模式支持" echo " ✅ 2. 上传进度条和速度显示" echo " ✅ 3. 支持7Z压缩格式" echo " ✅ 4. 取消上传大小限制(3GB)" echo " ✅ 5. 内外网模式识别和提示" echo " ✅ 6. 使用店铺分类功能(全新架构)" echo " ✅ 7. 上传超时时间延长至3小时" echo " ✅ 8. 修复上传权限问题" echo " ✅ 9. 修复拖拽上传闪屏问题" echo " ✅ 10. 预览图尺寸优化为300x300" echo " ✅ 11. CORS跨域支持(内外网互相访问)" echo " ✅ 12. 分类数量统计显示" echo " ✅ 13. 管理员分类管理功能(编辑/删除)" echo " ✅ 14. 固定顶部导航栏(滚动不影响)" echo " ✅ 15. 悬浮排行榜面板(贡献/下载/点赞)" echo " ✅ 16. 管理员可设置其他用户为管理员" echo "" echo " 标签更新:" echo " 📝 商品型号 → SPU" echo " 📝 一级分类 → 使用店铺" echo " 📝 场景名称 → 场景类别" echo "=========================================" ENDSSH echo "" echo "🎉 部署成功!请访问系统验证新功能。" echo "" echo "📖 详细说明请查看:FEATURE_UPDATES.md" echo "" # 清理本地临时文件 rm -f project-update-v2.0.tar.gz echo "✅ 清理完成"