En esta guía
Requisitos ¿Linux o Windows? Instalación paso a paso Configuración de Docker Puertos y red Compartir servidor con otros sistemas IP pública y port forwarding Instalar por línea de comandos Variables de entorno Activar la licencia Crear cuentas del equipo Usuario maestro y permisos Backups y migración de datos Actualizar de versión Solución de problemas Preguntas frecuentesDocumentación de instalación
Todo lo que necesitás para instalar, configurar y mantener Lockar en tu propio servidor.
Requisitos
- Docker y Docker Compose instalados en el servidor (es lo único que hay que instalar aparte de Lockar — no hace falta PHP, ni un servidor web, ni una base de datos aparte).
- Una IP interna o dominio por donde vas a acceder (ej.
172.16.0.5olockar.tuempresa.com). - Tu clave de licencia (llega por email al comprar, también se puede copiar desde la pantalla de pago).
- Una herramienta para descomprimir
.zip(viene incluida en Linux y Windows modernos — en Linux también sirveunzip). - Un cliente SMTP para que salgan los emails de recuperación de cuenta (Gmail, SendGrid, Mailgun, lo que uses habitualmente) — opcional, Lockar funciona sin esto, solo no vas a poder recibir el email de "olvidé mi contraseña".
¿Linux o Windows Server?
Lockar se distribuye como imagen Docker — el contenedor es Linux por dentro siempre, sin importar el sistema operativo del servidor que lo aloja. Eso significa que no hay dos versiones distintas ni cambios de código entre plataformas, solo cambia cómo instalás Docker.
Servidor Linux (recomendado — Ubuntu/Debian)
# Instalar Docker Engine + Compose plugin
curl -fsSL https://get.docker.com | sh
sudo apt install -y docker-compose-plugin
# Verificar que funciona
docker --version
docker compose version
En distribuciones basadas en RHEL/CentOS/Rocky, reemplazá por dnf install docker-ce docker-compose-plugin (previo dnf config-manager --add-repo del repo oficial de Docker).
Servidor Windows
- Windows 10/11 o Windows Server 2022 con Desktop Experience: instalá Docker Desktop, que usa WSL2 por debajo. Docker Desktop te va a pedir habilitar WSL2 la primera vez — aceptá y reiniciá cuando lo pida.
- Windows Server Core (sin interfaz gráfica) o donde no se pueda instalar Docker Desktop: instalá Docker Engine directamente vía PowerShell, sin Docker Desktop — es el camino recomendado para un servidor real (Desktop está pensado para uso de escritorio, no para producción).
Una vez instalado Docker (de cualquiera de las dos formas), los pasos de instalación de Lockar de acá en adelante son exactamente los mismos que en Linux.
Instalación paso a paso
-
Descargá el instalador desde Descargas (necesitás tu clave de licencia para desbloquear el botón de descarga).
Si estás instalando directo en un servidor Linux sin entorno gráfico, no hace falta bajarlo a tu PC y subirlo por FileZilla/SCP — se puede traer directo por línea de comandos con lockar-cli. Ver Instalar por línea de comandos más abajo para la guía completa.
- Si lo bajaste por el navegador en tu PC, descomprimí el archivo en una carpeta del servidor, por ejemplo
/opt/lockar(Linux) oC:\lockar(Windows). - Levantá los contenedores desde esa carpeta:
No hace falta crear ni editar ningún archivo de configuración a mano antes de este paso — Lockar genera solo, la primera vez que arranca, todo lo que necesita para funcionar (clave de cifrado interna, base de datos). Si más adelante querés cambiar el dominio, el modo de red, o el SMTP, esas opciones viven endocker compose up -d --buildstorage/persist/.env(se crea recién después del primer arranque) — ver Variables de entorno. - Esperá a que termine (la primera vez prepara la base de datos, puede tardar uno o dos minutos).
- Creá la primera cuenta (queda como usuario maestro) desde la terminal del servidor — Lockar no tiene ningún formulario de registro público, ni siquiera la primera vez. El comando es interactivo, te va preguntando uno por uno:
$ docker compose exec app php artisan lockar:user Nombre: > Iván Burgio Email: > iburgio@acsa.uy Contraseña (esta es la Clave Maestra de la persona): > (no se ve en pantalla mientras la tipeás)Esa contraseña sirve para dos cosas a la vez: loguearse, y derivar la Clave Maestra que cifra todo lo que guarda esa persona. Guardala en un lugar seguro — nadie, ni siquiera Buyar, la puede recuperar si se pierde.
- Entrá desde el navegador a la dirección del servidor (por defecto
http://IP-del-servidor, puerto 80 — ver Puertos y red si querés cambiar esto) y logueate con esa cuenta. - Cargá tu clave de licencia en /licencia — ver Activar la licencia.
Configuración de Docker
El docker-compose.yml que viene con el instalador ya trae todo listo: PHP, Apache, y la base de datos SQLite embebida (no hace falta un servidor de base de datos aparte para instalaciones chicas o medianas).
Comandos que vas a usar seguido:
# Levantar / reconstruir
docker compose up -d --build
# Ver logs en vivo
docker compose logs -f app
# Entrar a una terminal dentro del contenedor
docker compose exec app bash
# Correr un comando de Lockar (ej. crear un usuario)
docker compose exec app php artisan lockar:user
# Apagar
docker compose down
Puertos y red
Por defecto el contenedor expone el puerto 80 (HTTP) del servidor hacia afuera. Si ya tenés algo corriendo en ese puerto, cambiá el mapeo en docker-compose.yml:
ports:
- "8080:80" # accedés por http://tu-servidor:8080
Solo dentro de la empresa: no necesitás abrir nada en el firewall hacia internet. Con que la IP del servidor sea alcanzable desde la red interna alcanza. Configurá en storage/persist/.env (aparece recién después del primer docker compose up):
APP_URL=http://172.16.0.5
USE_SECURE_TUNNEL=false
Accesible desde afuera de la empresa: necesitás un dominio apuntando al servidor y HTTPS (con un reverse proxy tipo Nginx/Caddy, o un túnel como Cloudflare Tunnel). Configurá:
APP_URL=https://lockar.tuempresa.com
USE_SECURE_TUNNEL=true
Después de editar storage/persist/.env, alcanza con docker compose restart (no hace falta --build).
Compartir el servidor con otros sistemas
Se puede instalar Lockar en el mismo servidor/VM donde ya corre (o va a correr) otra aplicación — Docker aísla cada proyecto, no hay conflicto por sí solo. Lo único que hay que evitar es que dos docker-compose.yml distintos usen el mismo puerto de host.
Opción simple: un puerto para cada uno
# docker-compose.yml de Lockar
ports:
- "8080:80"
# docker-compose.yml del otro sistema
ports:
- "8081:80"
Cada uno queda accesible por http://ip-del-servidor:8080 y :8081 respectivamente. Alcanza para uso interno.
Opción prolija: un dominio por sistema
Si querés que cada uno tenga su propia dirección (lockar.tuempresa.com, otro.tuempresa.com) en vez de acordarte de puertos, instalá un Nginx o Apache directo en el servidor (fuera de Docker) que reciba todo por el puerto 80/443 y reenvíe según el dominio pedido. Ejemplo mínimo con Nginx:
server {
listen 80;
server_name lockar.tuempresa.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name otro.tuempresa.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
}
}
IP pública y port forwarding
Esta sección aplica solo si vas a exponer Lockar a internet (para acceder desde afuera de la oficina, ej. equipo remoto). Si lo vas a usar solo dentro de la red local, salteala.
1. Averiguar la IP pública de tu conexión
Es la IP con la que tu router sale a internet, distinta de la IP interna del servidor (172.16.x.x, 192.168.x.x, etc.). Se consigue entrando a whatismyip.com desde cualquier equipo de esa red, o revisando el panel de administración del router.
2. IP pública fija vs. dinámica
La mayoría de las conexiones domésticas/PyME tienen IP dinámica (cambia cada tanto). Si es tu caso, o no estás seguro, contratá una IP fija con tu proveedor de internet, o usá un servicio de DNS dinámico (No-IP, DuckDNS, Cloudflare + un script) que actualiza automáticamente el registro DNS cuando cambia la IP.
3. Port forwarding en el router
Entrá al panel de administración del router (normalmente 192.168.0.1 o 192.168.1.1) y buscá la sección "Port Forwarding" / "Reenvío de puertos" / "Virtual Server" (el nombre varía según la marca). Creá una regla que reenvíe:
- Puerto externo
80(y443si vas a usar HTTPS con certificado propio) → IP interna del servidor donde corre Lockar, mismo puerto.
Si tu router está detrás del módem de tu ISP en modo "bridge" o "doble NAT", puede que además tengas que configurar el reenvío en el equipo del ISP, o pedirles que lo desactiven — es una causa común de "abrí el puerto pero sigue sin funcionar".
4. Apuntar el dominio
Creá un registro A en tu proveedor de DNS que apunte tu dominio/subdominio (ej. lockar.tuempresa.com) a la IP pública del paso 1. Una vez propagado (puede tardar hasta un par de horas), seguí con la configuración de APP_URL y USE_SECURE_TUNNEL=true de la sección anterior.
Instalar por línea de comandos (lockar-cli)
Para instalar directo en un servidor sin entorno gráfico, sin bajar nada a tu PC ni usar FileZilla/SCP, hay una herramienta de línea de comandos — lockar-cli — que hace todo por HTTP. Solo necesita curl.
curl equivalentes de la tabla más abajo, que sí funcionan tal cual en CMD y PowerShell.
Servidor Linux / macOS / Git Bash / WSL
1. Descargar el script (una sola vez)
curl -fsSL https://lockar.buyarservices.com/cli/lockar-cli.sh -o lockar-cli.sh
chmod +x lockar-cli.sh
2. Ver todos los comandos disponibles
./lockar-cli.sh --help
3. Ver qué versiones hay publicadas
./lockar-cli.sh versions -l TU-CLAVE-DE-LICENCIA
4. Descargar e instalar
# Última versión disponible
./lockar-cli.sh download -l TU-CLAVE-DE-LICENCIA
# Una versión puntual, con nombre de archivo propio
./lockar-cli.sh download -l TU-CLAVE-DE-LICENCIA -v 1.0.0 -o lockar-1.0.0.zip
# Descomprimir y levantar
unzip lockar.zip -d lockar && cd lockar
docker compose up -d --build
5. Consultar esta misma documentación desde la terminal
# Te tira el link a la guía completa
./lockar-cli.sh docs
# O directo a una sección puntual (ej. troubleshooting)
./lockar-cli.sh docs troubleshooting
Windows (CMD o PowerShell) — mismo resultado, sin el script
Útil para probar tu clave desde tu PC antes de ir al servidor, o si vas a administrar Lockar desde una VM Windows. La sintaxis es idéntica en CMD y PowerShell moderno (ambos traen curl.exe de fábrica en Windows 10/11).
Ver versiones disponibles
curl "https://lockar.buyarservices.com/api/download/versions?license_key=TU-CLAVE-DE-LICENCIA"
Descargar la última versión
curl -f -L -o lockar.zip "https://lockar.buyarservices.com/api/download?license_key=TU-CLAVE-DE-LICENCIA"
Descargar una versión puntual
curl -f -L -o lockar.zip "https://lockar.buyarservices.com/api/download?license_key=TU-CLAVE-DE-LICENCIA&version=1.0.0"
Si tu licencia está mal escrita, vencida o revocada, o pedís una versión que no existe, lockar-cli te lo dice con un mensaje claro en vez de fallar en silencio.
Variables de entorno
Estas son configuraciones opcionales — Lockar arranca y funciona sin tocar nada de esto. Solo hace falta editarlas si querés cambiar el dominio de acceso, exponerlo a internet, o configurar el envío de emails.
.env en la raíz del proyecto para editar. Se genera solo, adentro del contenedor, y la copia editable para vos queda en storage/persist/.env — recién aparece después del primer docker compose up. Esto es a propósito: montar un solo archivo suelto desde el host (en vez de una carpeta completa) es un patrón de Docker que en algunos servidores da errores de permisos difíciles de rastrear al generar la clave interna, así que se evitó directamente.
| Variable | Para qué sirve |
|---|---|
APP_URL | La URL por la que se accede a Lockar (IP interna o dominio público). |
USE_SECURE_TUNNEL | true si se accede desde afuera de la red local con HTTPS, false para uso solo interno. |
MAIL_* | Credenciales SMTP, para que salgan los emails de recuperación de cuenta. |
LICENSE_KEY | Opcional: se puede cargar acá o directamente desde /licencia dentro de Lockar (recomendado, así no hay que tocar el servidor). |
LICENSE_SERVER_URL | Ya viene configurada apuntando a Lockar — no hace falta tocarla. |
APP_KEY | Clave de cifrado interna de la aplicación (sesiones, cookies). Se genera sola en el primer arranque — no hace falta tocarla ni generarla a mano. |
nano storage/persist/.env
docker compose restart
Activar la licencia
Una vez que Lockar está instalado y creaste tu cuenta, andá a /licencia dentro de Lockar y pegá la clave que compraste. Se verifica al instante.
Lockar revisa la licencia automáticamente una vez por hora mientras el servidor tenga salida a internet. Si por algún motivo se corta la conexión, sigue funcionando unos días con la última verificación válida (período de gracia) antes de pedir que renueves.
Cuando esté por vencer o venza, te avisamos por email y también vas a ver un aviso arriba de la pantalla en Lockar con un link directo para renovar.
Crear cuentas para tu equipo
Lockar no tiene registro público — nadie se puede crear una cuenta por su cuenta, ni siquiera la primera vez. Hay dos formas de sumar gente, según quién lo hace:
Invitando por email (recomendado, día a día)
El usuario maestro (o quien tenga el permiso de licencia delegado) entra a /licencia dentro de Lockar y pone el email de la persona en "Invitar gente nueva". Le llega un link personal (vence en 7 días, de un solo uso) donde esa persona elige su nombre y su propia Clave Maestra — nadie más la ve, ni siquiera quien invitó.
Si todavía no configuraste el envío de emails (ver Solución de problemas), la invitación se crea igual y te muestra el link directo para que lo mandes vos a mano — no hace falta tener SMTP andando para usar esta función.
Desde la terminal del servidor
Útil como respaldo si el servidor no tiene SMTP configurado (no puede mandar el email de invitación), o para crear la primera cuenta del todo. Es interactivo — te pregunta nombre, email y contraseña uno por uno (ver el paso 5 de Instalación paso a paso para el detalle):
docker compose exec app php artisan lockar:user
Usuario maestro y permisos
La primera cuenta que se crea en una instalación queda como usuario maestro: es el único que puede activar o cambiar la clave de licencia por defecto, invitar gente nueva, y darle ese mismo permiso a otra persona (todo desde /licencia).
El resto de los usuarios pueden usar Lockar con total normalidad — crear contraseñas, armar carpetas compartidas, tablas, notas — tengan o no ese permiso delegado.
Backups y migración de datos
Backup automático
Lockar hace un respaldo automático de la base de datos todos los días. Los archivos quedan dentro de la carpeta storage del proyecto — asegurate de que esa carpeta esté incluida en tu propia estrategia de backup del servidor (o copiala periódicamente a otro lado, por ejemplo con un rsync nocturno a otro disco/servidor).
Restaurar un backup
# Apagar Lockar
docker compose down
# Reemplazar la base de datos por el backup
cp storage/backups/database-2026-08-01.sqlite database/database.sqlite
# Volver a levantar
docker compose up -d
Migración de esquema entre versiones
Cuando actualizás Lockar a una versión nueva que agrega o cambia tablas, no hace falta correr nada a mano: cada vez que el contenedor arranca, Lockar aplica automáticamente cualquier migración de base de datos pendiente antes de levantar el sitio. Igual, es buena práctica hacer un backup manual del archivo database/database.sqlite antes de actualizar (ver Actualizar de versión).
Actualizar de versión
- Descargá la nueva versión desde Descargas (o con lockar-cli:
./lockar-cli.sh download -l TU-CLAVE). - Hacé un backup de la carpeta
storagecompleta (ahí adentro vivepersist/.envcon tu configuración y clave) y dedatabase/database.sqlitepor las dudas. - Reemplazá los archivos del proyecto por los de la nueva versión (sin pisar tu carpeta
storagenidatabase). - Reconstruí los contenedores:
docker compose up -d --build— las migraciones de base de datos nuevas se aplican solas en este paso, y tu configuración se mantiene porque ya está enstorage/persist/.env.
Solución de problemas
La VM/servidor no tiene salida a internet ("Could not resolve host", apt install falla)
Antes de tocar nada de Docker, confirmá que el servidor realmente tenga internet:
ip r # ¿hay una línea "default via ..."? (el gateway)
ping -c 3 <esa-ip-del-gateway> # ¿responde el gateway?
ping -c 3 8.8.8.8 # ¿hay salida real a internet?
ping -c 3 google.com # ¿resuelve DNS?
Si el ping al gateway ya falla ("Destination Host Unreachable"), el problema es de la configuración de red de la VM en el hypervisor (VMware/Proxmox/Hyper-V) — no algo que se arregle desde adentro del sistema operativo. Revisá que el adaptador de red de la VM esté conectado al port group/switch virtual correcto (uno que realmente tenga salida a internet, no uno aislado). Si el gateway responde pero no `google.com`, es puntualmente DNS: echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf.
"Puerto ya en uso" / "port is already allocated"
Otro servicio del servidor ya está usando el puerto 80. Cambiá el mapeo de puertos en docker-compose.yml (ver Puertos y red) a uno libre, por ejemplo 8080:80, y volvé a levantar con docker compose up -d --build.
"Permission denied" al crear la carpeta de instalación (ej. /opt/lockar)
Tu usuario normal no tiene permiso de escritura en carpetas del sistema como /opt. Creala con sudo y después dátela a tu usuario, así no hace falta sudo en cada paso siguiente:
sudo mkdir -p /opt/lockar
sudo chown -R tu-usuario:tu-usuario /opt/lockar
"permission denied while trying to connect to the docker API"
Tu usuario todavía no está en el grupo docker (por eso necesita sudo para cada comando de Docker). Se arregla una sola vez:
sudo usermod -aG docker $USER
Después hace falta cerrar la sesión y volver a entrar (no alcanza con seguir en la misma terminal) para que el cambio de grupo tome efecto.
El contenedor no levanta / se reinicia solo (Restarting en docker compose ps)
Revisá el detalle del error con docker compose logs -f app. Las causas más comunes: puerto ocupado (ver arriba), falta de espacio en disco, o permisos incorrectos si copiaste/descomprimiste los archivos de otra forma que no sea lockar-cli o Descargas. Si acabás de cambiar permisos y sigue fallando con el mismo error, puede que el contenedor haya quedado creado con una referencia rota de antes — destruilo del todo y que se cree de nuevo:
docker compose down
docker compose up -d --build
docker compose restart (a diferencia de down + up) reutiliza el contenedor existente tal cual quedó creado — si el problema viene de ahí, un simple restart no lo arregla.
Error de permisos genérico en storage o database
Si acabás de mover/copiar la carpeta de Lockar a mano (en vez de descomprimir el zip directo ahí), puede que haya quedado con el dueño o los permisos de otro usuario/sistema. Arreglalo desde el servidor (no dentro del contenedor):
sudo chown -R tu-usuario:tu-usuario /opt/lockar
find /opt/lockar -type d -exec chmod 755 {} \;
find /opt/lockar -type f -exec chmod 644 {} \;
chmod +x /opt/lockar/entrypoint.sh /opt/lockar/artisan
docker compose restart
No verifica la licencia / "no se pudo contactar al servidor de licencias"
Lockar necesita salida a internet (saliente, no entrante) para validar la licencia contra el servidor central. Confirmá que el servidor puede resolver DNS y salir por HTTPS (probá curl -I https://lockar.buyarservices.com desde dentro del contenedor: docker compose exec app curl -I https://lockar.buyarservices.com). Si tu firewall/proxy corporativo bloquea salidas, agregá una excepción para ese dominio. Mientras tanto, Lockar sigue funcionando con la última verificación válida durante el período de gracia.
Configurar el envío de emails (recuperación de cuenta e invitaciones)
Por defecto Lockar no manda ningún email — ni de recuperación de cuenta, ni las invitaciones que arma un admin desde /licencia (esas siguen funcionando igual: si el email falla, te muestra el link para que lo pases a mano). Hay dos formas de configurarlo, a elección:
Desde el panel (más simple)
El usuario maestro (o quien tenga el permiso delegado) entra a Email (SMTP) en el menú de usuario, completa el formulario, y puede mandar un email de prueba ahí mismo antes de guardar en serio. No hace falta terminal ni reiniciar nada — el cambio queda activo en la siguiente request.
Desde la terminal
Editando storage/persist/.env directo (los dos caminos escriben al mismo lugar, así que da igual cuál uses):
# Ejemplo con Gmail (necesita una "contraseña de aplicación", no la
# contraseña normal de la cuenta — se genera en myaccount.google.com/apppasswords)
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=tu-cuenta@gmail.com
MAIL_PASSWORD=la-contraseña-de-aplicación
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=tu-cuenta@gmail.com
Cualquier otro proveedor (Office 365, SendGrid, Mailgun, el SMTP de tu propia empresa) funciona igual — son los mismos campos estándar de Laravel. Después de editar a mano (no desde el panel), docker compose restart (no hace falta --build).
Configuré el port forwarding pero sigo sin poder entrar desde afuera
Confirmá primero que el puerto está realmente abierto probando desde un verificador de puertos externo. Si sigue cerrado, revisá si tu conexión tiene "doble NAT" (router propio detrás del módem del ISP en modo router, no bridge) — en ese caso hay que configurar el reenvío en ambos equipos, o pedirle al ISP que ponga el módem en modo bridge.
Preguntas frecuentes
USE_SECURE_TUNNEL=false y APP_URL con la IP interna del servidor, y listo.