82 lines
2.5 KiB
Bash
Executable File
82 lines
2.5 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..."
|
|
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 como plantilla .env.production.example..."
|
|
cp .env.local "$DEPLOY_DIR/.env.production.example"
|
|
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."
|