#!/usr/bin/env bash # # LinkSyncServer - Deploy Script # # Prepares a deployment package by copying only production files, # excluding development artifacts, and creating a starter .env file. # # Usage: ./deploy.sh # # After running, edit the .env file with production secrets # and run: docker-compose up -d --build # set -euo pipefail SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DEPLOY_PATH="${1:?Usage: $0 }" RED='\033[0;31m' CYAN='\033[0;36m' YELLOW='\033[1;33m' GRAY='\033[0;37m' GREEN='\033[0;32m' NC='\033[0m' echo -e "${CYAN}LinkSyncServer - Deploy Script${NC}" echo -e "${GRAY} Source: $SOURCE_DIR${NC}" echo -e "${GRAY} Deploy to: $DEPLOY_PATH${NC}" echo "" # Create target directory mkdir -p "$DEPLOY_PATH" # Clean if existing content if [ "$(ls -A "$DEPLOY_PATH" 2>/dev/null)" ]; then read -p "Target folder already exists. Clear it? (y/N): " confirm if [ "$confirm" != "y" ]; then echo -e "${YELLOW}Aborted.${NC}" exit 1 fi rm -rf "${DEPLOY_PATH:?}"/* fi echo -e "${GRAY}Copying files...${NC}" # Exclusion patterns EXCLUDE=( "__pycache__" ".pytest_cache" ".git" ".vscode" ".idea" ".mypy_cache" ".ruff_cache" "node_modules" "dist" "build" "tests" "*.egg-info" "deploy.sh" ) # Build rsync exclude arguments RSYNC_EXCLUDE=() for pattern in "${EXCLUDE[@]}"; do RSYNC_EXCLUDE+=(--exclude="$pattern") done # Use rsync to copy, excluding dev artifacts rsync -a "${RSYNC_EXCLUDE[@]}" \ --exclude="*.pyc" \ --exclude="*.pyo" \ --exclude="*.pyd" \ --exclude="*.db" \ --exclude="*.sqlite3" \ --exclude="deploy.ps1" \ "$SOURCE_DIR/" "$DEPLOY_PATH/" # Copy .env.example as .env if [ -f "$SOURCE_DIR/.env.example" ]; then cp "$SOURCE_DIR/.env.example" "$DEPLOY_PATH/.env" echo -e "${GREEN} Created .env from .env.example${NC}" fi echo "" echo -e "${CYAN}Deployment package prepared at: $DEPLOY_PATH${NC}" echo "" echo -e "${YELLOW}Next steps:${NC}" echo -e "${GRAY} 1. Edit $DEPLOY_PATH/.env with production secrets${NC}" echo -e "${GRAY} - Set DATABASE_URL (PostgreSQL connection string)${NC}" echo -e "${GRAY} - Set SECRET_KEY (generate: openssl rand -base64 32)${NC}" echo -e "${GRAY} - Set ADMIN_PASSWORD (strong password)${NC}" echo -e "${GRAY} 2. cd $DEPLOY_PATH${NC}" echo -e "${GRAY} 3. docker-compose up -d --build${NC}" echo ""