#!/bin/bash # Deploy MPR to remote server via rsync # Uses project .gitignore for excludes # # Usage: ./ctrl/deploy.sh [--restart] [--dry-run] # # Examples: # ./ctrl/deploy.sh # Sync files only # ./ctrl/deploy.sh --restart # Sync and restart services # ./ctrl/deploy.sh --dry-run # Preview sync set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "$SCRIPT_DIR/.env" 2>/dev/null || true RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' if [ -z "$SERVER" ] || [ -z "$REMOTE_PATH" ]; then echo -e "${RED}Error: SERVER and REMOTE_PATH must be set in ctrl/.env${NC}" echo "Example:" echo " SERVER=user@host" echo " REMOTE_PATH=~/mpr" exit 1 fi RESTART=false DRY_RUN="" while [ $# -gt 0 ]; do case "$1" in --restart) RESTART=true shift ;; --dry-run) DRY_RUN="--dry-run" shift ;; *) echo "Unknown option: $1" exit 1 ;; esac done echo -e "${GREEN}=== Deploying MPR to $SERVER:$REMOTE_PATH ===${NC}" # Sync files using .gitignore for excludes echo -e "${YELLOW}Syncing files...${NC}" rsync -avz --delete $DRY_RUN \ --filter=':- .gitignore' \ --exclude='.git' \ --exclude='media/*' \ --exclude='ctrl/.env' \ "$PROJECT_ROOT/" "$SERVER:$REMOTE_PATH/" if [ -n "$DRY_RUN" ]; then echo -e "${YELLOW}Dry run - no changes made${NC}" exit 0 fi # Copy env template if .env doesn't exist on remote ssh "$SERVER" "[ -f $REMOTE_PATH/ctrl/.env ] || cp $REMOTE_PATH/ctrl/.env.template $REMOTE_PATH/ctrl/.env" if [ "$RESTART" = true ]; then echo -e "${YELLOW}Restarting services...${NC}" ssh "$SERVER" "cd $REMOTE_PATH/ctrl && docker compose down && docker compose up -d --build" fi echo -e "${GREEN}Done!${NC}"