#!/bin/bash # ForensicPathways Deployment Script # Usage: sudo ./deploy.sh set -e WEBROOT="/var/www/forensic-pathways" BACKUP_DIR="/var/backups/forensic-pathways" LOG_DIR="$WEBROOT/logs" DATA_DIR="$WEBROOT/data" UPLOADS_DIR="$WEBROOT/public/uploads" echo "๐Ÿš€ ForensicPathways Deployment Starting..." echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" echo "" # Check if running as root if [ "$EUID" -ne 0 ]; then echo "โŒ Error: This script must be run as root (use sudo)" exit 1 fi # Check prerequisites echo "๐Ÿ” Checking prerequisites..." if ! command -v npm &> /dev/null; then echo "โŒ Error: npm is not installed" exit 1 fi echo "โœ… npm found: $(npm --version)" if ! command -v node &> /dev/null; then echo "โŒ Error: Node.js is not installed" exit 1 fi echo "โœ… Node.js found: $(node --version)" # Check if dist directory exists or can be built if [ ! -d "dist" ]; then echo "๐Ÿ“ฆ Building application..." npm run build echo "โœ… Build completed successfully" else echo "๐Ÿ“ฆ Found existing dist/ directory" read -p "๐Ÿค” Rebuild application? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "๐Ÿ“ฆ Rebuilding application..." npm run build echo "โœ… Rebuild completed successfully" else echo "๐Ÿ“ฆ Using existing build" fi fi # Create backup if existing deployment exists if [ -d "$WEBROOT" ]; then BACKUP_TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_PATH="$BACKUP_DIR/$BACKUP_TIMESTAMP" echo "๐Ÿ’พ Creating backup at $BACKUP_PATH..." mkdir -p "$BACKUP_DIR" cp -r "$WEBROOT" "$BACKUP_PATH" echo "โœ… Backup created successfully" # Preserve existing .env if it exists if [ -f "$WEBROOT/.env" ]; then cp "$WEBROOT/.env" "/tmp/forensic-pathways.env.backup" echo "๐Ÿ’พ Preserved existing .env configuration" fi # Clean old backups (keep last 5) cd "$BACKUP_DIR" ls -1t | tail -n +6 | xargs -r rm -rf echo "๐Ÿงน Cleaned old backups (keeping last 5)" fi # Create webroot and subdirectories echo "๐Ÿ“ Setting up directory structure..." mkdir -p "$WEBROOT" mkdir -p "$LOG_DIR" mkdir -p "$DATA_DIR" mkdir -p "$UPLOADS_DIR" mkdir -p "$WEBROOT/src/data" mkdir -p "$WEBROOT/public" mkdir -p "$WEBROOT/server" echo "โœ… Directory structure created" # Copy built application echo "๐Ÿ“‹ Copying application files..." if [ -d "dist" ]; then cp -r dist/* "$WEBROOT/" echo "โœ… Application files copied" else echo "โŒ Error: dist/ directory not found" exit 1 fi # Copy essential data files echo "๐Ÿ—‚๏ธ Setting up data files..." if [ -f "src/data/tools.yaml" ]; then cp src/data/tools.yaml "$WEBROOT/src/data/" echo "โœ… tools.yaml copied" else echo "โŒ Error: src/data/tools.yaml not found" exit 1 fi # Copy any existing knowledgebase content if [ -d "src/content/knowledgebase" ]; then mkdir -p "$WEBROOT/src/content" cp -r src/content/knowledgebase "$WEBROOT/src/content/" echo "โœ… Knowledgebase content copied" fi # Handle environment configuration if [ -f "/tmp/forensic-pathways.env.backup" ]; then echo "๐Ÿ”ง Restoring existing .env configuration..." cp "/tmp/forensic-pathways.env.backup" "$WEBROOT/.env" rm "/tmp/forensic-pathways.env.backup" echo "โœ… Existing configuration restored" else echo "๐Ÿ”ง Setting up new environment configuration..." cp .env.example "$WEBROOT/.env" echo "โš ๏ธ IMPORTANT: Edit $WEBROOT/.env with your configuration" fi # Create additional required files and directories echo "๐Ÿ“ Creating additional files..." # Create embeddings data directory mkdir -p "$DATA_DIR/embeddings" # Create logs directory with proper structure mkdir -p "$LOG_DIR/access" mkdir -p "$LOG_DIR/error" mkdir -p "$LOG_DIR/ai" # Create placeholder log files touch "$LOG_DIR/access.log" touch "$LOG_DIR/error.log" touch "$LOG_DIR/ai-pipeline.log" echo "โœ… Additional files and directories created" # Set proper permissions echo "๐Ÿ” Setting permissions..." chown -R www-data:www-data "$WEBROOT" chmod -R 755 "$WEBROOT" chmod 600 "$WEBROOT/.env" # Specific permissions for data directories chmod 755 "$DATA_DIR" chmod 755 "$UPLOADS_DIR" chmod 755 "$LOG_DIR" chmod 644 "$LOG_DIR"/*.log # Make server entry point executable if [ -f "$WEBROOT/server/entry.mjs" ]; then chmod 755 "$WEBROOT/server/entry.mjs" echo "โœ… Server entry point permissions set" fi echo "โœ… Permissions configured successfully" # Display deployment summary echo "" echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" echo "โœ… ForensicPathways Deployment Complete!" echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" echo "" echo "๐Ÿ“Š Deployment Summary:" echo " ๐ŸŽฏ Target: $WEBROOT" echo " ๐Ÿ’พ Backup: $BACKUP_DIR" echo " ๐Ÿ“ Logs: $LOG_DIR" echo " ๐Ÿ“ค Uploads: $UPLOADS_DIR" echo " ๐Ÿ—ƒ๏ธ Data: $DATA_DIR" echo "" echo "๐Ÿ“‹ Required Next Steps:" echo " 1. ๐Ÿ”ง Edit $WEBROOT/.env with your configuration" echo " - Set PUBLIC_BASE_URL to your domain" echo " - Configure AI_ANALYZER_* settings" echo " - Set AUTH_SECRET to a secure value" echo "" echo " 2. ๐Ÿ”„ Restart services:" echo " sudo systemctl restart forensic-pathways" echo " sudo systemctl reload nginx" echo "" echo " 3. ๐Ÿ” Check status:" echo " sudo systemctl status forensic-pathways" echo " sudo tail -f $LOG_DIR/error.log" echo "" echo "๐ŸŒ Once configured, access at: http://your-domain.com" echo "" # Final validation echo "๐Ÿ” Post-deployment validation..." if [ -f "$WEBROOT/.env" ]; then echo "โœ… Environment configuration exists" else echo "โŒ Environment configuration missing" fi if [ -f "$WEBROOT/src/data/tools.yaml" ]; then echo "โœ… Tools database exists" else echo "โŒ Tools database missing" fi if [ -d "$WEBROOT/server" ]; then echo "โœ… Server directory exists" else echo "โŒ Server directory missing" fi echo "" echo "๐ŸŽ‰ Deployment script completed at $(date '+%Y-%m-%d %H:%M:%S')"