| 1234567891011121314151617181920212223242526272829303132333435363738 |
- #!/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"
|