Files
soul/redeploy.sh

129 lines
3.6 KiB
Bash
Raw Normal View History

#!/bin/bash
# 重新部署脚本 - 只执行构建和启动步骤
NAS_USER="fnvtk"
NAS_IP="192.168.2.201"
NAS_PASSWORD="Zhiqun1984"
SUDO_PASSWORD="Zhiqun1984"
DOCKER_CMD="/volume1/@appstore/ContainerManager/usr/bin/docker"
DOCKER_COMPOSE_CMD="/volume1/@appstore/ContainerManager/usr/bin/docker-compose"
PROJECT_DIR="/volume1/docker/soul-book"
LOCAL_PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "=========================================="
echo "重新部署 Soul 项目"
echo "=========================================="
# 步骤1: 确保pnpm-lock.yaml已传输
echo "[步骤1] 传输pnpm-lock.yaml..."
expect << EOF
set timeout 60
spawn scp -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc "$LOCAL_PROJECT_DIR/pnpm-lock.yaml" $NAS_USER@$NAS_IP:${PROJECT_DIR}/
expect {
"password:" {
send "$NAS_PASSWORD\r"
}
timeout {
puts "传输超时"
exit 1
}
}
expect eof
EOF
# 步骤2: 停止旧容器
echo "[步骤2] 停止旧容器..."
expect << EOF
set timeout 60
spawn ssh -t -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc $NAS_USER@$NAS_IP "cd ${PROJECT_DIR} && sudo $DOCKER_COMPOSE_CMD down 2>/dev/null || true && sudo $DOCKER_CMD rm -f soul_book_app 2>/dev/null || true && echo '清理完成'"
expect {
"password:" {
send "$NAS_PASSWORD\r"
exp_continue
}
"Password:" {
send "$SUDO_PASSWORD\r"
exp_continue
}
"清理完成" {
puts "清理成功"
}
timeout {
puts "清理超时,继续执行"
}
}
expect eof
EOF
# 步骤3: 构建镜像
echo "[步骤3] 构建Docker镜像这可能需要5-10分钟..."
expect << EOF
set timeout 1200
spawn ssh -t -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc $NAS_USER@$NAS_IP "cd ${PROJECT_DIR} && sudo $DOCKER_COMPOSE_CMD build --no-cache 2>&1 | tail -50"
expect {
"password:" {
send "$NAS_PASSWORD\r"
exp_continue
}
"Password:" {
send "$SUDO_PASSWORD\r"
exp_continue
}
timeout {
puts "构建超时,但继续执行"
}
}
expect eof
EOF
# 步骤4: 启动容器
echo "[步骤4] 启动容器..."
expect << EOF
set timeout 120
spawn ssh -t -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc $NAS_USER@$NAS_IP "cd ${PROJECT_DIR} && sudo $DOCKER_COMPOSE_CMD up -d && echo '容器启动完成'"
expect {
"password:" {
send "$NAS_PASSWORD\r"
exp_continue
}
"Password:" {
send "$SUDO_PASSWORD\r"
exp_continue
}
"容器启动完成" {
puts "容器启动成功"
}
timeout {
puts "启动超时"
}
}
expect eof
EOF
# 等待服务启动
echo "等待服务启动30秒..."
sleep 30
# 步骤5: 检查状态
echo "[步骤5] 检查容器状态..."
expect << EOF
set timeout 30
spawn ssh -t -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc $NAS_USER@$NAS_IP "sudo $DOCKER_CMD ps --filter name=soul_book_app --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' && echo '---' && sudo $DOCKER_CMD logs --tail 30 soul_book_app 2>&1 | tail -20"
expect {
"password:" {
send "$NAS_PASSWORD\r"
exp_continue
}
"Password:" {
send "$SUDO_PASSWORD\r"
exp_continue
}
}
expect eof
EOF
echo ""
echo "=========================================="
echo "部署完成!访问地址: http://${NAS_IP}:3000"
echo "=========================================="