#!/usr/bin/env bash set -Eeuo pipefail ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) SERVER=root@47.93.193.127 KEY_FILE="$ROOT_DIR/ccdw-meishi-1.pem" REMOTE_DIR=/opt/xinghen KNOWN_HOSTS="$ROOT_DIR/.deploy-known-hosts" IMAGE_ARCHIVE=$(mktemp /tmp/xinghen-app.XXXXXX.tar.gz) trap 'rm -f "$IMAGE_ARCHIVE"' EXIT if [[ ! -f "$KEY_FILE" ]]; then echo "缺少 SSH 私钥:$KEY_FILE(.pem.pub 公钥不能用于登录)" >&2 exit 1 fi SSH=(ssh -i "$KEY_FILE" -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile="$KNOWN_HOSTS") RSYNC_SSH="ssh -i $KEY_FILE -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=$KNOWN_HOSTS" docker buildx build --platform linux/amd64 --pull --load -t xinghen-app:deploy "$ROOT_DIR" docker save xinghen-app:deploy | gzip >"$IMAGE_ARCHIVE" "${SSH[@]}" "$SERVER" "install -d -m 755 '$REMOTE_DIR' '$REMOTE_DIR/.deploy'" rsync -az --delete \ --exclude '.git/' \ --exclude 'node_modules/' \ --exclude 'dist/' \ --exclude '.env' \ --exclude '.deploy/' \ --exclude '.deploy-known-hosts' \ --exclude '*.pem' \ --exclude '*.pem.pub' \ -e "$RSYNC_SSH" \ "$ROOT_DIR/" "$SERVER:$REMOTE_DIR/" rsync -az -e "$RSYNC_SSH" "$IMAGE_ARCHIVE" "$SERVER:$REMOTE_DIR/.deploy/app-image.tar.gz" "${SSH[@]}" "$SERVER" "chmod 755 '$REMOTE_DIR/deployment/remote-deploy.sh' && ENABLE_FUTURE_DOMAIN='${ENABLE_FUTURE_DOMAIN:-0}' '$REMOTE_DIR/deployment/remote-deploy.sh'" echo "部署完成:https://xinghen.lessncosmos.com"