129 lines
3.6 KiB
Bash
129 lines
3.6 KiB
Bash
#!/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 "=========================================="
|