script
This commit is contained in:
parent
ec0ee12ae5
commit
9d6ba83378
124
deploy.sh
124
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")
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user