|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# ============================================================================== |
| 4 | +# Telegram QA Bot (telembed) 自动安装与部署脚本 |
| 5 | +# |
| 6 | +# 该脚本会自动下载、配置并以 systemd 服务的形式运行机器人。 |
| 7 | +# 运行方式: |
| 8 | +# curl -sSL https://raw.githubusercontent.com/ooopus/telegramBotEmbed/refs/heads/main/install.sh | sudo bash |
| 9 | +# ============================================================================== |
| 10 | + |
| 11 | +set -e # 如果任何命令失败,则立即退出 |
| 12 | + |
| 13 | +# --- 配置变量 --- |
| 14 | +SERVICE_NAME="telembed" |
| 15 | +SERVICE_USER="telembed" |
| 16 | +SERVICE_GROUP="telembed" |
| 17 | + |
| 18 | +# 工作目录 (用于存放数据和缓存) |
| 19 | +WORK_DIR="/opt/telembed" |
| 20 | +# 配置目录 (根据 service 文件中的 XDG_CONFIG_HOME=/opt 和代码逻辑) |
| 21 | +CONFIG_DIR_BASE="/opt/telegramBotEmbed" |
| 22 | + |
| 23 | +# 日志目录 |
| 24 | +LOG_DIR="/var/log/${SERVICE_NAME}" |
| 25 | + |
| 26 | +# 二进制文件下载链接 |
| 27 | +BINARY_URL="https://github.com/ooopus/telegramBotEmbed/releases/latest/download/telembed-x86_64-unknown-linux-gnu" |
| 28 | +# systemd 服务文件下载链接 |
| 29 | +SERVICE_URL="https://raw.githubusercontent.com/ooopus/telegramBotEmbed/refs/heads/main/telembed.service" |
| 30 | + |
| 31 | + |
| 32 | +# --- 脚本开始 --- |
| 33 | +echo "🚀 开始部署 Telegram QA Bot (${SERVICE_NAME})..." |
| 34 | + |
| 35 | +# 检查是否以 root 权限运行 |
| 36 | +if [ "$(id -u)" -ne 0 ]; then |
| 37 | + echo "❌ 请以 root 权限运行此脚本 (例如: sudo ./install.sh)" >&2 |
| 38 | + exit 1 |
| 39 | +fi |
| 40 | + |
| 41 | +# 1. 停止可能正在运行的旧服务 |
| 42 | +echo "🔄 正在停止旧的服务 (如果存在)..." |
| 43 | +systemctl stop "${SERVICE_NAME}.service" > /dev/null 2>&1 || true |
| 44 | + |
| 45 | +# 2. 创建用户和组 (如果不存在) |
| 46 | +echo "👤 正在创建系统用户和组 '${SERVICE_USER}'..." |
| 47 | +if ! getent group "${SERVICE_GROUP}" > /dev/null; then |
| 48 | + groupadd --system "${SERVICE_GROUP}" |
| 49 | + echo " - 用户组 '${SERVICE_GROUP}' 已创建。" |
| 50 | +else |
| 51 | + echo " - 用户组 '${SERVICE_GROUP}' 已存在。" |
| 52 | +fi |
| 53 | + |
| 54 | +if ! id "${SERVICE_USER}" > /dev/null 2>&1; then |
| 55 | + useradd --system --no-create-home --shell /bin/false -g "${SERVICE_GROUP}" "${SERVICE_USER}" |
| 56 | + echo " - 系统用户 '${SERVICE_USER}' 已创建。" |
| 57 | +else |
| 58 | + echo " - 系统用户 '${SERVICE_USER}' 已存在。" |
| 59 | +fi |
| 60 | + |
| 61 | +# 3. 创建目录结构 |
| 62 | +echo "📁 正在创建目录..." |
| 63 | +mkdir -p "${WORK_DIR}/data" |
| 64 | +mkdir -p "${WORK_DIR}/cache" |
| 65 | +mkdir -p "${CONFIG_DIR_BASE}" |
| 66 | +mkdir -p "${LOG_DIR}" |
| 67 | +echo " - 工作目录: ${WORK_DIR}" |
| 68 | +echo " - 配置目录: ${CONFIG_DIR_BASE}" |
| 69 | +echo " - 日志目录: ${LOG_DIR}" |
| 70 | + |
| 71 | +# 4. 下载并安装二进制文件 |
| 72 | +echo "🔽 正在从 GitHub 下载二进制文件..." |
| 73 | +curl -L "${BINARY_URL}" -o "/usr/local/bin/${SERVICE_NAME}" |
| 74 | +chmod +x "/usr/local/bin/${SERVICE_NAME}" |
| 75 | +echo " - 二进制文件已安装到 /usr/local/bin/${SERVICE_NAME}" |
| 76 | + |
| 77 | +# 5. 下载并安装 systemd 服务文件 |
| 78 | +echo "⚙️ 正在安装 systemd 服务文件..." |
| 79 | +curl -L "${SERVICE_URL}" -o "/etc/systemd/system/${SERVICE_NAME}.service" |
| 80 | +echo " - 服务文件已安装到 /etc/systemd/system/${SERVICE_NAME}.service" |
| 81 | + |
| 82 | +QA_FILE_PATH="${WORK_DIR}/data/QA.json" |
| 83 | +if [ ! -f "${QA_FILE_PATH}" ]; then |
| 84 | + echo "📚 正在创建空的知识库文件 ${QA_FILE_PATH}..." |
| 85 | + echo "[]" > "${QA_FILE_PATH}" |
| 86 | +else |
| 87 | + echo " - 找到已存在的知识库文件,将不会覆盖。" |
| 88 | +fi |
| 89 | + |
| 90 | +# 6. 设置权限 |
| 91 | +echo "🔐 正在设置目录和文件权限..." |
| 92 | +chown -R "${SERVICE_USER}:${SERVICE_GROUP}" "${WORK_DIR}" |
| 93 | +chown -R "${SERVICE_USER}:${SERVICE_GROUP}" "${CONFIG_DIR_BASE}" |
| 94 | +chown -R "${SERVICE_USER}:${SERVICE_GROUP}" "${LOG_DIR}" |
| 95 | +chmod -R 750 "${WORK_DIR}" |
| 96 | +chmod -R 750 "${CONFIG_DIR_BASE}" |
| 97 | +chmod -R 750 "${LOG_DIR}" |
| 98 | +echo " - 权限设置完成。" |
| 99 | + |
| 100 | +# 7. 重载并启动服务 |
| 101 | +echo "🚀 正在启动服务..." |
| 102 | +systemctl daemon-reload |
| 103 | +systemctl enable "${SERVICE_NAME}.service" |
| 104 | +systemctl start "${SERVICE_NAME}.service" |
| 105 | + |
| 106 | +echo "" |
| 107 | +echo "✅ 部署完成!" |
| 108 | +echo "" |
| 109 | +echo "--- 🚨 重要提示 🚨 ---" |
| 110 | +echo "机器人服务已启动,但您必须编辑配置文件才能让它正常工作:" |
| 111 | +echo "👉 sudo nano ${CONFIG_FILE_PATH}" |
| 112 | +echo "" |
| 113 | +echo "请在文件中填入您的 [telegram] token, super_admins 和 [embedding] api_keys。" |
| 114 | +echo "修改并保存后,请使用以下命令重启服务:" |
| 115 | +echo "👉 sudo systemctl restart ${SERVICE_NAME}" |
| 116 | +echo "--------------------------" |
| 117 | +echo "" |
| 118 | +echo "您可以使用以下命令检查服务状态:" |
| 119 | +echo " sudo systemctl status ${SERVICE_NAME}" |
| 120 | +echo "" |
| 121 | +echo "查看实时日志:" |
| 122 | +echo " sudo journalctl -u ${SERVICE_NAME} -f" |
0 commit comments