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 usarfalse
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.
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
olocalhost
. - 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 utilizarfile
, y para producción, si tienes Redis instalado, puedes cambiar aredis
. - SESSION_DRIVER. Define dónde se almacenan las sesiones. Los controladores más comunes son
file
(localmente en archivos) odatabase
(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
ymailgun
. - 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
ossl
. - 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
- 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. - 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. - 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.
- 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
- 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é!