repuve-backend-v1/entrypoint-prod.sh

107 lines
3.2 KiB
Bash

#!/bin/bash
set -e
echo "=== Iniciando entrypoint PRODUCCIÓN ==="
chown -R www-data:www-data /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache
chmod -R 775 /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache
# Variables desde Docker environment
DB_HOST=${DB_HOST:-mysql}
DB_USERNAME=${DB_USERNAME:-root}
DB_PASSWORD=${DB_PASSWORD:-}
DB_DATABASE=${DB_DATABASE:-laravel}
MAX_RETRIES=30
RETRY_COUNT=0
echo "Configuración de BD: Host=${DB_HOST}, Usuario=${DB_USERNAME}, Base=${DB_DATABASE}"
# Función para verificar conectividad con MySQL usando PHP
check_mysql() {
php -r "
try {
\$pdo = new PDO('mysql:host=${DB_HOST};port=3306', '${DB_USERNAME}', '${DB_PASSWORD}');
\$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
exit(0);
} catch (Exception \$e) {
exit(1);
}
"
}
# Esperar a que MySQL esté disponible
echo "Esperando conexión a MySQL..."
until check_mysql; do
RETRY_COUNT=$((RETRY_COUNT + 1))
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
echo "ERROR: No se pudo conectar a MySQL después de $MAX_RETRIES intentos"
exit 1
fi
echo "Intento $RETRY_COUNT/$MAX_RETRIES - Esperando a MySQL..."
sleep 2
done
echo "✓ MySQL está disponible"
echo "Ejecutando comandos de inicialización de PRODUCCIÓN..."
# Instalar dependencias sin paquetes de desarrollo
echo "Instalando dependencias de producción..."
composer install --no-dev --optimize-autoloader --no-interaction
echo "Ejecutando package:discover..."
php artisan package:discover --ansi
echo "Creando enlaces simbólicos..."
php artisan storage:link --force || true
echo "Ejecutando configuración de producción..."
composer run env:prod
# Cachear configuración, rutas y vistas para máximo rendimiento
echo "Generando caché de configuración..."
php artisan config:cache
echo "Generando caché de rutas..."
php artisan route:cache
echo "Generando caché de vistas..."
php artisan view:cache
echo "Generando caché de eventos..."
php artisan event:cache
echo "Creando directorio de claves Passport..."
mkdir -p storage/app/keys
if [ ! -f "storage/app/keys/oauth-private.key" ] || [ ! -f "storage/app/keys/oauth-public.key" ]; then
echo "Claves de Passport no encontradas, generando..."
php artisan passport:keys || {
echo "Artisan falló, generando con OpenSSL..."
openssl genrsa -out storage/app/keys/oauth-private.key 4096
openssl rsa -in storage/app/keys/oauth-private.key -pubout -out storage/app/keys/oauth-public.key
}
echo "✓ Claves de Passport generadas"
else
echo "✓ Claves de Passport ya existen, omitiendo generación"
fi
# Establecer permisos correctos para las claves
chmod 600 storage/app/keys/oauth-private.key
chmod 644 storage/app/keys/oauth-public.key
chown www-data:www-data storage/app/keys/oauth-*.key
echo "✓ Claves de Passport verificadas"
echo "=== VERIFICANDO BASE DE DATOS PRODUCCIÓN ==="
echo "Ejecutando migraciones pendientes..."
php artisan migrate --force
echo "✓ Configuración de producción completada"
echo "=== Iniciando PHP-FPM PRODUCCIÓN ==="
# Iniciar PHP-FPM
exec "$@"