#!/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 "$@"