initial commit
This commit is contained in:
215
deploy-full.sh
Executable file
215
deploy-full.sh
Executable file
@@ -0,0 +1,215 @@
|
||||
#!/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 "✅ 构建完成"
|
||||
}
|
||||
|
||||
# 获取用户输入
|
||||
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 ""
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
check_requirements
|
||||
build_project
|
||||
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"
|
||||
Reference in New Issue
Block a user