#!/usr/bin/env bash set -euo pipefail APP_ROOT="/opt/dukang-haoke" DEPLOY_DIR="$(cd "$(dirname "$0")" && pwd)" echo "==> 1. 安装 MySQL(如未安装)" if ! command -v mysqld &>/dev/null; then dnf install -y mysql-server systemctl enable --now mysqld sleep 3 fi echo "==> 2. 配置 MySQL 数据库" mysql -uroot -e "CREATE DATABASE IF NOT EXISTS dukang_haoke CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null || true mysql -uroot -e "CREATE USER IF NOT EXISTS 'dukang'@'localhost' IDENTIFIED BY 'Dukang2026!';" 2>/dev/null || \ mysql -uroot -e "ALTER USER 'dukang'@'localhost' IDENTIFIED BY 'Dukang2026!';" 2>/dev/null || true mysql -uroot -e "GRANT ALL PRIVILEGES ON dukang_haoke.* TO 'dukang'@'localhost'; FLUSH PRIVILEGES;" 2>/dev/null || true echo "==> 3. 启用 pnpm" corepack enable corepack prepare pnpm@11.2.2 --activate echo "==> 4. 安装依赖并构建" cd "$APP_ROOT" pnpm install --frozen-lockfile 2>/dev/null || pnpm install pnpm build echo "==> 5. 写入 API 生产环境变量" cat > "$APP_ROOT/server/dukang-api/.env.production" <<'ENV' DATABASE_URL="mysql://dukang:Dukang2026!@localhost:3306/dukang_haoke" REDIS_URL="redis://localhost:6379" JWT_SECRET="gky4CNZgwdrYoDIDy4AWBiJRa4WX2ax8STe3TEG93Ht" JWT_EXPIRES_IN="7d" PORT=8090 MOCK_SMS=true MOCK_SMS_CODE=123456 MOCK_PAY=true MOCK_DELIVERY_AUTO=true AUTO_APPROVE_STORE=true ENV echo "==> 6. 初始化数据库" cd "$APP_ROOT/server/dukang-api" pnpm prisma:generate npx prisma db push --accept-data-loss pnpm prisma:seed echo "==> 7. 安装 serve(静态服务)" npm install -g serve echo "==> 8. 启动 PM2 进程" mkdir -p /var/log/nginx/dukang /var/www/certbot pm2 delete dukang-api dukang-h5-user dukang-h5-shop dukang-h5-partner 2>/dev/null || true pm2 start "$DEPLOY_DIR/ecosystem.config.cjs" pm2 save echo "==> 9. 申请 SSL 证书" if [ ! -f /etc/letsencrypt/live/user.ai-mirror.xyz/fullchain.pem ]; then certbot certonly --webroot -w /var/www/certbot \ -d user.ai-mirror.xyz \ -d shop.ai-mirror.xyz \ -d partner.ai-mirror.xyz \ --non-interactive --agree-tos -m admin@ai-mirror.xyz || \ certbot certonly --nginx \ -d user.ai-mirror.xyz \ -d shop.ai-mirror.xyz \ -d partner.ai-mirror.xyz \ --non-interactive --agree-tos -m admin@ai-mirror.xyz fi echo "==> 10. 配置 Nginx" cp "$DEPLOY_DIR/nginx-ai-mirror.conf" /etc/nginx/conf.d/dukang-ai-mirror.conf nginx -t systemctl reload nginx echo "==> 部署完成" pm2 list ss -tlnp | grep -E '809[0-3]' || true