> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuración

> Explicamos los archivos de configuración de Laravel, las variables de entorno (.env), cómo acceder a los valores, la caché, el modo debug y el modo mantenimiento.

## Introducción

Todos los archivos de configuración del framework Laravel se encuentran en el directorio `config/`. Cada opción incluye un comentario, así que abre los archivos para ver las opciones disponibles.

En los archivos de configuración se gestionan valores clave como la conexión a base de datos, el servidor de correo, la URL de la aplicación o la clave de cifrado.

```mermaid theme={null}
flowchart LR
    A["Archivo .env"] -->|env()| B["Archivos en config/"]
    B -->|config()| C["Aplicación"]
```

### Comando `about`

Con el comando Artisan `about` puedes ver un resumen de la configuración, drivers y entorno de la aplicación.

```shell theme={null}
php artisan about
```

Para consultar solo una sección concreta, usa la opción `--only`.

```shell theme={null}
php artisan about --only=environment
```

Para revisar en detalle los valores de un archivo de configuración concreto, el comando `config:show` resulta muy útil.

```shell theme={null}
php artisan config:show database
```

## Configuración por entorno (.env)

A menudo querrás cambiar valores de configuración según el entorno de ejecución. Por ejemplo, usar drivers de caché distintos en local y en producción.

Para facilitarlo, Laravel usa la librería PHP [DotEnv](https://github.com/vlucas/phpdotenv). En una instalación nueva, la raíz del proyecto incluye un archivo `.env.example` con las variables de entorno habituales, que se copia automáticamente a `.env` durante la instalación.

<Info>
  Si trabajas en equipo, es útil mantener actualizado `.env.example` e incluirlo en el repositorio. Poner valores placeholder deja claro qué variables necesita cada desarrollador.
</Info>

### Seguridad del archivo de entorno

<Warning>
  No confirmes `.env` en el control de versiones. Cada desarrollador o servidor necesita configuraciones distintas, e incluirlo en el repositorio implicaría fugas de información sensible ante incidentes.
</Warning>

Aun así, Laravel incorpora una funcionalidad para cifrar archivos de entorno, permitiendo guardarlos de forma segura en el control de versiones cuando están cifrados.

### Archivos de entorno adicionales

Al arrancar la aplicación, Laravel comprueba si están definidas la variable `APP_ENV` o la opción `--env` de la CLI. Si es así, carga el archivo `.env.[APP_ENV]` si existe. En caso contrario, se usa el `.env` por defecto.

### Tipos de las variables de entorno

Todas las variables de `.env` se interpretan como cadenas, pero para que `env()` pueda devolver un rango más amplio de tipos existen estos valores especiales:

| Valor en `.env` | Retorno de `env()` |
| --------------- | ------------------ |
| `true`          | `(bool) true`      |
| `(true)`        | `(bool) true`      |
| `false`         | `(bool) false`     |
| `(false)`       | `(bool) false`     |
| `empty`         | `(string) ''`      |
| `(empty)`       | `(string) ''`      |
| `null`          | `(null) null`      |
| `(null)`        | `(null) null`      |

Para definir un valor con espacios, encierralo entre comillas dobles.

```ini theme={null}
APP_NAME="My Application"
```

### Obtener variables de entorno

Todas las variables de `.env` se cargan en la superglobal `$_ENV` de PHP al recibir la solicitud. Dentro de los archivos de configuración obtén los valores con la función `env()`.

```php theme={null}
'debug' => (bool) env('APP_DEBUG', false),
```

El segundo argumento es el valor por defecto, que se devuelve si la variable de entorno no existe.

### Consultar el entorno actual

El entorno actual se determina con la variable `APP_ENV` de `.env`. Se obtiene con el método `environment` de la fachada `App`.

```php theme={null}
use Illuminate\Support\Facades\App;

$environment = App::environment();
```

También puedes pasar argumentos para comprobar si estás en un entorno determinado.

```php theme={null}
if (App::environment('local')) {
    // Entorno local
}

if (App::environment(['local', 'staging'])) {
    // Local o staging
}
```

### Cifrado del archivo de entorno

Los archivos de entorno sin cifrar no deben guardarse en el control de versiones, pero Laravel dispone de una función para cifrarlos.

```shell theme={null}
php artisan env:encrypt
```

Al ejecutarlo, `.env` se cifra y su contenido cifrado se guarda en `.env.encrypted`. La clave de descifrado aparece en la salida del comando; guárdala en un gestor de contraseñas seguro.

Para descifrarlo usa `env:decrypt`.

```shell theme={null}
php artisan env:decrypt
```

## Acceso a los valores de configuración

Puedes acceder a los valores de configuración desde cualquier parte de la aplicación con la fachada `Config` o la función global `config()`. Se usa la "notación de puntos" combinando el nombre del archivo y el de la opción.

```php theme={null}
use Illuminate\Support\Facades\Config;

$value = Config::get('app.timezone');

// También con la función global
$value = config('app.timezone');

// Con valor por defecto si no existe
$value = config('app.timezone', 'Asia/Tokyo');
```

Para modificar un valor en tiempo de ejecución, usa `Config::set()` o pasa un array a `config()`.

```php theme={null}
Config::set('app.timezone', 'America/Chicago');

config(['app.timezone' => 'America/Chicago']);
```

También existen métodos tipados de obtención que lanzan una excepción si el tipo no coincide.

```php theme={null}
Config::string('config-key');
Config::integer('config-key');
Config::float('config-key');
Config::boolean('config-key');
Config::array('config-key');
Config::collection('config-key');
```

## Caché de configuración

Para mejorar el rendimiento, cachea todos los archivos de configuración en uno solo.

```shell theme={null}
php artisan config:cache
```

Este comando combina todas las opciones de configuración en un único archivo que el framework puede cargar rápidamente.

<Warning>
  Ejecuta `config:cache` como parte del proceso de despliegue en producción. Durante el desarrollo local, cuando la configuración cambia con frecuencia, no se recomienda.
</Warning>

Una vez creada la caché, el archivo `.env` deja de leerse durante las solicitudes o los comandos Artisan. Por eso, `env()` devolverá solo variables de entorno del sistema.

<Tip>
  Por esta razón, llama a `env()` únicamente desde los archivos de configuración del directorio `config/`. En cualquier otro lugar de la aplicación, usa `config()` para obtener los valores.
</Tip>

Para limpiar la caché, usa `config:clear`.

```shell theme={null}
php artisan config:clear
```

### Publicar archivos de configuración

Muchos de los archivos de configuración de Laravel ya están publicados en el directorio `config/`, pero algunos como `cors.php` o `view.php` no lo están por defecto.

Para publicar archivos no publicados, usa el comando `config:publish`.

```shell theme={null}
php artisan config:publish

php artisan config:publish --all
```

## Modo debug

La opción `debug` de `config/app.php` determina cuánta información de error se muestra al usuario. Por defecto sigue el valor de la variable `APP_DEBUG` del archivo `.env`.

<Warning>
  **En producción, `APP_DEBUG` debe ser siempre `false`.** Si lo dejas en `true`, hay riesgo de exponer valores de configuración sensibles al usuario final.
</Warning>

```ini theme={null}
# Desarrollo local
APP_DEBUG=true

# Producción
APP_DEBUG=false
```

## Modo mantenimiento

Cuando la aplicación está en modo mantenimiento, todas las solicitudes reciben una vista personalizada. Así puedes "desactivar" temporalmente la aplicación durante actualizaciones o tareas de mantenimiento.

### Activar el modo mantenimiento

```shell theme={null}
php artisan down
```

Con la opción `--refresh`, el navegador recargará automáticamente después del número de segundos indicado.

```shell theme={null}
php artisan down --refresh=15
```

La opción `--retry` se usa como valor del encabezado HTTP `Retry-After`.

```shell theme={null}
php artisan down --retry=60
```

### Bypass del modo mantenimiento

Para permitir el acceso solo a ciertos usuarios mediante un token secreto, usa `--secret`.

```shell theme={null}
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
```

Con `--with-secret`, Laravel genera el token automáticamente.

```shell theme={null}
php artisan down --with-secret
```

### Modo mantenimiento en múltiples servidores

Por defecto, Laravel gestiona el modo mantenimiento con archivos. En configuraciones de varios servidores, resulta útil el método basado en caché.

```ini theme={null}
APP_MAINTENANCE_DRIVER=cache
APP_MAINTENANCE_STORE=database
```

### Prerrenderizar la vista de mantenimiento

Al ejecutar `php artisan down` durante un despliegue, los usuarios que accedan mientras se actualizan las dependencias podrían ver un error. Para evitarlo, prerrenderiza la vista con `--render`.

```shell theme={null}
php artisan down --render="errors::503"
```

También puedes redirigir todas las solicitudes a una URL durante el mantenimiento.

```shell theme={null}
php artisan down --redirect=/
```

### Desactivar el modo mantenimiento

```shell theme={null}
php artisan up
```

<Info>
  La plantilla por defecto del modo mantenimiento puede personalizarse creando `resources/views/errors/503.blade.php`.
</Info>

<Tip>
  Si quieres eliminar por completo el tiempo de inactividad, considera plataformas totalmente gestionadas como [Laravel Cloud](https://cloud.laravel.com).
</Tip>

## Próximos pasos

<Card title="Enrutamiento" icon="route" href="/es/routing">
  Aprende los fundamentos del enrutamiento, que conecta las URLs con los controladores.
</Card>


## Related topics

- [WebSocket (Jetstream / Firehose)](/es/packages/laravel-bluesky/websocket.md)
- [Hashing (hasheo)](/es/hashing.md)
- [Labeler](/es/packages/laravel-bluesky/labeler.md)
- [Logging](/es/logging.md)
- [Laravel Pint](/es/pint.md)
