diff --git a/deploy-full.sh b/deploy-full.sh new file mode 100755 index 0000000..0fe6950 --- /dev/null +++ b/deploy-full.sh @@ -0,0 +1,281 @@ +#!/bin/bash + +# 🚀 Jiao77.cn 一键部署脚本 +# 自动构建并部署 Astro 网站到生产服务器 + +set -e # 遇到错误立即停止 + +SERVER_IP="110.42.70.70" +DEFAULT_USER="root" +DEFAULT_WEB_ROOT="/var/www/jiao77.cn" + +echo "🌟 ==================================" +echo "🌟 Jiao77.cn 网站部署工具" +echo "🌟 ==================================" +echo "" + +# 检查必要的工具 +check_requirements() { + echo "🔍 检查部署环境..." + + if ! command -v npm &> /dev/null; then + echo "❌ 错误: npm 未安装" + exit 1 + fi + + if ! command -v rsync &> /dev/null; then + echo "⚠️ 警告: rsync 未安装,将使用 scp" + USE_RSYNC=false + else + USE_RSYNC=true + fi + + echo "✅ 环境检查完成" +} + +# 构建项目 +build_project() { + echo "" + echo "📦 构建生产版本..." + + if [ ! -f "package.json" ]; then + echo "❌ 错误: 当前目录不是 Astro 项目根目录" + exit 1 + fi + + # 清理之前的构建 + if [ -d "dist" ]; then + rm -rf dist + fi + + # 构建项目 + npm run build + + if [ ! -d "dist" ]; then + echo "❌ 错误: 构建失败,dist 目录不存在" + exit 1 + fi + + # 检查必要的静态文件 + echo "🔍 检查静态资源..." + + # 检查是否有图片资源 + if [ -d "public/report" ]; then + echo "✅ 找到报告图片资源" + else + echo "⚠️ 未找到 public/report 目录" + fi + + # 检查 SEO 相关文件 + if [ -f "public/robots.txt" ]; then + echo "✅ robots.txt 存在" + else + echo "⚠️ 建议添加 robots.txt 文件" + fi + + if [ -f "public/sitemap.xml" ]; then + echo "✅ sitemap.xml 存在" + else + echo "⚠️ 建议添加 sitemap.xml 文件" + fi + + if [ -f "public/favicon.ico" ]; then + echo "✅ favicon.ico 存在" + else + echo "⚠️ 建议添加 favicon.ico 文件" + fi + + echo "✅ 构建完成" +} + +# 获取用户输入 +get_deploy_config() { + echo "" + echo "⚙️ 部署配置" + + read -p "📝 服务器用户名 (默认: ${DEFAULT_USER}): " USERNAME + USERNAME=${USERNAME:-$DEFAULT_USER} + + read -p "📁 网站根目录 (默认: ${DEFAULT_WEB_ROOT}): " WEB_ROOT + WEB_ROOT=${WEB_ROOT:-$DEFAULT_WEB_ROOT} + + echo "" + echo "📋 部署信息确认:" + echo " 服务器: ${SERVER_IP}" + echo " 用户名: ${USERNAME}" + echo " 目录: ${WEB_ROOT}" + echo "" + + read -p "❓ 确认部署? (y/N): " CONFIRM + if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then + echo "❌ 部署已取消" + exit 0 + fi +} + +# 上传 .htaccess 文件 +upload_htaccess() { + echo "📤 上传 .htaccess 文件..." + if [ -f ".htaccess" ]; then + scp .htaccess ${USERNAME}@${SERVER_IP}:${WEB_ROOT}/.htaccess + echo "✅ .htaccess 文件已上传" + else + echo "⚠️ .htaccess 文件不存在,跳过上传" + fi +} + +# 部署文件 +deploy_files() { + echo "" + echo "🚀 开始部署文件..." + + if [ "$USE_RSYNC" = true ]; then + echo "📡 使用 rsync 同步文件..." + rsync -avz --delete --progress \ + --exclude='.htaccess' \ + dist/ ${USERNAME}@${SERVER_IP}:${WEB_ROOT}/ + else + echo "📡 使用 scp 上传文件..." + # 创建临时压缩包 + cd dist + tar -czf ../deploy-temp.tar.gz * + cd .. + + # 上传并解压 + scp deploy-temp.tar.gz ${USERNAME}@${SERVER_IP}:/tmp/ + ssh ${USERNAME}@${SERVER_IP} "cd ${WEB_ROOT} && sudo tar -xzf /tmp/deploy-temp.tar.gz && sudo rm /tmp/deploy-temp.tar.gz" + + # 清理本地临时文件 + rm -f deploy-temp.tar.gz + fi + + # 上传 .htaccess + upload_htaccess + + echo "✅ 文件部署完成" +} + +# 设置文件权限 +set_permissions() { + echo "" + echo "🔐 设置文件权限..." + + ssh ${USERNAME}@${SERVER_IP} " + sudo chown -R www-data:www-data ${WEB_ROOT}/ && + sudo find ${WEB_ROOT}/ -type d -exec chmod 755 {} \; && + sudo find ${WEB_ROOT}/ -type f -exec chmod 644 {} \; + " + + if [ $? -eq 0 ]; then + echo "✅ 权限设置完成" + else + echo "⚠️ 权限设置失败,可能需要手动调整" + fi +} + +# 部署后测试 +post_deploy_test() { + echo "" + echo "🧪 部署后测试..." + + # 测试网站是否可访问 + HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://${SERVER_IP}/ || echo "000") + + if [ "$HTTP_CODE" = "200" ]; then + echo "✅ 网站访问正常 (HTTP $HTTP_CODE)" + else + echo "⚠️ 网站可能存在问题 (HTTP $HTTP_CODE)" + fi + + # 检测压缩是否启用 + GZIP_TEST=$(curl -H "Accept-Encoding: gzip" -s -I http://${SERVER_IP}/ | grep -i "content-encoding: gzip" || echo "") + + if [ -n "$GZIP_TEST" ]; then + echo "✅ Gzip 压缩已启用" + else + echo "⚠️ Gzip 压缩未启用,建议检查 Apache 配置" + fi +} + +# 显示部署结果 +show_results() { + echo "" + echo "🎉 ==================================" + echo "🎉 部署完成!" + echo "🎉 ==================================" + echo "" + echo "🌐 网站地址:" + echo " 主域名: http://jiao77.cn" + echo " IP访问: http://${SERVER_IP}" + echo "" + echo "📋 建议检查事项:" + echo " ✓ 访问网站确认页面正常显示" + echo " ✓ 测试导航卡片点击功能" + echo " ✓ 检查 /reports 页面" + echo " ✓ 验证页眉展开/收缩功能" + echo " ✓ 测试移动端响应式设计" + echo " ✓ 检查动画效果是否正常" + echo "" + echo "🔧 如果遇到问题:" + echo " • 查看部署日志: tail -f /var/log/apache2/error.log" + echo " • 检查文件权限: ls -la ${WEB_ROOT}/" + echo " • 验证 Apache 配置: apache2ctl configtest" + echo "" +} + +# 部署前最终检查 +pre_deploy_check() { + echo "" + echo "🔎 部署前最终检查..." + + # 检查构建产物 + if [ ! -f "dist/index.html" ]; then + echo "❌ 错误: 构建产物不完整,缺少 index.html" + exit 1 + fi + + # 检查报告页面是否存在 + if [ ! -f "dist/reports/index.html" ]; then + echo "⚠️ 警告: reports 页面可能不存在" + fi + + # 检查重要静态资源 + MISSING_FILES=() + + if [ ! -f "dist/robots.txt" ]; then + MISSING_FILES+=("robots.txt") + fi + + if [ ! -f "dist/sitemap.xml" ]; then + MISSING_FILES+=("sitemap.xml") + fi + + if [ ${#MISSING_FILES[@]} -gt 0 ]; then + echo "⚠️ 以下 SEO 文件缺失: ${MISSING_FILES[*]}" + else + echo "✅ SEO 文件检查通过" + fi + + echo "✅ 部署前检查完成" +} + +# 主函数 +main() { + check_requirements + build_project + pre_deploy_check + get_deploy_config + deploy_files + set_permissions + post_deploy_test + show_results +} + +# 错误处理 +trap 'echo "❌ 部署过程中出现错误,请检查输出信息"; exit 1' ERR + +# 执行部署 +main + +echo "🎯 如需 SSL/HTTPS,请参考 DEPLOYMENT.md 中的 SSL 配置章节" +echo "📚 完整部署文档: https://github.com/你的仓库/blob/main/DEPLOYMENT.md" \ No newline at end of file diff --git a/src/pages/index.astro b/src/pages/index.astro index 5d7c9d4..83d8e03 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -41,7 +41,7 @@ import AnimatedElement from '../components/AnimatedElement.astro';