Files
dock/te消息转发
2026-01-22 21:08:16 +08:00

134 lines
4.3 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
# ================= 颜色定义 =================
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
PLAIN='\033[0m'
# ================= 默认配置 =================
DEFAULT_PORT=5005
CONTAINER_NAME="telegram-monitor"
IMAGE_NAME="ghcr.io/riniba/telegrammonitor:latest"
YML_FILE="${CONTAINER_NAME}.yml"
# 检查是否以 root 运行
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误: 必须使用 root 用户运行此脚本!${PLAIN}"
exit 1
fi
clear
echo -e "${BLUE}====================================================${PLAIN}"
echo -e "${BLUE} Telegram Monitor 一键部署脚本 (优化版 v2.0) ${PLAIN}"
echo -e "${BLUE}====================================================${PLAIN}"
# 1. 检查 Docker 环境
echo -e "${YELLOW}[1/6] 检查 Docker 环境...${PLAIN}"
if ! command -v docker &> /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 <<EOF
version: '3.8'
services:
telegram-monitor:
image: $IMAGE_NAME
container_name: $CONTAINER_NAME
restart: unless-stopped
ports:
- "$PORT:5005"
volumes:
- ./data:/app
environment:
- ASPNETCORE_ENVIRONMENT=Production
EOF
echo -e "${GREEN}配置文件已生成。${PLAIN}"
# 6. 启动容器与健康检查
echo -e "${YELLOW}[6/6] 拉取镜像并启动容器...${PLAIN}"
# 判断使用 docker compose 还是 docker-compose
if docker compose version >/dev/null 2>&1; then
CMD="docker compose"
elif docker-compose version >/dev/null 2>&1; then
CMD="docker-compose"
else
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
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