#!/bin/bash # Write Server Docker 一键部署脚本 # 用法: ./deploy.sh 或 cd /hugo && bash write-server/deploy.sh set -e # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo "" echo "===================================" echo " Write Server 自动部署" echo "===================================" echo "" # 检测脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # 1. 检查是否有更新 echo -e "${YELLOW}[1/5]${NC} 检查代码更新..." CHANGES_BEFORE=$(git rev-parse HEAD) git pull origin main CHANGES_AFTER=$(git rev-parse HEAD) if [ "$CHANGES_BEFORE" = "$CHANGES_AFTER" ]; then echo -e "${GREEN}✓${NC} 代码已是最新,无需重新构建" exit 0 fi echo -e "${GREEN}✓${NC} 检测到新代码,开始构建..." # 2. 停止旧容器 echo "" echo -e "${YELLOW}[2/5]${NC} 停止旧容器..." docker compose down echo -e "${GREEN}✓${NC} 旧容器已停止" # 3. 重新构建 echo "" echo -e "${YELLOW}[3/5]${NC} 重新构建镜像..." docker compose build --no-cache echo -e "${GREEN}✓${NC} 镜像构建完成" # 4. 启动新容器 echo "" echo -e "${YELLOW}[4/5]${NC} 启动新容器..." docker compose up -d echo -e "${GREEN}✓${NC} 容器已启动" # 5. 等待服务就绪 echo "" echo -e "${YELLOW}[5/5]${NC} 等待服务就绪..." sleep 5 # 健康检查 echo "" echo "===================================" echo " 检查服务状态" echo "===================================" echo "" # 检查容器状态 if docker compose ps | grep -q "Up"; then echo -e "${GREEN}✓${NC} 容器运行正常" else echo -e "${RED}✗${NC} 容器启动失败" echo "" echo "查看日志:" echo " docker compose logs -f" exit 1 fi # 检查 Bot 启动日志 echo "" echo "检查 Bot 启动状态..." sleep 3 if docker compose logs --tail 20 2>&1 | grep -q "\[bot\]"; then echo -e "${GREEN}✓${NC} Telegram Bot 已启动" else echo -e "${YELLOW}⚠${NC} 未检测到 Bot 启动日志(可能需要检查配置)" fi # 检查 comment notifier if docker compose logs --tail 20 2>&1 | grep -q "\[comment-notify\]"; then echo -e "${GREEN}✓${NC} 评论通知已启动" else echo -e "${YELLOW}⚠${NC} 未检测到评论通知日志" fi echo "" echo "===================================" echo -e " ${GREEN}部署完成!${NC}" echo "===================================" echo "" echo "常用命令:" echo " 查看日志: docker compose logs -f" echo " 重启服务: docker compose restart" echo " 停止服务: docker compose down" echo ""