193 lines
5.5 KiB
Bash
Executable File
193 lines
5.5 KiB
Bash
Executable File
#!/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 "✅ 清理完成"
|
||
|