Files
new-site/auto-deploy.sh

238 lines
6.7 KiB
Bash
Raw Permalink 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
# ============================================
# 一键部署脚本 - 毕业设计网站
# 目标: 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}"