178 lines
4.3 KiB
Bash
Executable File
178 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 自动部署脚本(包含密码认证)
|
||
# 使用方法: ./auto-deploy.sh
|
||
|
||
NAS_HOST="192.168.58.20"
|
||
NAS_USER="root"
|
||
NAS_PASSWORD="jsjj8888"
|
||
NAS_PROJECT_PATH="/mnt/tank/apps/youyidian-3d"
|
||
|
||
echo "========================================="
|
||
echo "部署 由壹点3D素材 到 TrueNAS 服务器"
|
||
echo "========================================="
|
||
|
||
# 检查是否已经打包
|
||
if [ ! -f "project.tar.gz" ]; then
|
||
echo "错误: project.tar.gz 不存在!"
|
||
exit 1
|
||
fi
|
||
|
||
echo "1. 上传项目到 NAS 服务器..."
|
||
sshpass -p "${NAS_PASSWORD}" scp project.tar.gz ${NAS_USER}@${NAS_HOST}:/tmp/
|
||
|
||
if [ $? -ne 0 ]; then
|
||
echo "上传失败,尝试使用expect方式..."
|
||
expect << EOF
|
||
set timeout 60
|
||
spawn scp project.tar.gz ${NAS_USER}@${NAS_HOST}:/tmp/
|
||
expect {
|
||
"password:" {
|
||
send "${NAS_PASSWORD}\r"
|
||
expect eof
|
||
}
|
||
"yes/no" {
|
||
send "yes\r"
|
||
expect "password:"
|
||
send "${NAS_PASSWORD}\r"
|
||
expect eof
|
||
}
|
||
}
|
||
EOF
|
||
fi
|
||
|
||
echo "2. 在 NAS 服务器上部署..."
|
||
sshpass -p "${NAS_PASSWORD}" ssh ${NAS_USER}@${NAS_HOST} << 'ENDSSH'
|
||
set -e
|
||
|
||
# 创建项目目录
|
||
echo "创建项目目录..."
|
||
mkdir -p /mnt/tank/apps/youyidian-3d
|
||
cd /mnt/tank/apps/youyidian-3d
|
||
|
||
# 备份旧的上传文件(如果存在)
|
||
if [ -d "uploads" ]; then
|
||
echo "备份旧的上传文件..."
|
||
mkdir -p backups
|
||
cp -r uploads backups/uploads-$(date +%Y%m%d-%H%M%S)
|
||
fi
|
||
|
||
# 解压项目
|
||
echo "解压项目文件..."
|
||
tar -xzf /tmp/project.tar.gz
|
||
|
||
# 清理临时文件
|
||
rm /tmp/project.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
|
||
|
||
# 停止旧容器
|
||
echo "停止旧容器..."
|
||
docker-compose down
|
||
|
||
# 构建并启动新容器
|
||
echo "构建并启动 Docker 容器..."
|
||
docker-compose up -d --build
|
||
|
||
# 等待容器启动
|
||
echo "等待容器启动(30秒)..."
|
||
sleep 30
|
||
|
||
# 运行数据库迁移
|
||
echo "运行数据库迁移..."
|
||
docker-compose exec -T app npx prisma db push --accept-data-loss || echo "数据库迁移可能已执行"
|
||
|
||
# 初始化场景数据
|
||
echo "初始化场景数据..."
|
||
docker-compose exec -T app npx prisma db execute --stdin << 'EOSQL'
|
||
INSERT INTO scenes (id, name, "createdAt") VALUES
|
||
(gen_random_uuid(), '客厅', NOW()),
|
||
(gen_random_uuid(), '卧室', NOW()),
|
||
(gen_random_uuid(), '厨房', NOW()),
|
||
(gen_random_uuid(), '餐厅', NOW()),
|
||
(gen_random_uuid(), '书房', NOW()),
|
||
(gen_random_uuid(), '儿童房', NOW()),
|
||
(gen_random_uuid(), '主卧', NOW()),
|
||
(gen_random_uuid(), '次卧', NOW()),
|
||
(gen_random_uuid(), '阳台', NOW()),
|
||
(gen_random_uuid(), '卫生间', NOW()),
|
||
(gen_random_uuid(), '玄关', NOW()),
|
||
(gen_random_uuid(), '衣帽间', NOW()),
|
||
(gen_random_uuid(), '办公室', NOW()),
|
||
(gen_random_uuid(), '会议室', NOW()),
|
||
(gen_random_uuid(), '展厅', NOW())
|
||
ON CONFLICT (name) DO NOTHING;
|
||
EOSQL
|
||
|
||
# 查看容器状态
|
||
echo ""
|
||
echo "========================================="
|
||
echo "容器状态:"
|
||
docker-compose ps
|
||
|
||
# 查看容器日志
|
||
echo ""
|
||
echo "========================================="
|
||
echo "最近的日志:"
|
||
docker-compose logs --tail=30 app
|
||
|
||
echo ""
|
||
echo "========================================="
|
||
echo "部署完成!"
|
||
echo "访问地址: http://192.168.58.20:4320"
|
||
echo "========================================="
|
||
|
||
ENDSSH
|
||
|
||
if [ $? -ne 0 ]; then
|
||
echo "SSH部署失败,尝试使用expect方式..."
|
||
expect << 'EOF'
|
||
set timeout 300
|
||
set password "jsjj8888"
|
||
spawn ssh root@192.168.58.20
|
||
|
||
expect {
|
||
"password:" {
|
||
send "$password\r"
|
||
}
|
||
"yes/no" {
|
||
send "yes\r"
|
||
expect "password:"
|
||
send "$password\r"
|
||
}
|
||
}
|
||
|
||
expect "# "
|
||
send "cd /mnt/tank/apps/youyidian-3d\r"
|
||
expect "# "
|
||
send "tar -xzf /tmp/project.tar.gz\r"
|
||
expect "# "
|
||
send "docker-compose down\r"
|
||
expect "# "
|
||
send "docker-compose up -d --build\r"
|
||
expect "# "
|
||
send "sleep 30\r"
|
||
expect "# "
|
||
send "docker-compose exec -T app npx prisma db push --accept-data-loss\r"
|
||
expect "# "
|
||
send "docker-compose ps\r"
|
||
expect "# "
|
||
send "exit\r"
|
||
expect eof
|
||
EOF
|
||
fi
|
||
|
||
echo ""
|
||
echo "========================================="
|
||
echo "部署完成!"
|
||
echo "访问地址: http://192.168.58.20:4320"
|
||
echo "========================================="
|
||
|