> For the complete documentation index, see [llms.txt](https://abillander.gitbook.io/abillander-tutorial-spanish/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://abillander.gitbook.io/abillander-tutorial-spanish/abillander-para-desarrolladores/configurar-abillander-para-diferentes-sub-dominios.md).

# Configurar aBillander para diferentes Empresas o sub-Dominios

La instalación de aBillander por defecto es para una Empresa. Sin embargo puede configurar la aplicación para gestionar un número ilimitado de Empresas. Necesitará un subdominio y una Base de Datos para cada Empresa.

## **Configuración por defecto (una Empresa)**

Esta configuración es la que resulta después del proceso de instalación, y generalmente no necesitará modificarla.

* ***/public/.env**:* este fichero es necesario para que aBillander pueda iniciarse. Contiene la configuración básica de aBillander. Puede consultar las directivas de este fichero en [laravel.com](https://abillander.gitbook.io/abillander-tutorial-spanish/abillander-para-desarrolladores/www.laravel.com).\
  &#x20;Hay dos directivas importantes, que han de tener los valores siguientes:
  * TENANT\_ENABLED=false
  * TENANT\_NAMES="localhost"<br>
* **/storage/db\_backups/localhost**: esta carpeta contendrá las copias de seguridad de la Base de Datos.<br>
* **/public/tenants/localhost**: esta carpeta (y sub-carpetas) se proveen junto con el resto de ficheros de aBillander, y almacenarán contenido específico de la Empresa, como el logotipo, las imágenes de los Productos y otros. Algunas de estas sub-carpetas contienen ficheros.

![](/files/-MMFwbe91Dg3VWM_N3zU)

## **Configuración multi-Empresa (multi-Tenant)**

Para clarificar la operativa, supongamos que se desea crear una Empresa adicional, y acceder a ella a través del subdominio ***cocin.example.com***. Los pasos a seguir son:

1. Hacer que el subdominio ***cocin.example.com*** apunte a la carpeta ***/public***.<br>
2. Crear una **Base de Datos** y cargar en ella las tablas de aBillander, por ejemplo a partir de una copia de seguridad de la Empresa principal, o a partir de la Base de Datos vacía que resulta después de la instalación de aBillander.<br>
3. Modificar el fichero ***/public/.env*** con:
   1. TENANT\_ENABLED=true
   2. TENANT\_NAMES="localhost,cocin"<br>
4. Crear el fichero ***/public/.env-cocin*** con las directivas específicas de la nueva Empresa (sólo las que cambian respecto al fichero */public/.env*). Típicamente serán las correspondientes al subdominio, a la configuración de la Base de Datos y del Servidor de Correo saliente.<br>
5. Crear la carpeta ***/storage/db\_backups/cocin***: esta carpeta contendrá las copias de seguridad de la Base de Datos de la nueva Empresa.<br>
6. Crear la carpeta ***/public/tenants/cocin***. El contenido de esta carpeta (sub-carpetas y ficheros) será idéntico a */public/tenants/localhost* tal como se entrega en la distribución original de aBillander. En esta carpeta (y sub-carpetas) se almacenará contenido específico de la nueva Empresa. &#x20;

![](/files/-MMFx-y2ELsdgUxYPaP3)

El fichero ***/public/.env-cocin*** puede tener un contenido similar a:

![](/files/-MMFyoehlHjbKzbHq-Qy)

## **Explicación Técnica**�

Laravel solo permite un archivo **.env**, así que lo que intentamos hacer es cambiar el archivo **.env** ANTES de que se cargue como configuraciones por Laravel.

Queremos definir los valores de entorno que son diferentes para cada sub-dominio, pero también permitir que las variables de entorno comunes se definan una vez.

### **Paso 1: Archivos de entorno**

Los diferentes archivos env se colocarán en la carpeta raíz del proyecto, junto con el archivo **.env** que Laravel carga por defecto.

A continuación, asigne a cada archivo el nombre de sub-dominio que usaría para acceder a él. p.ej. **.env-test**, **.env-dev**, etc.

Dentro de cada archivo, defina los valores env que desea sobre-escribir cuando visite la aplicación a través de ese sub-dominio.

### **Paso 2: Cargar las variables de entorno**

Lo que tenemos que hacer ahora es cargar primero las variables de entorno que corresponden al sub-dominio, y luego, cuando Laravel carga el archivo **.env** predeterminado, no sobrescribirá las variables ya establecidas.

Cargaremos el archivo correspondiente al sub-dominio después del “autoload”, de modo que tengamos acceso al paquete **vlucas/phpdotenv**, pero antes de que Laravel esté completamente cargado.

Así, en **public/index.php** después de la línea

require \_\_DIR\_\_.'/../bootstrap/autoload.php';

se ha agregado la siguiente linea

require \_\_DIR\_\_.'/../bootstrap/env.php';

En la carpeta **bootstrap** se encuentra el fichero **env.php**. En este fichero se encuentra la lógica para cargar el fichero de entorno correcto según la URL desde la que esté accediendo. Esta lógica puede cambiarse según necesidades.

Con estos añadidos, cualquier variable que desee sobrescribir, como la **APP\_URL**, simplemente puede establecer en el archivo de configuración del sub-dominio.�
