69 lines
1.7 KiB
Bash
Executable File
69 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
SSH_KEY="${SSH_KEY:-$HOME/Documents/Keys/VirtualEngage.pem}"
|
|
SSH_HOST="${SSH_HOST:-ubuntu@15.207.15.52}"
|
|
REMOTE_DIR="${REMOTE_DIR:-/var/www/virtualpr}"
|
|
SSH_OPTS=(-i "$SSH_KEY" -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new)
|
|
|
|
ssh_cmd() {
|
|
ssh "${SSH_OPTS[@]}" "$SSH_HOST" "$@"
|
|
}
|
|
|
|
rsync_cmd() {
|
|
rsync -az --delete --progress \
|
|
-e "ssh ${SSH_OPTS[*]}" \
|
|
"$@"
|
|
}
|
|
|
|
if [[ ! -f "$SSH_KEY" ]]; then
|
|
echo "SSH key not found: $SSH_KEY"
|
|
exit 1
|
|
fi
|
|
chmod 400 "$SSH_KEY" 2>/dev/null || true
|
|
|
|
echo "==> Building frontend"
|
|
(
|
|
cd "$ROOT/frontend"
|
|
npm ci --cache "$ROOT/.npm-cache"
|
|
npx vite build
|
|
)
|
|
|
|
echo "==> Ensuring remote directories"
|
|
ssh_cmd "sudo mkdir -p '$REMOTE_DIR/frontend' '$REMOTE_DIR/backend' && sudo chown -R ubuntu:ubuntu '$REMOTE_DIR'"
|
|
|
|
echo "==> Syncing frontend build"
|
|
rsync_cmd \
|
|
--exclude node_modules \
|
|
"$ROOT/frontend/dist/" \
|
|
"$SSH_HOST:$REMOTE_DIR/frontend/dist/"
|
|
|
|
echo "==> Syncing backend (keeps remote .env and uploads)"
|
|
rsync_cmd \
|
|
--exclude node_modules \
|
|
--exclude .env \
|
|
--exclude uploads \
|
|
"$ROOT/backend/" \
|
|
"$SSH_HOST:$REMOTE_DIR/backend/"
|
|
|
|
echo "==> Installing backend production deps and restarting PM2"
|
|
ssh_cmd "bash -s" <<EOF
|
|
set -euo pipefail
|
|
export PATH="/usr/bin:/usr/local/bin:\$PATH"
|
|
cd "$REMOTE_DIR/backend"
|
|
if [[ ! -f .env ]]; then
|
|
echo "Missing $REMOTE_DIR/backend/.env on the server. Copy it there before the API will start."
|
|
exit 1
|
|
fi
|
|
if ! command -v pm2 >/dev/null 2>&1; then
|
|
sudo npm install -g pm2
|
|
fi
|
|
npm ci --omit=dev
|
|
pm2 startOrReload ecosystem.config.cjs --update-env
|
|
pm2 save
|
|
pm2 status virtualpr
|
|
EOF
|
|
|
|
echo "==> Deployed to $SSH_HOST:$REMOTE_DIR"
|