#!/usr/bin/env bash # ============================================================= # 寄卖商城(integral-resell)一键部署脚本 # 目标服务器:118.31.36.212 # 使用方式:bash deploy/docker/scripts/deploy-step1.sh # ============================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" STEP1_DIR="${PROJECT_ROOT}/deploy/docker/step1-integral-bygsf212" # ---------- 读取服务器配置 ---------- if [ -f "$SCRIPT_DIR/server.env" ]; then set -a; . "$SCRIPT_DIR/server.env"; set +a else echo "[!] 未找到 server.env,请先创建"; exit 1 fi SERVER_HOST="${SERVER_HOST:?}" SERVER_USER="${SERVER_USER:-root}" SERVER_PORT="${SERVER_PORT:-22}" REMOTE_DIR="${REMOTE_DIR:-/root/integral-shop}" REMOTE_STEP1="${REMOTE_DIR}/deploy/docker/step1-integral-bygsf212" REDIS_PASS="${REDIS_PASS:?请通过环境变量 REDIS_PASS 提供 Redis 密码}" DB_PASS="${DB_PASS:?请通过环境变量 DB_PASS 提供数据库密码}" SMS_KEYID="${SMS_KEYID:?请通过环境变量 SMS_KEYID 提供短信 KeyId}" SMS_KEYSECRET="${SMS_KEYSECRET:?请通过环境变量 SMS_KEYSECRET 提供短信 KeySecret}" APP_SECRET="${APP_SECRET:-ZFyTNQTWEkCBczKzyUDJWE9Ecx260610}" # ---------- SSH / rsync 通道 ---------- SSH_OPTS="-p $SERVER_PORT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" if [ -n "${SSHPASS:-}" ]; then command -v sshpass >/dev/null 2>&1 || { echo "需要 sshpass"; exit 1; } export SSHPASS SSH=(sshpass -e ssh $SSH_OPTS) RSYNC_SSH="sshpass -e ssh $SSH_OPTS" else SSH=(ssh $SSH_OPTS) RSYNC_SSH="ssh $SSH_OPTS" fi RSYNC_BIN="/opt/homebrew/bin/rsync" [ -x "$RSYNC_BIN" ] || RSYNC_BIN="rsync" remote() { "${SSH[@]}" "${SERVER_USER}@${SERVER_HOST}" "$@"; } echo "" echo "══════════════════════════════════════════════════════" echo " 寄卖商城 Docker 一键部署 → ${SERVER_HOST}" echo "══════════════════════════════════════════════════════" # ─── 1. 生成本地临时 env 文件 ───────────────────────────────── echo "" echo "▶ [1/6] 生成临时 .env / houtai.env ..." TMPENV=$(mktemp -d) trap 'rm -rf "$TMPENV"' EXIT cat > "$TMPENV/.env" < "$TMPENV/houtai.env" <