script
This commit is contained in:
		
							parent
							
								
									ec0ee12ae5
								
							
						
					
					
						commit
						9d6ba83378
					
				
							
								
								
									
										112
									
								
								deploy.sh
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								deploy.sh
									
									
									
									
									
								
							@ -39,45 +39,104 @@ run_as_user() {
 | 
			
		||||
check_node_env() {
 | 
			
		||||
    echo "🔍 Checking Node.js environment..."
 | 
			
		||||
    
 | 
			
		||||
    # Check if npm/node are available in original user's environment
 | 
			
		||||
    if run_as_user "command -v npm" &> /dev/null && run_as_user "command -v node" &> /dev/null; then
 | 
			
		||||
        NPM_VERSION=$(run_as_user "npm --version")
 | 
			
		||||
        NODE_VERSION=$(run_as_user "node --version")
 | 
			
		||||
    # 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
 | 
			
		||||
    
 | 
			
		||||
    # Check common nvm installation paths
 | 
			
		||||
    NVM_PATHS=(
 | 
			
		||||
        "$ORIGINAL_HOME/.nvm/versions/node/*/bin"
 | 
			
		||||
        "$ORIGINAL_HOME/.volta/bin"
 | 
			
		||||
        "/usr/local/bin"
 | 
			
		||||
        "/usr/bin"
 | 
			
		||||
    )
 | 
			
		||||
    # 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_path in "${NVM_PATHS[@]}"; do
 | 
			
		||||
        if [ -d "$nvm_path" ] && [ -x "$nvm_path/npm" ] && [ -x "$nvm_path/node" ]; then
 | 
			
		||||
            echo "✅ Found Node.js in: $nvm_path"
 | 
			
		||||
            export PATH="$nvm_path:$PATH"
 | 
			
		||||
            NPM_VERSION=$("$nvm_path/npm" --version)
 | 
			
		||||
            NODE_VERSION=$("$nvm_path/node" --version)
 | 
			
		||||
    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
 | 
			
		||||
    
 | 
			
		||||
    echo "❌ Error: npm/node not found in user environment"
 | 
			
		||||
    # 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. Run 'npm run build' as user first, then run this script"
 | 
			
		||||
    echo "   2. Install Node.js system-wide"
 | 
			
		||||
    echo "   3. Or run: cd '$PWD' && npm run build && sudo ./deploy.sh"
 | 
			
		||||
    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() {
 | 
			
		||||
    echo "📦 Building application as user $ORIGINAL_USER..."
 | 
			
		||||
    
 | 
			
		||||
    # Use nvm-aware build command
 | 
			
		||||
    if sudo -u "$ORIGINAL_USER" -i 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'
 | 
			
		||||
        
 | 
			
		||||
        # Run build
 | 
			
		||||
        npm run build
 | 
			
		||||
    "; then
 | 
			
		||||
        echo "✅ Build completed successfully"
 | 
			
		||||
        return 0
 | 
			
		||||
    else
 | 
			
		||||
        echo "❌ Error: Build failed"
 | 
			
		||||
        echo "💡 Try running manually: npm run build"
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check Node.js environment
 | 
			
		||||
if ! check_node_env; then
 | 
			
		||||
    exit 1
 | 
			
		||||
@ -85,24 +144,17 @@ fi
 | 
			
		||||
 | 
			
		||||
# Check if dist directory exists or can be built
 | 
			
		||||
if [ ! -d "dist" ]; then
 | 
			
		||||
    echo "📦 Building application as user $ORIGINAL_USER..."
 | 
			
		||||
    if ! run_as_user "npm run build"; then
 | 
			
		||||
        echo "❌ Error: Build failed"
 | 
			
		||||
        echo "💡 Try running: npm run build (as user) before deployment"
 | 
			
		||||
    if ! build_application; then
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    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 as user $ORIGINAL_USER..."
 | 
			
		||||
        if ! run_as_user "npm run build"; then
 | 
			
		||||
            echo "❌ Error: Rebuild failed"
 | 
			
		||||
        if ! build_application; then
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        echo "✅ Rebuild completed successfully"
 | 
			
		||||
    else
 | 
			
		||||
        echo "📦 Using existing build"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user