diff --git a/te消息转发 b/te消息转发 index 8530120..c3485cd 100644 --- a/te消息转发 +++ b/te消息转发 @@ -1,59 +1,134 @@ #!/bin/bash -# =================配置部分================= -# 部署目录 (默认在当前用户的 home 目录下创建 telegram-monitor) -# 如果需要修改路径,请更改下面的 BASE_DIR 变量 -BASE_DIR="$HOME/telegram-monitor" +# ================= 颜色定义 ================= +RED='\033[31m' +GREEN='\033[32m' +YELLOW='\033[33m' +BLUE='\033[34m' +PLAIN='\033[0m' -# 配置文件名称 (以容器命名) -COMPOSE_FILE="telegram-monitor.yml" -# ========================================= +# ================= 默认配置 ================= +DEFAULT_PORT=5005 +CONTAINER_NAME="telegram-monitor" +IMAGE_NAME="ghcr.io/riniba/telegrammonitor:latest" +YML_FILE="${CONTAINER_NAME}.yml" -echo "🚀 开始部署 Telegram Monitor..." - -# 1. 创建文件夹 -if [ ! -d "$BASE_DIR" ]; then - echo "📂 创建目录: $BASE_DIR" - mkdir -p "$BASE_DIR/data" -else - echo "📂 目录已存在: $BASE_DIR" +# 检查是否以 root 运行 +if [[ $EUID -ne 0 ]]; then + echo -e "${RED}错误: 必须使用 root 用户运行此脚本!${PLAIN}" + exit 1 fi -# 进入目录 -cd "$BASE_DIR" +clear +echo -e "${BLUE}====================================================${PLAIN}" +echo -e "${BLUE} Telegram Monitor 一键部署脚本 (优化版 v2.0) ${PLAIN}" +echo -e "${BLUE}====================================================${PLAIN}" -# 2. 生成 telegram-monitor.yml 文件 -echo "📝 正在生成配置文件: $COMPOSE_FILE" -cat > $COMPOSE_FILE < /dev/null; then + echo -e "${RED}未检测到 Docker,请先安装 Docker!${PLAIN}" + exit 1 +fi +echo -e "${GREEN}Docker 已安装。${PLAIN}" + +# 2. 设置安装路径 +echo -e "${YELLOW}[2/6] 配置安装路径...${PLAIN}" +read -p "请输入安装路径 (默认: $HOME/telegram-monitor): " INSTALL_DIR +if [ -z "$INSTALL_DIR" ]; then + INSTALL_DIR="$HOME/telegram-monitor" +fi +echo -e "安装目录: ${GREEN}$INSTALL_DIR${PLAIN}" + +# 创建目录 +if [ ! -d "$INSTALL_DIR/data" ]; then + mkdir -p "$INSTALL_DIR/data" + echo -e "已创建数据目录: $INSTALL_DIR/data" +fi +cd "$INSTALL_DIR" + +# 3. 设置端口 +echo -e "${YELLOW}[3/6] 配置服务端口...${PLAIN}" +read -p "请输入宿主机端口 (默认: $DEFAULT_PORT): " PORT +if [ -z "$PORT" ]; then + PORT=$DEFAULT_PORT +fi + +# 检查端口占用 +if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null ; then + echo -e "${RED}警告: 端口 $PORT 已经被占用!${PLAIN}" + read -p "是否强制继续?(y/n): " FORCE_PORT + if [[ "$FORCE_PORT" != "y" ]]; then + echo "脚本已取消。" + exit 1 + fi +fi +echo -e "使用端口: ${GREEN}$PORT${PLAIN}" + +# 4. 清理旧容器 +echo -e "${YELLOW}[4/6] 清理旧环境...${PLAIN}" +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then + echo -e "${YELLOW}发现同名容器,正在停止并删除...${PLAIN}" + docker stop $CONTAINER_NAME >/dev/null 2>&1 + docker rm $CONTAINER_NAME >/dev/null 2>&1 + echo -e "${GREEN}旧容器已清理。${PLAIN}" +fi + +# 5. 生成配置文件 (符合你的命名习惯) +echo -e "${YELLOW}[5/6] 生成配置文件 $YML_FILE ...${PLAIN}" +cat > $YML_FILE </dev/null 2>&1; then - docker compose -f $COMPOSE_FILE up -d + CMD="docker compose" elif docker-compose version >/dev/null 2>&1; then - docker-compose -f $COMPOSE_FILE up -d + CMD="docker-compose" else - echo "❌ 未检测到 Docker Compose,请先安装 Docker。" - exit 1 + echo -e "${RED}错误: 未找到 docker-compose 插件。尝试直接使用 docker run 启动...${PLAIN}" + docker run -d --name $CONTAINER_NAME --restart unless-stopped -p $PORT:5005 -v $INSTALL_DIR/data:/app -e ASPNETCORE_ENVIRONMENT=Production $IMAGE_NAME + CMD="docker" fi -echo "" -echo "✅ 部署完成!" -echo "📂 数据目录位于: $BASE_DIR/data" -echo "📄 配置文件位于: $BASE_DIR/$COMPOSE_FILE" -echo "🌍 访问地址: http://服务器IP:5005" \ No newline at end of file +if [ "$CMD" != "docker" ]; then + $CMD -f $YML_FILE up -d +fi + +echo -e "${BLUE}正在进行健康检查 (等待 5 秒)...${PLAIN}" +sleep 5 + +# 检查容器状态 +STATUS=$(docker inspect --format='{{.State.Status}}' $CONTAINER_NAME 2>/dev/null) + +if [ "$STATUS" == "running" ]; then + IP=$(hostname -I | awk '{print $1}') + echo -e "${BLUE}========================================${PLAIN}" + echo -e "${GREEN}✅ 部署成功!${PLAIN}" + echo -e "容器状态: ${GREEN}$STATUS${PLAIN}" + echo -e "配置文件: $INSTALL_DIR/$YML_FILE" + echo -e "数据目录: $INSTALL_DIR/data" + echo -e "访问地址: ${GREEN}http://$IP:$PORT${PLAIN}" + echo -e "${BLUE}========================================${PLAIN}" +else + echo -e "${BLUE}========================================${PLAIN}" + echo -e "${RED}❌ 部署可能失败,容器状态: $STATUS${PLAIN}" + echo -e "${YELLOW}请运行以下命令查看报错日志:${PLAIN}" + echo -e "docker logs $CONTAINER_NAME" + echo -e "${BLUE}========================================${PLAIN}" +fi \ No newline at end of file