Files
nomina_ventas/docker/entrypoint.sh
nickpons666 57100d3a08 fix(docker): mejorar generacion de .env y APP_KEY en entrypoint
- Se corrigen permisos del .env para el usuario laravel (664).
- Se mejora la robustez de key:generate usando su -s /bin/bash -c como usuario laravel.
- Se asegura que APP_KEY se capture y guarde correctamente usando @ como delimitador en sed.
- Limpieza general del entrypoint y mejora de logs.
2026-04-23 00:36:32 -06:00

129 lines
4.2 KiB
Bash

#!/bin/bash
set -e
echo "========================================"
echo " Nomina Ventas - Entrypoint"
echo "========================================"
if [ ! -f /var/www/html/artisan ]; then
echo "ERROR: No se encontró el código en /var/www/html"
exit 1
fi
echo "========================================"
echo " Preparando directorios..."
echo "========================================"
mkdir -p /var/www/html/storage/framework/{cache,sessions,views}
mkdir -p /var/www/html/storage/logs
mkdir -p /var/www/html/bootstrap/cache
chown -R laravel:laravel /var/www/html/storage
chown -R laravel:laravel /var/www/html/bootstrap/cache
chmod -R 775 /var/www/html/storage
chmod -R 775 /var/www/html/bootstrap/cache
# NO cambiar permisos de /var/www/html completo - rompe vendor/
echo "========================================"
echo " Generando archivo .env desde variables de Docker..."
echo "========================================"
TEMP_ENV="/tmp/.env.docker"
ENV_FILE="/var/www/html/.env"
# Eliminar .env existente si existe
rm -f "$ENV_FILE" 2>/dev/null || true
# Construir el archivo .env (Incluimos APP_KEY si ya viene en el entorno)
cat > "$TEMP_ENV" << ENVEOF
APP_NAME="${APP_NAME:-Nomina Ventas}"
APP_ENV="${APP_ENV:-production}"
APP_KEY="${APP_KEY}"
APP_DEBUG="${APP_DEBUG:-false}"
APP_URL="${APP_URL:-http://localhost}"
APP_LOCALE="${APP_LOCALE:-es}"
APP_FALLBACK_LOCALE="${APP_FALLBACK_LOCALE:-es}"
APP_FAKER_LOCALE="${APP_FAKER_LOCALE:-es_MX}"
APP_MAINTENANCE_DRIVER="${APP_MAINTENANCE_DRIVER:-file}"
BCRYPT_ROUNDS="${BCRYPT_ROUNDS:-12}"
LOG_CHANNEL="${LOG_CHANNEL:-stack}"
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL="${LOG_LEVEL:-debug}"
DB_CONNECTION="${DB_CONNECTION:-mysql}"
DB_HOST="${DB_HOST:-127.0.0.1}"
DB_PORT="${DB_PORT:-3306}"
DB_DATABASE="${DB_DATABASE:-laravel}"
DB_USERNAME="${DB_USERNAME:-root}"
DB_PASSWORD="${DB_PASSWORD}"
SESSION_DRIVER="${SESSION_DRIVER:-database}"
SESSION_LIFETIME="${SESSION_LIFETIME:-120}"
SESSION_ENCRYPT="${SESSION_ENCRYPT:-true}"
SESSION_PATH="${SESSION_PATH:-/}"
SESSION_DOMAIN="${SESSION_DOMAIN}"
BROADCAST_CONNECTION="${BROADCAST_CONNECTION:-log}"
FILESYSTEM_DISK="${FILESYSTEM_DISK:-local}"
QUEUE_CONNECTION="${QUEUE_CONNECTION:-database}"
CACHE_STORE="${CACHE_STORE:-database}"
VITE_APP_NAME="\${APP_NAME}"
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN}"
TELEGRAM_WEBHOOK_URL="${TELEGRAM_WEBHOOK_URL}"
RUN_MIGRATIONS="${RUN_MIGRATIONS:-false}"
ENVEOF
# Copiar al destino y asegurar que el usuario laravel pueda leerlo
cp "$TEMP_ENV" "$ENV_FILE"
chown laravel:laravel "$ENV_FILE"
chmod 664 "$ENV_FILE"
echo ">>> .env generado"
echo "========================================"
echo " Verificando APP_KEY..."
echo "========================================"
APP_KEY_VALUE=$(grep "^APP_KEY=" "$ENV_FILE" | cut -d'=' -f2- | tr -d '"')
if [ -z "$APP_KEY_VALUE" ]; then
echo ">>> Generando APP_KEY..."
# Ejecutar como usuario laravel para evitar problemas de permisos
NEW_KEY=$(su -s /bin/bash -c "php /var/www/html/artisan key:generate --show --no-ansi" laravel)
if [ -n "$NEW_KEY" ]; then
# Usar @ como delimitador en sed por si la llave contiene slashes
sed -i "s@^APP_KEY=.*@APP_KEY=$NEW_KEY@" "$ENV_FILE"
echo ">>> APP_KEY generado y guardado."
else
echo ">>> ERROR: No se pudo generar APP_KEY"
fi
else
echo ">>> APP_KEY detectada en el entorno/archivo."
fi
echo ""
echo ">>> Contenido del .env (primeras líneas):"
head -8 "$ENV_FILE"
echo ""
echo "========================================"
echo " Limpiando cache..."
echo "========================================"
php /var/www/html/artisan view:clear 2>/dev/null || true
php /var/www/html/artisan config:clear 2>/dev/null || true
php /var/www/html/artisan cache:clear 2>/dev/null || true
php /var/www/html/artisan route:clear 2>/dev/null || true
php /var/www/html/artisan clear:compiled 2>/dev/null || true
echo "========================================"
echo " Estado de la aplicación"
echo "========================================"
php /var/www/html/artisan about 2>&1 | head -15 || true
echo ""
echo "========================================"
echo " Iniciando servicios..."
echo "========================================"
php-fpm-wrapper &
nginx -g "daemon off;"