almeira-web/package-hostinger.sh

82 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# Script para empaquetar la aplicación Next.js standalone para Hostinger Node.js App
set -e
echo "=== Iniciando empaquetado para Hostinger ==="
# 1. Asegurar que estamos en el directorio correcto
cd "$(dirname "$0")"
# 2. Compilar el proyecto
echo "Compilando la aplicación Next.js..."
NODE_OPTIONS="--max-old-space-size=4096" npm run build
# 3. Validar la existencia del build standalone
if [ ! -d ".next/standalone" ]; then
echo "Error: No se generó el directorio .next/standalone."
echo "Asegúrate de que 'output: \"standalone\"' está configurado en next.config.ts"
exit 1
fi
# 4. Crear carpeta temporal de empaquetado
DEPLOY_DIR="deploy-hostinger"
echo "Creando directorio temporal: $DEPLOY_DIR..."
rm -rf "$DEPLOY_DIR"
mkdir -p "$DEPLOY_DIR"
# 5. Copiar archivos standalone
echo "Copiando archivos del servidor standalone..."
cp -r .next/standalone/. "$DEPLOY_DIR/"
# 6. Copiar archivos estáticos y carpeta public (requerido por Next.js standalone)
echo "Copiando archivos estáticos (.next/static)..."
mkdir -p "$DEPLOY_DIR/.next/static"
cp -r .next/static/. "$DEPLOY_DIR/.next/static/"
if [ -d "public" ]; then
echo "Copiando carpeta public..."
cp -r public "$DEPLOY_DIR/"
else
echo "Advertencia: No se encontró la carpeta 'public'."
fi
# 7. Copiar archivo de entorno de ejemplo o variables
if [ -f ".env.local" ]; then
echo "Copiando variables locales a .env.production..."
cp .env.local "$DEPLOY_DIR/.env.production"
fi
# 7.5. Modificar package.json para evitar que Hostinger intente hacer build
echo "Configurando package.json para producción en Hostinger..."
node -e "
const fs = require('fs');
const path = require('path');
const pkgPath = path.join('$DEPLOY_DIR', 'package.json');
if (fs.existsSync(pkgPath)) {
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
pkg.scripts = {
...pkg.scripts,
build: 'echo \"Application is already built standalone. Skipping build.\"',
start: 'NODE_ENV=production node server.js'
};
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
}
"
# 8. Comprimir en un archivo zip
ZIP_FILE="almeira-web-deploy.zip"
echo "Comprimiendo aplicación en $ZIP_FILE..."
rm -f "$ZIP_FILE"
# Entrar al directorio temporal para que los archivos queden en la raíz del zip
cd "$DEPLOY_DIR"
zip -r "../$ZIP_FILE" . > /dev/null
cd ..
# 9. Limpiar directorio temporal
echo "Limpiando directorio temporal..."
rm -rf "$DEPLOY_DIR"
echo "=== ¡Listo! Se ha generado el archivo $ZIP_FILE con éxito. ==="
echo "Sube este archivo a tu hosting Node.js en Hostinger y descomprímelo en la raíz de tu aplicación."