Update WebSSH

This commit is contained in:
2025-11-02 17:43:55 +08:00
committed by GitHub
parent e0411b1324
commit 6f764b7c80

141
WebSSH
View File

@@ -1,61 +1,110 @@
#!/bin/bash #!/bin/bash
echo "🚀 NexTerm 一键安装Docker Compose + 随机端口)" echo "🔍 开始安全清理 NexTerm..."
# 生成加密密钥 # 检查容器是否存在及其状态
ENCRYPTION_KEY=$(openssl rand -hex 32) echo "1. 检查容器状态..."
echo "🔑 生成加密密钥: $ENCRYPTION_KEY" docker ps -a | grep nexterm
# 创建配置目录 # 获取容器的详细信息
mkdir -p /boot/docker-apps echo "2. 获取容器详细信息..."
CONTAINER_INFO=$(docker inspect nexterm 2>/dev/null || echo "容器不存在")
# 创建 Docker Compose 配置文件 if [ "$CONTAINER_INFO" != "容器不存在" ]; then
cat > /boot/docker-apps/nexterm.yml << EOF echo "📦 容器信息:"
version: '3.8' echo " 状态: $(echo "$CONTAINER_INFO" | grep '"Status"' | head -1)"
echo " 镜像: $(echo "$CONTAINER_INFO" | grep '"Image"' | head -1)"
echo " 创建时间: $(echo "$CONTAINER_INFO" | grep '"Created"' | head -1)"
services: # 获取容器使用的卷
nexterm: echo "3. 检查容器挂载的卷..."
image: germannewsmaker/nexterm:1.0.5-OPEN-PREVIEW MOUNTS=$(echo "$CONTAINER_INFO" | grep '"Source"' | awk -F'"' '{print $4}')
container_name: nexterm if [ -n "$MOUNTS" ]; then
ports: echo "📁 容器挂载的目录:"
- "3000" # 随机端口 echo "$MOUNTS"
environment: fi
- ENCRYPTION_KEY=$ENCRYPTION_KEY fi
- TZ=Asia/Shanghai
volumes:
- nexterm_data:/app/data
restart: unless-stopped
volumes: # 检查数据卷
nexterm_data: echo "4. 检查数据卷..."
EOF VOLUME_INFO=$(docker volume inspect nexterm 2>/dev/null || echo "数据卷不存在")
if [ "$VOLUME_INFO" != "数据卷不存在" ]; then
echo "💾 数据卷信息:"
VOLUME_PATH=$(echo "$VOLUME_INFO" | grep '"Mountpoint"' | awk -F'"' '{print $4}')
echo " 挂载点: $VOLUME_PATH"
echo " 数据大小: $(du -sh $VOLUME_PATH 2>/dev/null || echo "无法获取大小")"
fi
echo "📁 配置文件已创建: /boot/docker-apps/nexterm.yml" # 确认删除
read -p "⚠️ 确认要删除 NexTerm 容器和数据卷吗?(y/N): " confirm
if [[ $confirm != [yY] ]]; then
echo "❌ 操作已取消"
exit 0
fi
# 停止并删除旧版本(如果存在) # 开始清理
echo "🔄 清理旧版本..." echo "5. 开始清理..."
docker compose -f /boot/docker-apps/nexterm.yml down 2>/dev/null || true
# 启动服务 # 停止容器(如果运行中)
echo "🐳 启动 NexTerm..." echo " 🛑 停止容器..."
docker compose -f /boot/docker-apps/nexterm.yml up -d docker stop nexterm 2>/dev/null && echo " ✅ 容器已停止" || echo " 容器未运行"
# 等待启动 # 删除容器
echo "⏳ 等待服务启动..." echo " 🗑️ 删除容器..."
sleep 10 docker rm nexterm 2>/dev/null && echo " ✅ 容器已删除" || echo " 容器不存在"
# 获取实际端口 # 删除数据卷
ACTUAL_PORT=$(docker compose -f /boot/docker-apps/nexterm.yml port nexterm 3000 | cut -d: -f2) echo " 🗑️ 删除数据卷..."
SERVER_IP=$(curl -s ipv4.icanhazip.com 2>/dev/null || hostname -I | awk '{print $1}') docker volume rm nexterm 2>/dev/null && echo " ✅ 数据卷已删除" || echo " 数据卷不存在"
# 检查是否还有残留
echo "6. 检查清理结果..."
CLEAN_RESULT=$(docker ps -a | grep -c nexterm)
VOLUME_RESULT=$(docker volume ls | grep -c nexterm)
if [ $CLEAN_RESULT -eq 0 ] && [ $VOLUME_RESULT -eq 0 ]; then
echo "✅ 清理完成NexTerm 已完全删除"
else
echo "⚠️ 发现残留项目:"
[ $CLEAN_RESULT -ne 0 ] && echo " - 容器残留" && docker ps -a | grep nexterm
[ $VOLUME_RESULT -ne 0 ] && echo " - 数据卷残留" && docker volume ls | grep nexterm
fi
# 生成新密钥并使用随机端口重新安装
echo "7. 重新安装(使用随机端口)..."
NEW_KEY=$(openssl rand -hex 32)
echo "🔑 新加密密钥: $NEW_KEY"
echo "💡 请妥善保存此密钥!"
docker run -d \
-e ENCRYPTION_KEY=$NEW_KEY \
-p 3000 \ # 只指定容器端口让Docker自动分配主机端口
--name nexterm \
--restart unless-stopped \
-v nexterm:/app/data \
germannewsmaker/nexterm:1.0.5-OPEN-PREVIEW
echo "8. 等待容器启动..."
sleep 8
# 获取实际映射的端口
echo "9. 获取端口映射信息..."
ACTUAL_PORT=$(docker port nexterm | grep '3000/tcp' | awk -F: '{print $2}')
if docker ps | grep -q nexterm; then
echo "✅ NexTerm 重新安装成功!"
echo "🌐 访问地址: http://服务器IP:${ACTUAL_PORT:-未知端口}"
echo "🔑 加密密钥: $NEW_KEY"
# 显示完整的端口信息
echo "" echo ""
echo "✅ 安装完成!" echo "📊 端口映射详情:"
echo "🌐 访问地址: http://$SERVER_IP:$ACTUAL_PORT" docker port nexterm
echo "🔑 加密密钥: $ENCRYPTION_KEY"
# 获取服务器IP
SERVER_IP=$(curl -s ipv4.icanhazip.com 2>/dev/null || hostname -I | awk '{print $1}' || echo "localhost")
echo "" echo ""
echo "📋 管理命令:" echo "🎯 完整访问地址: http://${SERVER_IP}:${ACTUAL_PORT}"
echo " 启动: docker compose -f /boot/docker-apps/nexterm.yml start" else
echo " 停止: docker compose -f /boot/docker-apps/nexterm.yml stop" echo "❌ 安装失败,请检查日志: docker logs nexterm"
echo " 重启: docker compose -f /boot/docker-apps/nexterm.yml restart" fi
echo " 卸载: docker compose -f /boot/docker-apps/nexterm.yml down"
echo " 日志: docker compose -f /boot/docker-apps/nexterm.yml logs"