From dff78cbe0a260ee647aea6d5a2f07e8744d5a4c7 Mon Sep 17 00:00:00 2001 From: overcuriousity Date: Thu, 7 Aug 2025 09:42:42 +0200 Subject: [PATCH] script --- deploy.sh | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) mode change 100644 => 100755 deploy.sh diff --git a/deploy.sh b/deploy.sh old mode 100644 new mode 100755 index e69de29..34378ff --- a/deploy.sh +++ b/deploy.sh @@ -0,0 +1,217 @@ +#!/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')" \ No newline at end of file