Files
webssh/deploy.sh
T
2026-02-11 15:34:22 +08:00

109 lines
3.1 KiB
Bash
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
# WebSSH 部署脚本
set -e
echo "🚀 开始部署 WebSSH..."
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
echo "❌ Docker 未安装,请先安装 Docker"
exit 1
fi
# 检查Docker Compose是否安装(新版Docker内置compose)
if ! docker compose version &> /dev/null; then
echo "❌ Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
# 清理现有环境
echo "🧹 清理现有环境..."
echo " 停止并删除现有容器..."
docker compose down --remove-orphans --volumes --rmi local 2>/dev/null || true
echo " 清理未使用的镜像、容器和网络..."
docker system prune -f 2>/dev/null || true
# 删除旧的镜像
echo " 删除旧的WebSSH镜像..."
docker images | grep "webssh" | awk '{print $3}' | xargs -r docker rmi -f 2>/dev/null || true
# 删除旧的容器
echo " 删除旧的WebSSH容器..."
docker ps -a | grep "webssh" | awk '{print $1}' | xargs -r docker rm -f 2>/dev/null || true
# 创建/校验生产环境配置文件
echo "📝 创建/校验环境配置文件..."
if [ ! -f .env.production ]; then
NEW_KEY=$(openssl rand -hex 16)
cat > .env.production << EOF
# 数据库配置
DB_HOST=mysql
DB_PORT=3306
DB_USER=webssh_user
DB_PASSWORD=webssh_password
DB_NAME=webssh
# JWT配置
JWT_SECRET=$(openssl rand -base64 32)
# 服务器配置
PORT=3000
NODE_ENV=production
# 加密密钥(长度必须为32字符)
ENCRYPTION_KEY=${NEW_KEY}
EOF
echo "✅ 环境配置文件已创建"
else
# 读取并校验现有KEY长度
CURRENT_KEY=$(grep -E '^ENCRYPTION_KEY=' .env.production | cut -d= -f2 | tr -d '\r\n')
if [ -z "$CURRENT_KEY" ] || [ ${#CURRENT_KEY} -ne 32 ]; then
echo "⚠️ ENCRYPTION_KEY 无效或缺失,正在重新生成..."
NEW_KEY=$(openssl rand -hex 16)
if grep -q '^ENCRYPTION_KEY=' .env.production; then
awk -v k="$NEW_KEY" 'BEGIN{FS=OFS="="} /^ENCRYPTION_KEY=/ {$2=k} {print}' .env.production > .env.production.tmp && mv .env.production.tmp .env.production
else
echo "ENCRYPTION_KEY=$NEW_KEY" >> .env.production
fi
echo "✅ ENCRYPTION_KEY 已修复为有效的32字符值"
else
echo "✅ ENCRYPTION_KEY 已有效(长度32)"
fi
fi
# 构建镜像
echo "🔨 构建 Docker 镜像..."
docker compose build --no-cache
# 启动服务
echo "🚀 启动服务..."
docker compose up -d
# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 30
# 检查服务状态
echo "🔍 检查服务状态..."
if docker compose ps | grep -q "Up"; then
echo "✅ 服务启动成功!"
echo ""
echo "📊 服务信息:"
echo " - WebSSH 应用: http://localhost:3000"
echo " - MySQL 数据库: localhost:3306"
echo ""
echo "🔧 常用命令:"
echo " - 查看日志: docker compose logs -f"
echo " - 停止服务: docker compose down"
echo " - 重启服务: docker compose restart"
echo " - 查看状态: docker compose ps"
else
echo "❌ 服务启动失败,请检查日志"
docker compose logs
exit 1
fi
echo "🎉 部署完成!"