diff --git a/deploy.sh b/deploy.sh index cbb8227..9579a9a 100755 --- a/deploy.sh +++ b/deploy.sh @@ -26,125 +26,50 @@ if [ "$EUID" -ne 0 ]; then exit 1 fi -# Function to run commands as original user -run_as_user() { - if [ "$ORIGINAL_USER" != "root" ]; then - sudo -u "$ORIGINAL_USER" -i bash -c "cd '$PWD' && $1" - else - bash -c "$1" - fi -} - -# Function to check for npm/node in user environment -check_node_env() { - echo "๐Ÿ” Checking Node.js environment..." - - # First, try to source nvm and check - if [ "$ORIGINAL_USER" != "root" ]; then - echo "๐Ÿ” Checking user environment for nvm..." - - # Try to source nvm and check npm/node - if sudo -u "$ORIGINAL_USER" -i bash -c " - # Source nvm if it exists - [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' - [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' - [ -s '$ORIGINAL_HOME/.profile' ] && source '$ORIGINAL_HOME/.profile' - - # Check if npm and node are available - command -v npm &> /dev/null && command -v node &> /dev/null - "; then - # Get versions using the same approach - NPM_VERSION=$(sudo -u "$ORIGINAL_USER" -i bash -c " - [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' - [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' - npm --version 2>/dev/null || echo 'unknown' - ") - NODE_VERSION=$(sudo -u "$ORIGINAL_USER" -i bash -c " - [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' - [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' - node --version 2>/dev/null || echo 'unknown' - ") - echo "โœ… npm found: $NPM_VERSION" - echo "โœ… Node.js found: $NODE_VERSION" - return 0 - fi - fi - - # Fallback: Check specific nvm paths directly - echo "๐Ÿ” Checking nvm installation paths..." - NVM_DIRS=$(find "$ORIGINAL_HOME/.nvm/versions/node" -name "bin" -type d 2>/dev/null | head -5) - - for nvm_bin in $NVM_DIRS; do - if [ -x "$nvm_bin/npm" ] && [ -x "$nvm_bin/node" ]; then - echo "โœ… Found Node.js in: $nvm_bin" - NPM_VERSION=$("$nvm_bin/npm" --version 2>/dev/null || echo "unknown") - NODE_VERSION=$("$nvm_bin/node" --version 2>/dev/null || echo "unknown") - echo "โœ… npm found: $NPM_VERSION" - echo "โœ… Node.js found: $NODE_VERSION" - - # Set PATH for the rest of the script - export PATH="$nvm_bin:$PATH" - return 0 - fi - done - - # Check system-wide installation - echo "๐Ÿ” Checking system-wide installation..." - if command -v npm &> /dev/null && command -v node &> /dev/null; then - NPM_VERSION=$(npm --version) - NODE_VERSION=$(node --version) - echo "โœ… npm found (system): $NPM_VERSION" - echo "โœ… Node.js found (system): $NODE_VERSION" - return 0 - fi - - echo "โŒ Error: npm/node not found in any location" - echo "" - echo "๐Ÿ” Checked locations:" - echo " - User environment with nvm sourcing" - echo " - $ORIGINAL_HOME/.nvm/versions/node/*/bin" - echo " - System PATH: /usr/local/bin, /usr/bin" - echo "" - echo "๐Ÿ’ก Solutions:" - echo " 1. Build first: npm run build (as $ORIGINAL_USER)" - echo " 2. Then run: sudo ./deploy.sh" - echo " 3. Or install Node.js system-wide: curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs" - echo "" - return 1 -} - -# Enhanced build function -build_application() { +# Function to build application with nvm support +build_with_nvm() { echo "๐Ÿ“ฆ Building application as user $ORIGINAL_USER..." - # Use nvm-aware build command - if sudo -u "$ORIGINAL_USER" -i bash -c " + if sudo -u "$ORIGINAL_USER" bash -c " cd '$PWD' - # Source nvm if available - [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' - [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' + # Load nvm if available + export NVM_DIR='$ORIGINAL_HOME/.nvm' + [ -s '\$NVM_DIR/nvm.sh' ] && source '\$NVM_DIR/nvm.sh' - # Run build + # Load user shell profile + [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' + [ -s '$ORIGINAL_HOME/.profile' ] && source '$ORIGINAL_HOME/.profile' + + # Verify npm is available + if ! command -v npm &> /dev/null; then + echo 'npm not found in user environment' + exit 1 + fi + + # Show versions for debugging + echo \"npm version: \$(npm --version)\" + echo \"node version: \$(node --version)\" + + # Run the build npm run build "; then echo "โœ… Build completed successfully" return 0 else - echo "โŒ Error: Build failed" - echo "๐Ÿ’ก Try running manually: npm run build" + echo "โŒ Build failed" return 1 fi } -# Check Node.js environment -if ! check_node_env; then - exit 1 -fi - -# Check if dist directory exists or can be built +# Check for existing dist or build if needed if [ ! -d "dist" ]; then - if ! build_application; then + echo "๐Ÿ“ฆ No dist/ directory found, building..." + if ! build_with_nvm; then + echo "" + echo "๐Ÿ’ก Alternative: Build manually first:" + echo " npm run build" + echo " sudo ./deploy.sh" exit 1 fi else @@ -152,228 +77,19 @@ else read -p "๐Ÿค” Rebuild application? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then - if ! build_application; then - exit 1 + if ! build_with_nvm; then + echo "" + echo "๐Ÿ’ก Using existing dist/ due to build failure" fi 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')"#!/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 +# Verify dist exists before proceeding 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 + echo "โŒ Error: No dist/ directory available for deployment" + exit 1 fi # Create backup if existing deployment exists @@ -393,9 +109,11 @@ if [ -d "$WEBROOT" ]; then 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)" + if [ -d "$BACKUP_DIR" ]; then + cd "$BACKUP_DIR" + ls -1t | tail -n +6 | xargs -r rm -rf + echo "๐Ÿงน Cleaned old backups (keeping last 5)" + fi fi # Create webroot and subdirectories @@ -407,23 +125,22 @@ mkdir -p "$UPLOADS_DIR" mkdir -p "$WEBROOT/src/data" mkdir -p "$WEBROOT/public" mkdir -p "$WEBROOT/server" +mkdir -p "$DATA_DIR/embeddings" +mkdir -p "$LOG_DIR/access" +mkdir -p "$LOG_DIR/error" +mkdir -p "$LOG_DIR/ai" 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 +cp -r dist/* "$WEBROOT/" +echo "โœ… Application files copied ($(du -sh dist | cut -f1))" # 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" + echo "โœ… tools.yaml copied ($(wc -l < src/data/tools.yaml) lines)" else echo "โŒ Error: src/data/tools.yaml not found" exit 1 @@ -433,7 +150,8 @@ fi if [ -d "src/content/knowledgebase" ]; then mkdir -p "$WEBROOT/src/content" cp -r src/content/knowledgebase "$WEBROOT/src/content/" - echo "โœ… Knowledgebase content copied" + KB_COUNT=$(find src/content/knowledgebase -name "*.md" | wc -l) + echo "โœ… Knowledgebase content copied ($KB_COUNT articles)" fi # Handle environment configuration @@ -448,17 +166,9 @@ else echo "โš ๏ธ IMPORTANT: Edit $WEBROOT/.env with your configuration" fi -# Create additional required files and directories +# Create additional required files 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" @@ -498,6 +208,7 @@ echo " ๐Ÿ’พ Backup: $BACKUP_DIR" echo " ๐Ÿ“ Logs: $LOG_DIR" echo " ๐Ÿ“ค Uploads: $UPLOADS_DIR" echo " ๐Ÿ—ƒ๏ธ Data: $DATA_DIR" +echo " ๐Ÿ“ Size: $(du -sh $WEBROOT | cut -f1)" echo "" echo "๐Ÿ“‹ Required Next Steps:" echo " 1. ๐Ÿ”ง Edit $WEBROOT/.env with your configuration" @@ -525,7 +236,8 @@ else fi if [ -f "$WEBROOT/src/data/tools.yaml" ]; then - echo "โœ… Tools database exists" + TOOL_COUNT=$(grep -c "^ - name:" "$WEBROOT/src/data/tools.yaml" || echo "unknown") + echo "โœ… Tools database exists ($TOOL_COUNT tools)" else echo "โŒ Tools database missing" fi @@ -536,5 +248,11 @@ else echo "โŒ Server directory missing" fi +if [ -f "$WEBROOT/server/entry.mjs" ]; then + echo "โœ… Server entry point exists" +else + echo "โš ๏ธ Warning: Server entry point not found" +fi + echo "" echo "๐ŸŽ‰ Deployment script completed at $(date '+%Y-%m-%d %H:%M:%S')" \ No newline at end of file