VPSHUB/app/install.sh
2026-05-29 23:09:58 +08:00

189 lines
5.0 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
# VPS Hub 监控程序 - 安装脚本
# 该脚本会创建systemd服务持续化运行monitor.py
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 获取当前脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 定义服务名称
SERVICE_NAME="idc_monitor"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
echo "=========================================="
echo " VPS Hub 监控程序 - 安装向导"
echo "=========================================="
echo ""
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误: 请以root权限运行此脚本 (sudo ./install.sh)${NC}"
exit 1
fi
# 检查Python是否已安装
if ! command -v python3 &> /dev/null; then
if command -v python &> /dev/null; then
PYTHON_CMD="python"
else
echo -e "${RED}错误: 未找到Python请先安装Python 3${NC}"
exit 1
fi
else
PYTHON_CMD="python3"
fi
echo -e "${GREEN}${NC} 检测到Python: ${PYTHON_CMD}"
# 检查pip是否存在
if command -v pip3 &> /dev/null; then
PIP_CMD="pip3"
elif command -v pip &> /dev/null; then
PIP_CMD="pip"
else
echo -e "${YELLOW}警告: 未检测到pip${NC}"
read -p "是否现在安装pip(Y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
echo -e "${RED}错误: pip不可用无法继续${NC}"
exit 1
else
# 安装pip
if command -v apt-get &> /dev/null; then
apt-get update && apt-get install -y python3-pip
elif command -v yum &> /dev/null; then
yum install -y python3-pip
elif command -v dnf &> /dev/null; then
dnf install -y python3-pip
else
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
${PYTHON_CMD} get-pip.py
rm -f get-pip.py
fi
if command -v pip3 &> /dev/null; then
PIP_CMD="pip3"
elif command -v pip &> /dev/null; then
PIP_CMD="pip"
else
echo -e "${RED}错误: pip安装失败${NC}"
exit 1
fi
fi
fi
echo -e "${GREEN}${NC} 检测到pip: ${PIP_CMD}"
echo ""
echo "注意: VPS配置请通过网页 config_add.php 进行管理"
# 安装Python依赖
if [ -f "${SCRIPT_DIR}/requirements.txt" ]; then
echo ""
echo "正在安装Python依赖包..."
cd ${SCRIPT_DIR}
if ${PIP_CMD} install -r requirements.txt; then
echo -e "${GREEN}${NC} Python依赖包安装成功"
else
echo -e "${RED}${NC} Python依赖包安装失败"
exit 1
fi
else
echo -e "${YELLOW}警告: requirements.txt 文件不存在${NC}"
exit 1
fi
# 检查monitor.py是否存在
if [ ! -f "${SCRIPT_DIR}/monitor.py" ]; then
echo -e "${RED}错误: monitor.py 文件不存在${NC}"
exit 1
fi
# 创建日志目录和数据库目录
LOG_DIR="${SCRIPT_DIR}/logs"
DB_DIR="${SCRIPT_DIR}/db"
mkdir -p ${LOG_DIR} ${DB_DIR}
chmod 755 ${LOG_DIR} ${DB_DIR}
echo ""
echo "正在创建systemd服务..."
# 创建systemd服务文件
cat > ${SERVICE_FILE} << EOF
[Unit]
Description=VPS Hub Monitor Service
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=${SCRIPT_DIR}
ExecStart=${PYTHON_CMD} ${SCRIPT_DIR}/monitor.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=${SERVICE_NAME}
# 资源限制
LimitNOFILE=65536
# 安全设置
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=${SCRIPT_DIR}
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemd配置
systemctl daemon-reload
# 启用服务(开机自启)
systemctl enable ${SERVICE_NAME}
# 启动服务
echo ""
echo "正在启动服务..."
systemctl start ${SERVICE_NAME}
# 检查服务状态
sleep 2
if systemctl is-active --quiet ${SERVICE_NAME}; then
echo -e "${GREEN}${NC} ${SERVICE_NAME} 服务已成功安装并启动"
echo -e "${GREEN}${NC} 服务状态: 运行中"
else
echo -e "${RED}${NC} ${SERVICE_NAME} 服务启动失败"
echo ""
echo "请检查日志:"
echo " journalctl -u ${SERVICE_NAME} -n 50 --no-pager"
exit 1
fi
echo ""
echo "=========================================="
echo -e "${GREEN}安装完成!${NC}"
echo "=========================================="
echo ""
echo "常用命令:"
echo -e " ${YELLOW}查看服务状态:${NC} systemctl status ${SERVICE_NAME}"
echo -e " ${YELLOW}查看实时日志:${NC} journalctl -u ${SERVICE_NAME} -f"
echo -e " ${YELLOW}查看正常日志:${NC} tail -f ${LOG_DIR}/monitor.log"
echo -e " ${YELLOW}查看异常日志:${NC} tail -f ${LOG_DIR}/error.log"
echo -e " ${YELLOW}停止服务:${NC} systemctl stop ${SERVICE_NAME}"
echo -e " ${YELLOW}重启服务:${NC} systemctl restart ${SERVICE_NAME}"
echo -e " ${YELLOW}卸载服务:${NC} cd ${SCRIPT_DIR} && ./uninstall.sh"
echo ""
echo "配置文件位置: 通过网页 config_add.php 管理"
echo "日志文件位置: ${LOG_DIR}"
echo "数据库文件位置: ${DB_DIR}"
echo ""