guanghulab/scripts/cleanup-guangzhou-server.sh
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

196 lines
6.9 KiB
Bash
Raw Permalink 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
# =============================================================================
# 广州轻量云服务器清理脚本
# 目标:重置服务器到接近初始状态,保留 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}"