This commit is contained in:
overcuriousity 2025-08-07 09:50:26 +02:00
parent ec0ee12ae5
commit 9d6ba83378

124
deploy.sh
View File

@ -39,45 +39,104 @@ run_as_user() {
check_node_env() { check_node_env() {
echo "🔍 Checking Node.js environment..." echo "🔍 Checking Node.js environment..."
# Check if npm/node are available in original user's environment # First, try to source nvm and check
if run_as_user "command -v npm" &> /dev/null && run_as_user "command -v node" &> /dev/null; then if [ "$ORIGINAL_USER" != "root" ]; then
NPM_VERSION=$(run_as_user "npm --version") echo "🔍 Checking user environment for nvm..."
NODE_VERSION=$(run_as_user "node --version")
echo "✅ npm found: $NPM_VERSION" # Try to source nvm and check npm/node
echo "✅ Node.js found: $NODE_VERSION" if sudo -u "$ORIGINAL_USER" -i bash -c "
return 0 # Source nvm if it exists
fi [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh'
[ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc'
# Check common nvm installation paths [ -s '$ORIGINAL_HOME/.profile' ] && source '$ORIGINAL_HOME/.profile'
NVM_PATHS=(
"$ORIGINAL_HOME/.nvm/versions/node/*/bin" # Check if npm and node are available
"$ORIGINAL_HOME/.volta/bin" command -v npm &> /dev/null && command -v node &> /dev/null
"/usr/local/bin" "; then
"/usr/bin" # 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'
for nvm_path in "${NVM_PATHS[@]}"; do [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc'
if [ -d "$nvm_path" ] && [ -x "$nvm_path/npm" ] && [ -x "$nvm_path/node" ]; then npm --version 2>/dev/null || echo 'unknown'
echo "✅ Found Node.js in: $nvm_path" ")
export PATH="$nvm_path:$PATH" NODE_VERSION=$(sudo -u "$ORIGINAL_USER" -i bash -c "
NPM_VERSION=$("$nvm_path/npm" --version) [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh'
NODE_VERSION=$("$nvm_path/node" --version) [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc'
node --version 2>/dev/null || echo 'unknown'
")
echo "✅ npm found: $NPM_VERSION" echo "✅ npm found: $NPM_VERSION"
echo "✅ Node.js found: $NODE_VERSION" echo "✅ Node.js found: $NODE_VERSION"
return 0 return 0
fi 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 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 ""
echo "💡 Solutions:" echo "💡 Solutions:"
echo " 1. Run 'npm run build' as user first, then run this script" echo " 1. Build first: npm run build (as $ORIGINAL_USER)"
echo " 2. Install Node.js system-wide" echo " 2. Then run: sudo ./deploy.sh"
echo " 3. Or run: cd '$PWD' && npm run build && 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 "" echo ""
return 1 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 # Check Node.js environment
if ! check_node_env; then if ! check_node_env; then
exit 1 exit 1
@ -85,24 +144,17 @@ fi
# Check if dist directory exists or can be built # Check if dist directory exists or can be built
if [ ! -d "dist" ]; then if [ ! -d "dist" ]; then
echo "📦 Building application as user $ORIGINAL_USER..." if ! build_application; then
if ! run_as_user "npm run build"; then
echo "❌ Error: Build failed"
echo "💡 Try running: npm run build (as user) before deployment"
exit 1 exit 1
fi fi
echo "✅ Build completed successfully"
else else
echo "📦 Found existing dist/ directory" echo "📦 Found existing dist/ directory"
read -p "🤔 Rebuild application? (y/N): " -n 1 -r read -p "🤔 Rebuild application? (y/N): " -n 1 -r
echo echo
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "📦 Rebuilding application as user $ORIGINAL_USER..." if ! build_application; then
if ! run_as_user "npm run build"; then
echo "❌ Error: Rebuild failed"
exit 1 exit 1
fi fi
echo "✅ Rebuild completed successfully"
else else
echo "📦 Using existing build" echo "📦 Using existing build"
fi fi