El archivo .env en Laravel es fundamental para configurar la aplicación de manera flexible y segura. Este archivo permite definir variables de entorno que se utilizan para establecer parámetros críticos, como la configuración de la base de datos, el entorno de la aplicación, las claves API y otros datos sensibles. Al mantener estas configuraciones fuera del código fuente, puedes ajustar diferentes entornos (desarrollo, prueba, producción) sin modificar el código de la aplicación.

En este post, aprenderás qué es el archivo .env, cómo configurarlo correctamente en Laravel, y las buenas prácticas para su manejo.

¿Qué es el archivo .env?

l archivo .env es un archivo de texto plano que se encuentra en la raíz de tu proyecto Laravel. Su propósito principal es almacenar configuraciones específicas del entorno de tu aplicación. Laravel utiliza el paquete vlucas/phpdotenv para cargar las variables definidas en este archivo y hacerlas accesibles en todo el proyecto.

Un archivo .env típico de Laravel se ve algo así:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nombre_base_datos
DB_USERNAME=usuario
DB_PASSWORD=contraseña

Paso a paso: Configuración del archivo .env

1. Configurar el entorno de la aplicación

Las primeras líneas del archivo .env definen el entorno de la aplicación y varios ajustes básicos. Estas variables ayudan a Laravel a saber en qué entorno se está ejecutando la aplicación, cómo debe comportarse y qué características debe activar.

APP_NAME=Laravel        # Nombre de la aplicación
APP_ENV=local           # Entorno de la aplicación (local, production, staging)
APP_KEY=                # Clave de la aplicación, generada con `php artisan key:generate`
APP_DEBUG=true          # Habilitar o deshabilitar el modo de depuración
APP_URL=http://localhost # URL base de la aplicación
  • APP_NAME. Es el nombre que tu aplicación mostrará en las vistas y en otros lugares. Puedes cambiarlo a lo que desees, como MiAplicacion.
  • APP_ENV. Define el entorno de ejecución de la aplicación. Los entornos más comunes son:
    • local. Para desarrollo en tu máquina local.
    • production. Para un servidor de producción en vivo.
    • staging. Para pruebas antes del despliegue final.
  • APP_KEY. Es la clave de cifrado de la aplicación. Debes generar esta clave utilizando el comando php artisan key:generate al configurar un nuevo proyecto.
  • APP_DEBUG. Si está en true, muestra errores detallados. Es recomendable usar false en producción para ocultar errores sensibles.
  • APP_URL. La URL base de la aplicación. En desarrollo es generalmente http://localhost, pero en producción deberás configurarlo con tu dominio.

2. Configurar la base de datos

Laravel puede conectarse a diferentes motores de base de datos (MySQL, PostgreSQL, SQLite, SQL Server). En el archivo .env, puedes definir la configuración para conectarte a la base de datos deseada.

DB_CONNECTION=mysql      # Motor de base de datos
DB_HOST=127.0.0.1        # Dirección del servidor de base de datos
DB_PORT=3306             # Puerto de la base de datos
DB_DATABASE=mi_base_datos # Nombre de la base de datos
DB_USERNAME=mi_usuario   # Usuario de la base de datos
DB_PASSWORD=mi_contraseña # Contraseña de la base de datos
  • DB_CONNECTION. Define el tipo de base de datos. Laravel soporta varios motores, pero los más comunes son:
    • mysql. MySQL o MariaDB.pgsql: PostgreSQL.sqlite: Para bases de datos basadas en archivos.sqlsrv: Para SQL Server.
    Por ejemplo, si utilizas MySQL, mantén DB_CONNECTION=mysql.
  • DB_HOST. Especifica la IP o el nombre del host donde está la base de datos. En desarrollo, generalmente es 127.0.0.1 o localhost.
  • DB_PORT. El puerto que usa el motor de base de datos. Para MySQL, el puerto por defecto es 3306.
  • DB_DATABASE. El nombre de tu base de datos.
  • DB_USERNAME. El nombre de usuario que tiene permisos para acceder a la base de datos.
  • DB_PASSWORD. La contraseña del usuario.

3. Configuración de cache y sesiones

Laravel también permite definir cómo y dónde almacenar la caché y las sesiones. Puedes configurarlo fácilmente desde el archivo .env.

