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() {
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")
echo "✅ npm found: $NPM_VERSION"
echo "✅ Node.js found: $NODE_VERSION"
return 0
fi
# Check common nvm installation paths
NVM_PATHS=(
"$ORIGINAL_HOME/.nvm/versions/node/*/bin"
"$ORIGINAL_HOME/.volta/bin"
"/usr/local/bin"
"/usr/bin"
)
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)
# 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
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