Monorepo for Aesthetic.Computer aesthetic.computer
at main 93 lines 3.0 kB view raw
1#!/usr/bin/env fish 2# Silo Deployment Script 3# Deploys the Silo data dashboard to DigitalOcean droplet 4# 5# Usage: 6# fish deploy.fish # Full deploy (server + dashboard, restarts service) 7# fish deploy.fish --dash # Dashboard-only (uploads HTML, SIGHUP reload, zero downtime) 8 9set RED '\033[0;31m' 10set GREEN '\033[0;32m' 11set YELLOW '\033[1;33m' 12set NC '\033[0m' 13 14set SCRIPT_DIR (dirname (status --current-filename)) 15set VAULT_DIR "$SCRIPT_DIR/../aesthetic-computer-vault" 16set SSH_KEY "$VAULT_DIR/home/.ssh/id_rsa" 17set SERVICE_ENV "$VAULT_DIR/silo/.env" 18set SILO_HOST "silo.aesthetic.computer" 19set SILO_USER "root" 20set REMOTE_DIR "/opt/silo" 21 22set DASH_ONLY false 23if contains -- --dash $argv 24 set DASH_ONLY true 25end 26 27# Check for required files 28if not test -f $SSH_KEY 29 echo -e "$RED x SSH key not found: $SSH_KEY$NC" 30 exit 1 31end 32 33if not test -f $SERVICE_ENV; and test $DASH_ONLY = false 34 echo -e "$RED x Service env not found: $SERVICE_ENV$NC" 35 exit 1 36end 37 38# Test SSH connection 39echo -e "$GREEN-> Testing SSH connection to $SILO_HOST...$NC" 40if not ssh -i $SSH_KEY -o StrictHostKeyChecking=no -o ConnectTimeout=10 $SILO_USER@$SILO_HOST "echo ok" &>/dev/null 41 echo -e "$RED x Cannot connect to $SILO_HOST$NC" 42 exit 1 43end 44echo -e "$GREEN Connected.$NC" 45 46if test $DASH_ONLY = true 47 # Dashboard-only deploy: upload HTML, send SIGHUP (no restart) 48 echo -e "$GREEN-> Uploading dashboard.html (zero-downtime)...$NC" 49 scp -i $SSH_KEY -o StrictHostKeyChecking=no \ 50 $SCRIPT_DIR/dashboard.html \ 51 $SILO_USER@$SILO_HOST:$REMOTE_DIR/ 52 53 ssh -i $SSH_KEY $SILO_USER@$SILO_HOST " 54 chown silo:silo $REMOTE_DIR/dashboard.html 55 kill -HUP \$(systemctl show -p MainPID --value silo) 56 " 57 echo -e "$GREEN Dashboard reloaded (SIGHUP). No restart needed.$NC" 58else 59 # Full deploy: upload all files + restart 60 echo -e "$GREEN-> Uploading silo files...$NC" 61 scp -i $SSH_KEY -o StrictHostKeyChecking=no \ 62 $SCRIPT_DIR/server.mjs \ 63 $SCRIPT_DIR/dashboard.html \ 64 $SCRIPT_DIR/package.json \ 65 $SCRIPT_DIR/package-lock.json \ 66 $SILO_USER@$SILO_HOST:$REMOTE_DIR/ 67 68 # Upload production .env from vault 69 scp -i $SSH_KEY -o StrictHostKeyChecking=no \ 70 $SERVICE_ENV $SILO_USER@$SILO_HOST:$REMOTE_DIR/.env 71 72 # Fix ownership, install deps if needed, restart 73 echo -e "$GREEN-> Installing dependencies & restarting...$NC" 74 ssh -i $SSH_KEY $SILO_USER@$SILO_HOST " 75 chown -R silo:silo $REMOTE_DIR 76 cd $REMOTE_DIR && npm install --production --silent 2>&1 | tail -1 77 systemctl restart silo 78 sleep 2 79 systemctl is-active silo 80 " 81 82 set STATUS $status 83 if test $STATUS -eq 0 84 echo -e "$GREEN Silo is running.$NC" 85 else 86 echo -e "$RED x Silo failed to start. Check logs:$NC" 87 echo -e "$YELLOW ssh -i $SSH_KEY $SILO_USER@$SILO_HOST journalctl -u silo -n 30$NC" 88 exit 1 89 end 90end 91 92echo "" 93echo -e "$GREEN Done. Silo deployed to https://$SILO_HOST$NC"