Comparte en Facebook Twitter Google+

banner-variables-de-entorno-en-laravel

Cuando trabajamos en el desarrollo de una aplicación, la mayoría de las veces, las credenciales de la base de datos de nuestro entorno local es diferente de las credenciales de nuestro entorno de producción o pruebas.  No sólo esas, sino muchos otros datos de configuración de servicios pueden variar de entorno a entorno. Por lo que no es conveniente tener datos de configuración variables dentro de nuestro código, para solventar este problema podemos hacer uso de las variables de entorno.

Las variables de entorno son aquellas que se importan al espacio de nombres (namespace) global de PHP desde el entorno en el que se esté ejecutando el intérprete PHP. Con ellas podemos guardar la configuración de una aplicación que puede variar según el entorno, dándonos la ventaja de poder extraer datos o credenciales del código que no deberían estar presentes en el control de versiones. Esto nos proporciona una flexibilidad para cambiar de entorno sin mayor problema y sin comprometer la seguridad de nuestra aplicación dejando credenciales de los servicios que estamos usando en el código.

A partir de Laravel 5 se integró el componente PHP dotenv para manejar las variables de entorno de una manera sencilla, sin necesidad de modificar el archivo .htaccess o los virtual host de Apache/nginx. Este paquete carga las variables de configuración o entorno desde un archivo llamado .env, el cual debe estar fuera del control de versiones, es decir, dicho archivo debe ser agregado al archivo .gitignore del proyecto, en caso de que estés usando git.

Adicionalmente, se recomienda usar un archivo llamado .env.example que sí estará dentro del control de versiones donde se almacenarán todas las variables de entorno requeridas, definiendo con posibles valores pero solo aquellas que no guarden datos sensibles como contraseñas o API keys. Este archivo sirve como ejemplo para mostrar cómo el archivo .env deber ser llenado.  

Estos archivos siguen la estructura CLAVE=VALOR por ejemplo para Laravel 5.2, el archivo .env.example predeterminado es el siguiente:

Es decir, que cuando creamos un nuevo proyecto en Laravel o clonamos uno existente, debemos crear el archivo .env a partir del archivo .env.example, adaptándolo a nuestro entorno. Paso que debemos hacer para cada entorno en el que instalemos el proyecto.

Por ejemplo, para definir que el proyecto está instalado en el entorno local dejamos la clave  APP_ENV con el valor  local en cambio, si es el entorno de producción colocamos  production y para el entorno de pruebas ponemos  testing u otro entorno que se quiera configurar. Igualmente, con las credenciales de base de datos, si estamos en el entorno local usando Homestead, XAMPP o WAMP, o LAMP  tendríamos que configurar según nuestro datos, que posiblemente sean diferentes al entorno del servidor de producción.

¿Cómo trabaja Laravel con el archivo .env?

Por medio del helper env() de Laravel podemos acceder a todos las variables definidas en el archivo .env en cualquier parte de nuestro código, gracias a que ellas están siendo definidas en $_ENV a través del componente PHP dotenv. Este helper acepta dos parámetros: la variable a buscar y un valor por defecto en caso que dicha variable no exista, sea null o esté vacía. Por ejemplo, para configurar un driver de correos, Laravel lo hace a través del archivo config/mail.php que contiene entre otras cosas lo siguiente:

Donde, ‘driver’ recibirá el valor devuelto por env('MAIL_DRIVER', 'smtp') que será el valor que hayamos colocado en la clave MAIL_DRIVER  del archivo .env, y en caso, de no tenerlo configurado devolverá ‘smtp’.

Por ejemplo, para nuestro entorno de desarrollo o local podremos definir  MAIL_DRIVER=log en el archivo .env de ese entorno con lo cual veremos los correos enviados se mostrarán en los archivos del directorio storage/logs/ y para nuestro entorno de producción definimos  MAIL_DRIVER=mailgun en el archivo .env que está en el servidor de producción para trabajar con este servicio como fue explicado en Envio de correos con Mailgun en laravel 5.

¿Cómo creamos una nueva variable de entorno?

Si en algún momento configuramos un servicio y no queremos dejar expuestas sus credenciales en el repositorio o si queremos configurar algún dato que necesitemos cambiar de un entorno a otro, podemos hacerlo de manera fácil agregando una nueva variable de entorno en el archivo .env (sin olvidar agregarla también en el archivo .env.example) y luego llamarla con el helper env().

Espero te haya gustado el tutorial y lo compartas en las redes sociales. Si tienes interés en algún tema en específico puedes solicitarlo en Teach Me o también formando parte de nuestra comunidad compartiendo tus conocimientos.

Material relacionado

Aprende PHP, Laravel y más por sólo 999 al mes: ver planes.

Lección anterior Cómo organizar las rutas de tus proyectos de Laravel Lección siguiente Grupos de rutas en Laravel 5.*