diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 8da075f..e85f915 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -6,81 +6,204 @@ echo "========================================" echo " Nomina Ventas - Entrypoint" echo "========================================" -# Verificar que el código existe en /var/www/html if [ ! -f /var/www/html/artisan ]; then echo "ERROR: No se encontró el código en /var/www/html" echo "Montando volumen con el código..." exit 1 fi -# Asegurar que existan los directorios necesarios (importante para volúmenes montados) mkdir -p /var/www/html/storage/framework/{cache,sessions,views} mkdir -p /var/www/html/storage/logs mkdir -p /var/www/html/bootstrap/cache -# Asegurar permisos 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 -# ===== GENERAR O ACTUALIZAR .env ===== -echo "Intentando sincronizar .env desde variables de Docker..." +echo "========================================" +echo " Sincronizando variables de entorno..." +echo "========================================" -# Generamos el contenido en un archivo temporal -cat > /tmp/.env.tmp << EOF -APP_NAME="${APP_NAME:-Laravel}" +echo "APP_NAME=${APP_NAME:-}" +echo "APP_ENV=${APP_ENV:-}" +echo "APP_DEBUG=${APP_DEBUG:-}" +echo "APP_URL=${APP_URL:-}" +echo "DB_HOST=${DB_HOST:-}" +echo "DB_PORT=${DB_PORT:-}" +echo "DB_DATABASE=${DB_DATABASE:-}" +echo "DB_USERNAME=${DB_USERNAME:-}" +echo "DB_PASSWORD=${DB_PASSWORD:-}" +echo "APP_KEY=${APP_KEY:-}" + +# Determinar archivo .env a usar +ENV_FILE="/var/www/html/.env" +TEMP_ENV="/tmp/.env.build" + +# Verificar si ya existe un .env con valores válidos +if [ -f "$ENV_FILE" ]; then + echo ">>> Detectado archivo .env existente" + + # Si hay variables de Docker con valores, actualizar el .env existente + if [ -n "$APP_NAME" ]; then + echo ">>> Actualizando APP_NAME..." + sed -i "s|^APP_NAME=.*|APP_NAME=\"$APP_NAME\"|" "$ENV_FILE" + fi + + if [ -n "$APP_ENV" ]; then + sed -i "s|^APP_ENV=.*|APP_ENV=$APP_ENV|" "$ENV_FILE" + fi + + if [ -n "$APP_DEBUG" ]; then + sed -i "s|^APP_DEBUG=.*|APP_DEBUG=$APP_DEBUG|" "$ENV_FILE" + fi + + if [ -n "$APP_URL" ]; then + sed -i "s|^APP_URL=.*|APP_URL=$APP_URL|" "$ENV_FILE" + fi + + if [ -n "$APP_KEY" ]; then + sed -i "s|^APP_KEY=.*|APP_KEY=$APP_KEY|" "$ENV_FILE" + fi + + if [ -n "$DB_HOST" ]; then + sed -i "s|^DB_HOST=.*|DB_HOST=$DB_HOST|" "$ENV_FILE" + fi + + if [ -n "$DB_PORT" ]; then + sed -i "s|^DB_PORT=.*|DB_PORT=$DB_PORT|" "$ENV_FILE" + fi + + if [ -n "$DB_DATABASE" ]; then + sed -i "s|^DB_DATABASE=.*|DB_DATABASE=$DB_DATABASE|" "$ENV_FILE" + fi + + if [ -n "$DB_USERNAME" ]; then + sed -i "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USERNAME|" "$ENV_FILE" + fi + + if [ -n "$DB_PASSWORD" ]; then + sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD='$DB_PASSWORD'|" "$ENV_FILE" + fi + + if [ -n "$APP_LOCALE" ]; then + sed -i "s|^APP_LOCALE=.*|APP_LOCALE=$APP_LOCALE|" "$ENV_FILE" + fi + + if [ -n "$APP_FALLBACK_LOCALE" ]; then + sed -i "s|^APP_FALLBACK_LOCALE=.*|APP_FALLBACK_LOCALE=$APP_FALLBACK_LOCALE|" "$ENV_FILE" + fi + + if [ -n "$SESSION_DRIVER" ]; then + sed -i "s|^SESSION_DRIVER=.*|SESSION_DRIVER=$SESSION_DRIVER|" "$ENV_FILE" + fi + + if [ -n "$SESSION_LIFETIME" ]; then + sed -i "s|^SESSION_LIFETIME=.*|SESSION_LIFETIME=$SESSION_LIFETIME|" "$ENV_FILE" + fi + + if [ -n "$SESSION_ENCRYPT" ]; then + sed -i "s|^SESSION_ENCRYPT=.*|SESSION_ENCRYPT=$SESSION_ENCRYPT|" "$ENV_FILE" + fi + + if [ -n "$BCRYPT_ROUNDS" ]; then + sed -i "s|^BCRYPT_ROUNDS=.*|BCRYPT_ROUNDS=$BCRYPT_ROUNDS|" "$ENV_FILE" + fi + + if [ -n "$LOG_CHANNEL" ]; then + sed -i "s|^LOG_CHANNEL=.*|LOG_CHANNEL=$LOG_CHANNEL|" "$ENV_FILE" + fi + + if [ -n "$LOG_LEVEL" ]; then + sed -i "s|^LOG_LEVEL=.*|LOG_LEVEL=$LOG_LEVEL|" "$ENV_FILE" + fi + + if [ -n "$TELEGRAM_BOT_TOKEN" ]; then + sed -i "s|^TELEGRAM_BOT_TOKEN=.*|TELEGRAM_BOT_TOKEN=$TELEGRAM_BOT_TOKEN|" "$ENV_FILE" + fi + + if [ -n "$TELEGRAM_WEBHOOK_URL" ]; then + sed -i "s|^TELEGRAM_WEBHOOK_URL=.*|TELEGRAM_WEBHOOK_URL=$TELEGRAM_WEBHOOK_URL|" "$ENV_FILE" + fi + + # Verificar si APP_KEY necesita generarse + CURRENT_KEY=$(grep "^APP_KEY=" "$ENV_FILE" | cut -d'=' -f2-) + if [ -z "$CURRENT_KEY" ] || [ "$CURRENT_KEY" == "base64:" ]; then + echo ">>> Generando APP_KEY..." + NEW_KEY=$(php /var/www/html/artisan key:generate --show --no-ansi 2>/dev/null || true) + if [ -n "$NEW_KEY" ]; then + sed -i "s|^APP_KEY=.*|APP_KEY=$NEW_KEY|" "$ENV_FILE" + export APP_KEY=$NEW_KEY + fi + fi + + chown laravel:laravel "$ENV_FILE" + chmod 640 "$ENV_FILE" + + echo ">>> Archivo .env actualizado con variables de Docker" +else + echo ">>> No existe .env, generando uno nuevo..." + + # Generar APP_KEY si no existe + if [ -z "$APP_KEY" ]; then + echo ">>> Generando APP_KEY..." + NEW_KEY=$(php /var/www/html/artisan key:generate --show --no-ansi 2>/dev/null || true) + APP_KEY=$NEW_KEY + fi + + 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} -LOG_CHANNEL=${LOG_CHANNEL:-stack} -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} +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:-file} -SESSION_LIFETIME=${SESSION_LIFETIME:-120} -SESSION_ENCRYPT=${SESSION_ENCRYPT:-false} -SESSION_PATH=${SESSION_PATH:-/} -SESSION_DOMAIN=${SESSION_DOMAIN:-null} -BROADCAST_CONNECTION=${BROADCAST_CONNECTION:-log} -FILESYSTEM_DISK=${FILESYSTEM_DISK:-local} -QUEUE_CONNECTION=${QUEUE_CONNECTION:-sync} -CACHE_STORE=${CACHE_STORE:-database} -TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} -TELEGRAM_WEBHOOK_URL=${TELEGRAM_WEBHOOK_URL} -BCRYPT_ROUNDS=${BCRYPT_ROUNDS:-12} -EOF +SESSION_DRIVER="${SESSION_DRIVER:-database}" +SESSION_LIFETIME="${SESSION_LIFETIME:-120}" +SESSION_ENCRYPT="${SESSION_ENCRYPT:-true}" +SESSION_PATH="/" +SESSION_DOMAIN=null +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}" +ENVEOF -# Intentar mover el temporal al destino final -if cp /tmp/.env.tmp /var/www/html/.env 2>/dev/null; then - # Si pudimos copiarlo, aplicamos permisos - chown laravel:laravel /var/www/html/.env - chmod 640 /var/www/html/.env - - # Generar APP_KEY si falta (solo si es escribible) - if [ -z "$APP_KEY" ] || [ "$APP_KEY" == "" ]; then - echo "APP_KEY no detectada, generando una nueva..." - NEW_KEY=$(php /var/www/html/artisan key:generate --show --no-ansi) - sed -i "s|APP_KEY=|APP_KEY=$NEW_KEY|g" /var/www/html/.env - export APP_KEY=$NEW_KEY + if [ -f "$TEMP_ENV" ]; then + mv "$TEMP_ENV" "$ENV_FILE" + chown laravel:laravel "$ENV_FILE" + chmod 640 "$ENV_FILE" + echo ">>> Archivo .env creado" fi - echo "✅ Archivo .env sincronizado correctamente." -else - echo "⚠️ ADVERTENCIA: No se pudo escribir en /var/www/html/.env" - echo "ℹ️ Probablemente esté montado como volumen de solo lectura (:ro)." - echo "ℹ️ Se usarán los valores del archivo montado externamente." fi -rm -f /tmp/.env.tmp -# ===== LIMPIAR CACHE ===== -echo ">> Limpiando cache..." +# Verificar contenido del .env +echo "" +echo ">>> Contenido actual de .env:" +grep -E "^(APP_NAME|APP_ENV|APP_DEBUG|APP_URL|DB_HOST|DB_PORT|DB_DATABASE|APP_KEY)=" "$ENV_FILE" 2>/dev/null || echo "No se pudo leer el .env" +echo "" + +# Limpiar cache +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 @@ -89,9 +212,12 @@ php /var/www/html/artisan route:clear 2>/dev/null || true echo ">> Cacheando configuración..." php /var/www/html/artisan config:cache 2>&1 || true -# ===== VERIFICAR ===== -php /var/www/html/artisan about 2>&1 | head -10 || 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 "========================================"