Files
dukang/deploy/remote-setup.sh
T
2026-06-30 10:33:56 +08:00

80 lines
2.4 KiB
Bash

#!/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" <<'ENV'
DATABASE_URL="mysql://dukang:Dukang2026!@localhost:3306/dukang_haoke"
REDIS_URL="redis://localhost:6379"
JWT_SECRET="dukang-prod-jwt-secret-2026"
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