#!/bin/bash # Deploy UNT (NOVA) to server # Usage: ./ctrl/deploy.sh [push|rsync|sync|restart|edge] # # push — (default) build images locally, push to registry, deploy (avoids OOM on server) # rsync — sync source, rebuild images on server, restart (bypass CI) # sync — sync source only (no rebuild, no restart) # restart — restart containers (no sync, no rebuild) # edge — pull latest images from registry and restart # # Note: code is baked into the image (no volume mounts), so code changes # need a rebuild (rsync | edge). Config-only changes (docker-compose, .env # already on server) can use `restart`. set -e cd "$(dirname "$0")/.." SERVER="mcrn.ar" REMOTE_DIR="~/unt" do_sync() { echo "=== Syncing source to $SERVER ===" rsync -avz --exclude='.git' --exclude='node_modules' --exclude='.venv' \ --exclude='ui/app/dist' --exclude='__pycache__' \ --exclude='ctrl/edge/.env' \ --filter=':- .gitignore' \ . "$SERVER:$REMOTE_DIR/" } do_rebuild_and_restart() { echo "=== Building and restarting on server ===" ssh "$SERVER" << 'EOF' cd ~/unt docker build -t registry.mcrn.ar/unt/api:latest -f ctrl/Dockerfile.api . docker build -t registry.mcrn.ar/unt/ui:latest -f ctrl/Dockerfile.ui . cd ctrl/edge [ -f .env ] || cp .env.example .env docker compose up -d --remove-orphans --force-recreate docker image prune -f docker compose ps EOF } do_restart() { echo "=== Restarting containers on $SERVER ===" ssh "$SERVER" << 'EOF' cd ~/unt/ctrl/edge docker compose up -d --remove-orphans --force-recreate docker compose ps EOF } case "${1:-push}" in rsync) do_sync do_rebuild_and_restart ;; sync) do_sync ;; restart) do_restart ;; push) echo "=== Building images locally ===" docker build -t unt/api:latest -f ctrl/Dockerfile.api . docker build -t unt/ui:latest -f ctrl/Dockerfile.ui . echo "=== Pushing to registry ===" /home/mariano/wdir/ppl/ctrl/push-image.sh unt/api latest /home/mariano/wdir/ppl/ctrl/push-image.sh unt/ui latest echo "=== Pulling and restarting on $SERVER ===" ssh "$SERVER" << 'EOF' cd ~/unt/ctrl/edge docker compose pull docker compose up -d --remove-orphans --force-recreate docker image prune -f docker compose ps EOF ;; edge) echo "=== Pulling latest images on $SERVER ===" ssh "$SERVER" << 'EOF' cd ~/unt/ctrl/edge docker compose pull docker compose up -d --remove-orphans --force-recreate docker image prune -f docker compose ps EOF ;; *) echo "Usage: $0 [rsync|sync|restart|push|edge]" exit 1 ;; esac echo "=== Done ==="