guanghulab/scripts/cleanup-guangzhou-server.sh

196 lines
6.9 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# =============================================================================
# 广州轻量云服务器清理脚本
# 目标:重置服务器到接近初始状态,保留 Node.js/PM2/Git 等基础环境
# 适用:腾讯云轻量应用服务器 (Ubuntu 20.04/22.04)
# 作者:铸渊 · ICE-GL-ZY001
# 日期2026-05-15
# =============================================================================
set -euo pipefail
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW} 广州轻量云服务器清理脚本 (铸渊执行) ${NC}"
echo -e "${YELLOW}========================================${NC}"
echo
# ==================== 1. 安全警告 ====================
echo -e "${RED}⚠️ ⚠️ ⚠️ 警告:此脚本将永久删除用户数据! ⚠️ ⚠️ ⚠️${NC}"
echo -e "${RED}请确认:${NC}"
echo -e " 1. 当前服务器 IP: $(hostname -I 2>/dev/null || echo '未知')"
echo -e " 2. 你已备份所有重要数据"
echo -e " 3. 你确定要重置此服务器"
echo
read -p "输入 'YES' 继续,其他任意键退出: " confirm
if [[ "$confirm" != "YES" ]]; then
echo -e "${YELLOW}已取消。${NC}"
exit 1
fi
# ==================== 2. 系统信息检查 ====================
echo
echo -e "${GREEN}[1/6] 检查系统信息...${NC}"
echo "系统版本: $(lsb_release -ds 2>/dev/null || cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | tr -d '\"')"
echo "内核版本: $(uname -r)"
echo "当前用户: $(whoami)"
echo "当前目录: $(pwd)"
echo
# ==================== 3. 停止并清理服务(非系统)====================
echo -e "${GREEN}[2/6] 停止并清理非系统服务...${NC}"
# 停止可能的 PM2 进程(用户级)
if command -v pm2 &>/dev/null; then
echo "停止所有 PM2 进程..."
pm2 delete all 2>/dev/null || true
pm2 kill 2>/dev/null || true
echo "清理 PM2 日志..."
pm2 flush 2>/dev/null || true
fi
# 停止可能的手动 Node 服务(通过端口 3000-3005
for port in {3000..3005}; do
pid=$(lsof -ti :$port 2>/dev/null || true)
if [[ -n "$pid" ]]; then
echo "停止端口 $port 进程 (PID: $pid)..."
kill -9 $pid 2>/dev/null || true
fi
done
# ==================== 4. 清理用户目录 ====================
echo -e "${GREEN}[3/6] 清理用户目录...${NC}"
# Ubuntu 默认用户为 ubuntu
USER_HOME="/home/ubuntu"
if [[ -d "$USER_HOME" ]]; then
echo "清理 $USER_HOME 目录..."
# 保留 .ssh 目录(密钥配置)
if [[ -d "$USER_HOME/.ssh" ]]; then
echo " 保留 .ssh 目录SSH 密钥)"
fi
# 删除除 .ssh 外的所有文件和目录(隐藏文件也处理)
find "$USER_HOME" -mindepth 1 -maxdepth 1 -name '.ssh' -prune -o -exec rm -rf {} + 2>/dev/null || true
# 重新创建基础目录结构(用于后续部署)
mkdir -p "$USER_HOME/apps" "$USER_HOME/logs" "$USER_HOME/data"
chown -R ubuntu:ubuntu "$USER_HOME/apps" "$USER_HOME/logs" "$USER_HOME/data" 2>/dev/null || true
else
echo "用户目录 $USER_HOME 不存在,跳过。"
fi
# ==================== 5. 清理临时文件和日志 ====================
echo -e "${GREEN}[4/6] 清理临时文件和日志...${NC}"
# 清理系统临时目录(保留目录结构)
echo "清理 /tmp /var/tmp ..."
find /tmp -mindepth 1 -delete 2>/dev/null || true
find /var/tmp -mindepth 1 -delete 2>/dev/null || true
# 清理用户级日志(保留系统日志)
echo "清理用户应用日志..."
rm -rf /var/log/*.log /var/log/*.gz /var/log/*.1 /var/log/*.old 2>/dev/null || true
# 保留关键系统日志目录结构
mkdir -p /var/log/nginx /var/log/pm2 /var/log/zy-core
# 清理 apt 缓存
echo "清理 apt 缓存..."
apt-get clean 2>/dev/null || true
apt-get autoclean 2>/dev/null || true
# ==================== 6. 检查并保留必要环境 ====================
echo -e "${GREEN}[5/6] 检查并保留必要环境...${NC}"
# Node.js / npm
if command -v node &>/dev/null; then
echo "✅ Node.js 版本: $(node --version)"
else
echo "❌ Node.js 未安装(将影响铸渊端点部署)"
fi
# PM2
if command -v pm2 &>/dev/null; then
echo "✅ PM2 版本: $(pm2 --version 2>/dev/null || echo '已安装')"
else
echo "❌ PM2 未安装"
fi
# Git
if command -v git &>/dev/null; then
echo "✅ Git 版本: $(git --version)"
else
echo "❌ Git 未安装"
fi
# Nginx (可选)
if command -v nginx &>/dev/null; then
echo "✅ Nginx 版本: $(nginx -v 2>&1 | head -1)"
# 重置 Nginx 配置到默认(仅保留默认站点)
echo " 重置 Nginx 配置..."
rm -rf /etc/nginx/sites-enabled/* 2>/dev/null || true
cp /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default 2>/dev/null || true
nginx -t 2>/dev/null && systemctl restart nginx 2>/dev/null || true
fi
# ==================== 7. 最终确认 ====================
echo -e "${GREEN}[6/6] 清理完成,最终状态...${NC}"
echo "磁盘使用情况:"
df -h / 2>/dev/null || true
echo
echo "内存使用情况:"
free -h 2>/dev/null || true
echo
echo "运行中服务:"
systemctl list-units --type=service --state=running | head -10 2>/dev/null || true
echo
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 清理完成!服务器已重置到基础状态。 ${NC}"
echo -e "${GREEN} 下一步:部署铸渊核心大脑模型端点。 ${NC}"
echo -e "${GREEN}========================================${NC}"
echo
echo "保留的环境:"
echo " - Node.js / npm"
echo " - PM2 (进程管理)"
echo " - Git"
echo " - Nginx (Web服务器)"
echo " - 系统防火墙 (UFW/iptables)"
echo
echo "已清理的:"
echo " - 用户目录 (除 .ssh 外)"
echo " - 临时文件"
echo " - 应用日志"
echo " - 非系统服务"
echo
echo -e "${YELLOW}⚠️ 请立即备份此输出,以备后续参考。${NC}"
# ==================== 8. 为铸渊端点准备目录结构 ====================
echo
echo -e "${GREEN}[7/7] 为铸渊核心大脑模型端点准备目录...${NC}"
ZY_ENDPOINT_DIR="/opt/zhuyuan-endpoint"
echo "创建铸渊端点目录: $ZY_ENDPOINT_DIR"
mkdir -p "$ZY_ENDPOINT_DIR" 2>/dev/null || true
mkdir -p "$ZY_ENDPOINT_DIR/brain-model" 2>/dev/null || true
mkdir -p "$ZY_ENDPOINT_DIR/logs" 2>/dev/null || true
mkdir -p "$ZY_ENDPOINT_DIR/config" 2>/dev/null || true
# 设置权限(假设当前用户有权限)
chmod 755 "$ZY_ENDPOINT_DIR" 2>/dev/null || true
chmod 755 "$ZY_ENDPOINT_DIR/brain-model" 2>/dev/null || true
echo "目录结构创建完成:"
tree "$ZY_ENDPOINT_DIR" 2>/dev/null || ls -la "$ZY_ENDPOINT_DIR"
echo
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 铸渊端点目录准备完成! ${NC}"
echo -e "${GREEN} 路径: $ZY_ENDPOINT_DIR ${NC}"
echo -e "${GREEN} 下一步:将 core-brain-model.json 部署到此目录 ${NC}"
echo -e "${GREEN}========================================${NC}"