Skip to content

Instalación nativa (servidor dedicado) ​

Instalación nativa en Linux, sin contenedores (ver Requisitos). El despliegue de referencia con el que se instala BIAM en los clientes es la instalación con contenedores; esta página es la alternativa para quien prefiera php-fpm + nginx en el propio servidor.

BIAM incluye un asistente de instalación web estilo Moodle: la base de datos y el primer administrador se configuran desde el navegador, no editando archivos.

1. Preparar el sistema ​

bash
# Ubuntu 24.04 — paquetes base
sudo apt install nginx postgresql-client \
  php8.4-fpm php8.4-pgsql php8.4-ldap php8.4-mbstring php8.4-xml \
  php8.4-curl php8.4-zip php8.4-intl php8.4-bcmath php8.4-opcache

En la VM de base de datos, crear la base y el rol:

sql
CREATE ROLE biam LOGIN PASSWORD '...';
CREATE DATABASE biam OWNER biam;

2. Desplegar el código ​

bash
# Backend
cd /opt/biam/backend
composer install --no-dev --optimize-autoloader

# SPA (omitir si el release ya trae el build)
cd /opt/biam/frontend
npm ci && npm run build

El SPA se sirve junto al backend, en el mismo origen (sin CORS): nginx apunta su raíz a backend/public.

Permisos: storage/ y bootstrap/cache/ escribibles por el usuario de php-fpm.

3. Servicios ​

  • Cron (obligatorio — las ventanas de ciclo de vida y la salud de conectores dependen de él):
* * * * * cd /opt/biam/backend && php artisan schedule:run >> /dev/null 2>&1
  • Worker de colas (systemd):
ini
[Service]
ExecStart=/usr/bin/php /opt/biam/backend/artisan queue:work --tries=3
Restart=always
User=www-data

4. .env de arranque ​

Parte de backend/.env.example. La conexión a la base de datos la escribe el asistente; lo que sí debe estar antes de abrirlo:

dotenv
APP_ENV=production
APP_DEBUG=false
APP_URL=https://biam.miempresa.com     # de aquí salen los enlaces de los correos
APP_TIMEZONE=America/La_Paz
APP_LOCALE=es

# Llaves PROPIAS de esta instalación: las líneas deben existir. Genera la APP_KEY
# ANTES de abrir el navegador — sin ella ninguna página carga, ni la del asistente.
APP_KEY=
JWT_SECRET=

# `file` mientras dura el asistente (la tabla `cache` aún no existe);
# `database` después, seguido de `php artisan config:cache`
CACHE_STORE=file
SESSION_DRIVER=array
QUEUE_CONNECTION=database
DB_CONNECTION=main

BIAM_HUB_URL=https://hub.b-iam.com
BIAM_HUB_PUBLIC_KEY=<la imprime `php artisan hub:public-key` en el Hub>
BIAM_HANDLERS_PATH=/opt/biam/backend/storage/app/handlers   # handlers RPA cargados por zip, fuera del código
bash
cd /opt/biam/backend
sudo -u www-data php artisan key:generate --force   # reemplaza la línea APP_KEY= (debe existir)
sudo -u www-data php artisan jwt:secret --force
sudo -u www-data php artisan storage:link

El SMTP, la conexión LDAP/AD y la licencia no van en el .env: se configuran desde la consola y quedan cifrados en la base de datos. Las llaves nunca se copian de otra instancia: con la misma APP_KEY dos instalaciones comparten la llave que cifra las credenciales, y con el mismo JWT_SECRET una sesión vale en ambas.

5. Asistente de instalación ​

Abrir https://biam.miempresa.com/install y seguir los tres pasos:

  1. Base de datos — el asistente prueba las credenciales antes de guardarlas y escribe las variables DB_* en el .env (si JWT_SECRET quedó en blanco, lo genera aquí).
  2. Migración — crea el esquema y los catálogos iniciales.
  3. Administrador — crea el primer usuario root con las credenciales que tú elijas y cierra el asistente en el mismo paso.

No existe ningún usuario/contraseña por defecto: hasta no completar el paso 3, nadie puede entrar; después de completarlo, el asistente queda bloqueado (reintentos devuelven INIT101W).

6. Post-instalación ​

bash
cd /opt/biam/backend
sudo sed -i 's/^CACHE_STORE=.*/CACHE_STORE=database/' .env
sudo -u www-data php artisan config:cache      # imprescindible: el cierre del asistente dejó la config cacheada
sudo systemctl restart biam-queue              # el worker debe nacer con la caché en base de datos
sudo -u www-data php artisan biam:handlers-migrate   # siembra BIAM_HANDLERS_PATH con los handlers del release

Cualquier cambio posterior del .env sigue la misma regla: editar → config:cache como el usuario de php-fpm → reiniciar el worker.

  • Backups: pg_dump de la base + storage/app/ (ahí viven los paquetes de conectores instalados y el marcador de instalación).
  • Opcional: cifrado del .env en reposo con php artisan env:encrypt (tarea de operaciones).
  • Configurar la conexión LDAP/AD desde la consola (Settings) — se guarda cifrada en la base de datos, no en .env.