添加一键部署脚本和自动部署指南

This commit is contained in:
2026-06-02 16:42:38 +08:00
parent e418f03f0c
commit efdd967d69
2 changed files with 454 additions and 0 deletions

237
auto-deploy.sh Normal file
View File

@@ -0,0 +1,237 @@
#!/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}"