77 lines
1.9 KiB
Bash
Executable File
77 lines
1.9 KiB
Bash
Executable File
#!/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}"
|