#!/bin/bash # ============================================ # 一键部署脚本 - 毕业设计网站 # 目标: https://solarark.net/g2026/g4/ # 使用: sudo bash auto-deploy.sh # ============================================ set -e # 遇到错误立即退出 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 配置变量 REPO_URL="https://gitea.solarark.net/yangyuqing/new-site.git" BRANCH="master" DEPLOY_DIR="/var/www/html/g2026/g4" BACKUP_DIR="/var/www/html/g2026/g4_backup_$(date +%Y%m%d_%H%M%S)" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} 毕业设计网站一键部署脚本${NC}" echo -e "${BLUE} 目标: https://solarark.net/g2026/g4/${NC}" echo -e "${BLUE}========================================${NC}" echo "" # 检查是否以 root 权限运行 if [ "$EUID" -ne 0 ]; then echo -e "${RED}✗ 请使用 sudo 运行此脚本${NC}" echo "用法: sudo bash auto-deploy.sh" exit 1 fi # 第1步:检查依赖 echo -e "${YELLOW}[1/7] 检查系统依赖...${NC}" # 检查 Git if ! command -v git &> /dev/null; then echo -e "${RED}✗ Git 未安装,正在安装...${NC}" apt-get update && apt-get install -y git else echo -e "${GREEN}✓ Git 已安装${NC}" fi # 检查 Web 服务器 if command -v apache2 &> /dev/null || systemctl is-active --quiet apache2; then WEB_SERVER="apache2" echo -e "${GREEN}✓ 检测到 Apache2${NC}" elif command -v nginx &> /dev/null || systemctl is-active --quiet nginx; then WEB_SERVER="nginx" echo -e "${GREEN}✓ 检测到 Nginx${NC}" else echo -e "${YELLOW}! 未检测到 Web 服务器,将安装 Apache2${NC}" apt-get update && apt-get install -y apache2 WEB_SERVER="apache2" fi # 第2步:创建备份(如果目录已存在) echo -e "${YELLOW}[2/7] 检查现有部署...${NC}" if [ -d "$DEPLOY_DIR" ] && [ "$(ls -A $DEPLOY_DIR)" ]; then echo -e "${YELLOW}! 发现现有部署,创建备份...${NC}" mkdir -p $(dirname $BACKUP_DIR) cp -r $DEPLOY_DIR $BACKUP_DIR echo -e "${GREEN}✓ 备份已创建: $BACKUP_DIR${NC}" else echo -e "${GREEN}✓ 全新部署,无需备份${NC}" fi # 第3步:创建部署目录 echo -e "${YELLOW}[3/7] 创建部署目录...${NC}" mkdir -p $DEPLOY_DIR echo -e "${GREEN}✓ 目录已创建: $DEPLOY_DIR${NC}" # 第4步:克隆或更新仓库 echo -e "${YELLOW}[4/7] 获取最新代码...${NC}" cd $DEPLOY_DIR if [ -d ".git" ]; then echo -e "${BLUE} → 更新现有仓库...${NC}" git fetch origin git reset --hard origin/$BRANCH else echo -e "${BLUE} → 克隆新仓库...${NC}" # 清空目录 rm -rf $DEPLOY_DIR/* git clone $REPO_URL . git checkout $BRANCH fi echo -e "${GREEN}✓ 代码已获取${NC}" # 第5步:验证文件 echo -e "${YELLOW}[5/7] 验证部署文件...${NC}" if [ ! -f "index.html" ]; then echo -e "${RED}✗ 错误: index.html 不存在!${NC}" echo -e "${RED} 部署失败,请检查仓库地址和分支${NC}" exit 1 fi if [ ! -f "css/style.css" ]; then echo -e "${RED}✗ 错误: css/style.css 不存在!${NC}" exit 1 fi if [ ! -f "js/main.js" ]; then echo -e "${RED}✗ 错误: js/main.js 不存在!${NC}" exit 1 fi echo -e "${GREEN}✓ 所有关键文件验证通过${NC}" # 第6步:设置权限 echo -e "${YELLOW}[6/7] 设置文件权限...${NC}" # 确定 Web 服务器用户 if [ "$WEB_SERVER" = "apache2" ]; then WEB_USER="www-data" elif [ "$WEB_SERVER" = "nginx" ]; then WEB_USER="nginx" else WEB_USER="www-data" fi chown -R $WEB_USER:$WEB_USER $DEPLOY_DIR chmod -R 755 $DEPLOY_DIR chmod 644 $DEPLOY_DIR/.htaccess 2>/dev/null || true echo -e "${GREEN}✓ 权限设置完成${NC}" # 第7步:配置 Web 服务器 echo -e "${YELLOW}[7/7] 配置 Web 服务器...${NC}" if [ "$WEB_SERVER" = "apache2" ]; then # 确保 mod_rewrite 启用 a2enmod rewrite 2>/dev/null || true # 检查 .htaccess 支持 APACHE_CONF="/etc/apache2/apache2.conf" if grep -q "AllowOverride None" $APACHE_CONF; then echo -e "${YELLOW} → 更新 Apache 配置以支持 .htaccess...${NC}" sed -i 's/AllowOverride None/AllowOverride All/g' $APACHE_CONF fi # 重启 Apache systemctl restart apache2 echo -e "${GREEN}✓ Apache2 已重启${NC}" elif [ "$WEB_SERVER" = "nginx" ]; then # 创建 Nginx 配置文件 NGINX_CONF="/etc/nginx/sites-available/g2026-g4" cat > $NGINX_CONF << 'EOF' server { listen 80; server_name solarark.net; root /var/www/html/g2026/g4; index index.html; location /g2026/g4/ { try_files $uri $uri/ /g2026/g4/index.html; # Gzip 压缩 gzip on; gzip_types text/css application/javascript text/javascript; # 缓存静态资源 location ~* \.(jpg|jpeg|png|gif|webp|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } location ~* \.(css|js)$ { expires 1M; add_header Cache-Control "public"; } } } EOF # 启用站点 ln -sf $NGINX_CONF /etc/nginx/sites-enabled/ # 测试配置 nginx -t # 重启 Nginx systemctl restart nginx echo -e "${GREEN}✓ Nginx 已重启${NC}" fi # 部署完成 echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} ✅ 部署成功!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "${BLUE}访问地址:${NC} https://solarark.net/g2026/g4/" echo -e "${BLUE}部署目录:${NC} $DEPLOY_DIR" echo -e "${BLUE}Web 服务器:${NC} $WEB_SERVER" echo "" # 如果有备份,提示 if [ -d "$BACKUP_DIR" ]; then echo -e "${YELLOW}ℹ 备份位置: $BACKUP_DIR${NC}" echo -e "${YELLOW} 如需回滚: sudo cp -r $BACKUP_DIR/* $DEPLOY_DIR/${NC}" echo "" fi # 测试访问 echo -e "${YELLOW}正在测试访问...${NC}" sleep 2 if curl -s -o /dev/null -w "%{http_code}" "http://localhost/g2026/g4/" | grep -q "200\|301\|302"; then echo -e "${GREEN}✓ 本地访问测试通过${NC}" else echo -e "${YELLOW}! 本地访问测试未通过,请检查 Web 服务器配置${NC}" fi echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 下一步操作:${NC}" echo -e "${GREEN}========================================${NC}" echo "1. 在浏览器中访问: https://solarark.net/g2026/g4/" echo "2. 按 F12 检查控制台是否有错误" echo "3. 测试移动端响应式效果" echo "4. 如有问题,查看日志:" if [ "$WEB_SERVER" = "apache2" ]; then echo " sudo tail -f /var/log/apache2/error.log" else echo " sudo tail -f /var/log/nginx/error.log" fi echo "" echo -e "${GREEN}祝毕业设计展示圆满成功!🎓✨${NC}"