gongxiangp2/update-deploy.sh
2025-10-26 09:11:04 +08:00

193 lines
5.5 KiB
Bash
Executable File
Raw 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
# 功能更新部署脚本 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 "✅ 清理完成"