Files
dock/WebSSH
2025-11-02 17:43:55 +08:00

111 lines
3.7 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
echo "🔍 开始安全清理 NexTerm..."
# 检查容器是否存在及其状态
echo "1. 检查容器状态..."
docker ps -a | grep nexterm
# 获取容器的详细信息
echo "2. 获取容器详细信息..."
CONTAINER_INFO=$(docker inspect nexterm 2>/dev/null || echo "容器不存在")
if [ "$CONTAINER_INFO" != "容器不存在" ]; then
echo "📦 容器信息:"
echo " 状态: $(echo "$CONTAINER_INFO" | grep '"Status"' | head -1)"
echo " 镜像: $(echo "$CONTAINER_INFO" | grep '"Image"' | head -1)"
echo " 创建时间: $(echo "$CONTAINER_INFO" | grep '"Created"' | head -1)"
# 获取容器使用的卷
echo "3. 检查容器挂载的卷..."
MOUNTS=$(echo "$CONTAINER_INFO" | grep '"Source"' | awk -F'"' '{print $4}')
if [ -n "$MOUNTS" ]; then
echo "📁 容器挂载的目录:"
echo "$MOUNTS"
fi
fi
# 检查数据卷
echo "4. 检查数据卷..."
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
# 确认删除
read -p "⚠️ 确认要删除 NexTerm 容器和数据卷吗?(y/N): " confirm
if [[ $confirm != [yY] ]]; then
echo "❌ 操作已取消"
exit 0
fi
# 开始清理
echo "5. 开始清理..."
# 停止容器(如果运行中)
echo " 🛑 停止容器..."
docker stop nexterm 2>/dev/null && echo " ✅ 容器已停止" || echo " 容器未运行"
# 删除容器
echo " 🗑️ 删除容器..."
docker rm nexterm 2>/dev/null && echo " ✅ 容器已删除" || echo " 容器不存在"
# 删除数据卷
echo " 🗑️ 删除数据卷..."
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 "📊 端口映射详情:"
docker port nexterm
# 获取服务器IP
SERVER_IP=$(curl -s ipv4.icanhazip.com 2>/dev/null || hostname -I | awk '{print $1}' || echo "localhost")
echo ""
echo "🎯 完整访问地址: http://${SERVER_IP}:${ACTUAL_PORT}"
else
echo "❌ 安装失败,请检查日志: docker logs nexterm"
fi