1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
| #!/bin/bash
# ================================ # 博客自动部署脚本 # 文件名:blog_deploy.sh # 作用:一键部署Hexo博客到Nginx # 作者:lifeu # 版本:1.0 # 日期:2025-10-23 # ================================
#颜色定义(让输出更美观) RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' NC='\033[0m' #No Color
#配置变量 BLOG_DIR="/root/myblog" WEB_DIR="/usr/share/nginx/html" BACKUP_DIR="/backup/blog" LOG_FILE="/var/log/blog_deploy.log"
#日志函数 log_info() { echo -e "${GREEN}[INFO]${NC}$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE }
log_warn() { echo -e "${YELLOW}[WARN]${NC}$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE }
log_error() { echo -e "${RED}[ERROR]${NC}$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE }
#检查环境函数 check_environment() { log_info "开始环境检查..."
#检查博客目录 if [ ! -d "$BLOG_DIR" ]; then log_error "博客目录不存在: $BLOG_DIR" exit 1 fi
#检查Hexo命令 if ! command -v hexo &> /dev/null; then log_error "Hexo命令未找到,请先安装Hexo" exit 1 fi
#检查Nginx服务 if ! systemctl is-active --quiet nginx; then log_warn "Nginx服务未运行,尝试启动..." sudo systemctl start nginx if [ $? -ne 0 ]; then log_error "无法启动Nginx服务" exit 1 fi fi
log_info "环境检查完成" }
#备份现有网站函数 backup_website() { log_info "开始备份现有网站"
#创建备份目录 BACKUP_PATH="$BACKUP_DIR/$(date '+%Y%m%d_%H%M%S')" sudo mkdir -p "$BACKUP_PATH"
#备份现有文件 if [ "$(ls -A $WEB_DIR)" ];then sudo cp -r "$WEB_DIR"/* "$BACKUP_PATH"/ else log_warn "Web目录为空,跳过备份" fi }
#生成博客函数 generate_blog() { log_info "开始生成博客静态文件..."
cd "$BLOG_DIR"
#清理缓存 log_info "清理Hexo缓存..." hexo clean if [ $? -ne 0 ]; then log_error "清理缓存失败" exit 1 fi
#生成静态文件 log_info "生成静态文件..." hexo generate if [ $? -ne 0 ]; then log_error "生成静态文件失败" exit 1 fi
#检查生成结果 if [ ! -d "$BLOG_DIR/public" ] || [ -z "$(ls -A $BLOG_DIR/public)" ]; then log_error "静态文件生成失败或为空" exit 1 fi
log_info "博客生成完成" }
#部署网站函数 deploy_website() { log_info "开始部署网站..."
#清空Wbe目录 sudo rm -rf "$WEB_DIR"/*
#复制新文件 sudo cp -r "$BLOG_DIR/public"/* "$WEB_DIR"/ if [ $? -ne 0 ]; then log_error "文件复制失败" exit 1 fi
#设置文件权限 sudo chown -R nginx:nginx "$WEB_DIR" sudo chmod -R 644 "$WEB_DIR" sudo find "$WEB_DIR" -type d -exec chmod 755 {} \;
log_info "网站部署完成" }
#重启服务函数 restart_services() { log_info "重启相关服务..."
#测试Nginx配置 sudo nginx -t if [ $? -ne 0 ]; then log_error "Nginx配置测试失败" exit 1 fi
#重新加载Nginx sudo systemctl reload nginx if [ $? -ne 0 ]; then log_error "Nginx重新加载失败" exit 1 fi
log_info "服务重启完成" }
#验证部署函数 verify_deployment() { log_info "验证部署结果..."
#检查网站文件 if [ ! -f "$WEB_DIR/index.html" ]; then log_error "网站首页文件不存在" exit 1 fi
#测试HTTP响应 HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost) if [ "$HTTP_CODE" != "200" ]; then log_error "网站HTTP响应异常: $HTTP_CODE" exit 1 fi
log_info "部署验证成功" }
#显示部署信息函数 show_deployment_info() { echo "" echo -e "${BLUE}================================================${NC}" echo -e "${BLUE} 博客部署成功!${NC}" echo -e "${BLUE}================================================${NC}" echo "" echo -e "博客地址:${GREEN}<http://$>(curl -s ifconfig.me)${NC}" echo -e "本地预览:${GREEN}<http://localhost>${NC}" echo -e "部署时间:${GREEN}$(date '+%Y-%m-%d %H:%M:%S')${NC}" echo -e "日志文件:${GREEN}$LOG_FILE${NC}" echo "" echo -e "${YELLOW}提示:可以通过浏览器访问上述地址查看博客${NC}" echo "" }
#主函数 main() { echo -e "${BLUE}开始执行博客自动部署脚本...${NC}" echo ""
#创建日志目录 sudo mkdir -p "$(dirname $LOG_FILE)"
#执行部署流程 check_environment backup_website generate_blog deploy_website restart_services verify_deployment show_deployment_info
log_info "博客部署脚本执行完成" }
#脚本入口点 if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@" fi
|