#!/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.1 Copiar ecosystem.config.js if [ -f "ecosystem.config.js" ]; then echo "Copiando ecosystem.config.js..." cp ecosystem.config.js "$DEPLOY_DIR/" 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."