#!/bin/bash set -e DEPLOY_DIR="$PWD" echo "=== Auto-SSL 一键部署脚本 ===" # 1. 拉取最新代码 echo "1. 拉取最新代码..." git pull origin master 2>/dev/null || git pull origin 0.0.2 2>/dev/null || echo " (跳过git拉取)" # 检查是否有构建环境 HAS_GO=$(command -v go &>/dev/null && echo "yes" || echo "no") HAS_NPM=$(command -v npm &>/dev/null && echo "yes" || echo "no") # 2. 编译后端 if [ "$HAS_GO" = "yes" ]; then echo "2. 编译Go后端..." cd backend go build -o autossl . cd "$DEPLOY_DIR" else echo "2. 跳过Go编译(未安装go),使用预编译二进制" fi # 3. 编译前端 if [ "$HAS_NPM" = "yes" ]; then echo "3. 编译Vue前端..." cd frontend npm install --include=dev npm run build cd "$DEPLOY_DIR" else echo "3. 跳过前端编译(未安装npm),使用预构建dist" fi # 4. 部署前端资源 echo "4. 部署前端资源..." if [ -d "frontend/dist" ] && [ -n "$(ls -A frontend/dist 2>/dev/null)" ]; then rm -rf backend/dist mkdir -p backend/dist cp -rf frontend/dist/* backend/dist/ echo " 前端资源已部署" else echo " frontend/dist 为空或不存,跳过" fi # 5. 安装systemd服务 echo "5. 安装systemd服务..." cat > /tmp/autossl.service << EOSERVICE [Unit] Description=Auto-SSL 证书管理服务 After=network.target Wants=network.target [Service] Type=simple User=root WorkingDirectory=${DEPLOY_DIR}/backend Environment="PORT=9090" Environment="ACME_PORT=8082" Environment="GIN_MODE=release" Environment="ADMIN_USER=admin" Environment="ADMIN_PASSWORD=admin123" Environment="JWT_SECRET=" # 通知配置可在 Web 界面中设置,无需环境变量 # 环境变量会覆盖 Web 界面配置(向后兼容) # Environment="FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx" # Environment="SMTP_HOST=smtp.example.com" # Environment="SMTP_PORT=587" # Environment="SMTP_USER=user@example.com" # Environment="SMTP_PASSWORD=password" # Environment="SMTP_FROM=user@example.com" # Environment="NOTIFY_TO=admin@example.com" ExecStart=${DEPLOY_DIR}/backend/autossl Restart=always RestartSec=3 StandardOutput=journal+console StandardError=journal+console SyslogIdentifier=autossl [Install] WantedBy=multi-user.target EOSERVICE cp /tmp/autossl.service /etc/systemd/system/autossl.service systemctl daemon-reload systemctl enable autossl # 6. 重启服务 echo "6. 重启服务..." systemctl restart autossl # 7. 检查状态 sleep 2 echo "7. 检查服务状态..." if curl -s http://127.0.0.1:9090/api/health > /dev/null; then echo "✅ 部署成功!服务运行在 http://0.0.0.0:9090" echo "📝 日志查看:journalctl -u autossl -f" echo "" echo "默认登录账号: admin / admin123" echo "请通过环境变量 ADMIN_USER / ADMIN_PASSWORD 修改密码" else echo "❌ 部署失败,请检查日志:journalctl -u autossl -n 50" exit 1 fi