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. Hay dos directivas importantes, que han de tener los valores siguientes:

    • TENANT_ENABLED=false

    • TENANT_NAMES="localhost"

  • /storage/db_backups/localhost: esta carpeta contendrá las copias de seguridad de la Base de Datos.

  • /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.

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.

  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.

  3. Modificar el fichero /public/.env con:

    1. TENANT_ENABLED=true

    2. TENANT_NAMES="localhost,cocin"

  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.

  5. Crear la carpeta /storage/db_backups/cocin: esta carpeta contendrá las copias de seguridad de la Base de Datos de la nueva Empresa.

  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.

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

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.

Última actualización