CACHE_DRIVER=file        # Tipo de almacenamiento de caché
SESSION_DRIVER=file      # Controlador de almacenamiento de sesiones
SESSION_LIFETIME=120     # Tiempo de vida de la sesión (en minutos)
  • CACHE_DRIVER. Laravel admite varios controladores de caché como file, redis, memcached, database, entre otros. Para un desarrollo local puedes utilizar file, y para producción, si tienes Redis instalado, puedes cambiar a redis.
  • SESSION_DRIVER. Define dónde se almacenan las sesiones. Los controladores más comunes son file (localmente en archivos) o database (en la base de datos).
  • SESSION_LIFETIME. El tiempo de vida de la sesión en minutos.

4. Configuración de correos electrónicos

Puedes configurar el servicio de envío de correos en el archivo .env. Laravel soporta varios servicios de correo, como SMTP, Mailgun, y otros.

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
  • MAIL_MAILER. Define el servicio de correo que usarás. Los más comunes son smtp y mailgun.
  • MAIL_HOST. Especifica el servidor SMTP. Si estás usando un servicio como Mailgun o SendGrid, puedes obtener esta información de sus respectivas configuraciones.
  • MAIL_PORT. El puerto que el servidor de correo está utilizando.
  • MAIL_USERNAME y MAIL_PASSWORD. El nombre de usuario y la contraseña del servicio de correo.
  • MAIL_ENCRYPTION. Especifica el tipo de cifrado que se utiliza, como tls o ssl.
  • MAIL_FROM_ADDRESS. Dirección de correo desde la cual se enviarán los correos.
  • MAIL_FROM_NAME. Nombre que se mostrará como remitente.

5. Claves API y otros servicios externos

El archivo .env es también el lugar donde puedes almacenar claves y credenciales para acceder a servicios externos como Stripe, PayPal, Amazon S3, etc.

STRIPE_KEY=sk_test_xxxxxxxxxxxxxxxxxxxx
STRIPE_SECRET=sk_test_xxxxxxxxxxxxxxxxxxxx

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
  • STRIPE_KEY y STRIPE_SECRET. Son las claves de la API de Stripe para realizar transacciones. Puedes obtenerlas en el panel de administración de Stripe.
  • AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY. Son las credenciales de acceso para utilizar servicios de Amazon S3, como el almacenamiento de archivos.

6. Otras variables importantes

Laravel también permite definir otras variables que puedes necesitar para personalizar aún más el comportamiento de la aplicación. Estas variables pueden ser utilizadas en cualquier parte del proyecto a través de la función env() de Laravel.

Por ejemplo:

$apiKey = env('API_KEY', 'default_value');

En este caso, si API_KEY está definido en el archivo .env, su valor será utilizado. Si no, usará el valor por defecto (default_value).

Buenas prácticas para el archivo .env

  1. No subir el archivo .env a Git: El archivo .env contiene información sensible como contraseñas y claves API. Asegúrate de que esté incluido en el archivo .gitignore para evitar que se suba a repositorios públicos.
  2. Crear diferentes archivos .env para cada entorno: Crea un archivo .env personalizado para cada entorno en el que despliegues tu aplicación (local, staging, producción). Esto te permitirá ajustar las configuraciones sin modificar el código.
  3. Usar valores seguros: No utilices valores de configuración por defecto en producción. Asegúrate de que las claves API y las contraseñas sean seguras.
  4. Regenerar el APP_KEY al crear un nuevo proyecto: Después de clonar un proyecto Laravel, asegúrate de generar una nueva clave de aplicación con el siguiente comando:php artisan key:generate
  5. Esto se asegura de que cada instancia del proyecto tenga una clave única.

Conclusión

El archivo .env en Laravel es crucial para definir configuraciones de tu aplicación de forma flexible y segura. Al manejar las variables de entorno de esta manera, puedes ajustar fácilmente las configuraciones para diferentes entornos (desarrollo, pruebas, producción) sin necesidad de modificar el código fuente.

Con una correcta configuración del archivo .env, puedes controlar aspectos clave de tu aplicación, como el entorno de ejecución, la base de datos, el almacenamiento en caché, y los servicios externos.

¡Sigue estas prácticas y recomendaciones para asegurar que tu archivo .env esté bien configurado y protegido!

¿Tienes alguna pregunta o comentario sobre la configuración del archivo .env en Laravel? ¡Déjalo abajo y con gusto te ayudaré!