Lockstep: Plataforma de lista de verificación de seguridad personal

Publicado por


Self-hosted

Lockstep: Plataforma de lista de verificación de seguridad personal

Rastrea hábitos de seguridad, progreso de listas de verificación y prioridades desde una interfaz web limpia

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Lockstep: Plataforma de lista de verificación de seguridad personal en el canal GENBYTE:

¿Qué es Lockstep: Plataforma de lista de verificación de seguridad personal?

Lockstep es una plataforma open source diseñada para gestionar listas de verificación de seguridad personal. Permite a los usuarios registrar hábitos de seguridad, monitorizar el progreso de tareas, establecer prioridades y visualizar el avance basado en perfiles de usuario. La aplicación ofrece una interfaz web responsive con soporte para modo claro y oscuro, internacionalización en cuatro idiomas y despliegue listo para Docker con persistencia de datos. El proyecto está licenciado bajo GPL-2.0 y desarrollado en TypeScript utilizando el framework Qwik.

Combina seguimiento de hábitos de seguridad, gestión de perfiles de usuario y despliegue autohospedado con persistencia de datos en un solo contenedor.

Características principales

Autenticación y perfiles de usuario

Sistema de inicio de sesión con seguimiento de progreso basado en perfiles individuales. Permite la creación de una cuenta inicial y, opcionalmente, deshabilitar nuevos registros mediante variable de entorno.

Soporte multilingüe

Interfaz disponible en inglés, alemán, turco y búlgaro.

Modo claro y oscuro

Tema visual adaptable con soporte nativo para preferencias de color del sistema o selección manual.

Panel de progreso de seguridad

Dashboard que muestra el avance general, categorías de lista de verificación, niveles de prioridad, filtros y estado de finalización de tareas.

Despliegue Docker con persistencia

Imagen oficial publicada en GitHub Container Registry y Docker Hub. Incluye docker-compose.yml y ejemplo de stack.yml para Docker Swarm. Los datos de usuario se almacenan en volumen montado en /data.

Lista de verificación personalizable

El contenido de la lista se define en personal-security-checklist.yml y se compila en la build de producción.

Requisitos del sistema

  • Docker Engine 20.10+ y Docker Compose v2 (para despliegue en contenedor)
  • Node.js 26+ (para desarrollo local o build manual)
  • Volumen persistente para /data (recomendado para producción)
  • Puerto 4174 disponible en el host

Instalación con Docker Compose

Despliegue con Docker Compose (recomendado)

Usa la imagen publicada en GitHub Container Registry. Crea un archivo docker-compose.yml con el contenido siguiente y ejecuta docker compose up -d. La variable LOCKSTEP_REGISTRATION_ENABLED controla si se permiten nuevos registros (true por defecto).

services:
lockstep:
image: ghcr.io/caglaryalcin/lockstep:latest
ports:
– "4174:4174"
environment:
PORT: "4174"
PSC_SETTINGS_FILE: /data/lockstep-users.json
LOCKSTEP_REGISTRATION_ENABLED: ${LOCKSTEP_REGISTRATION_ENABLED:-true}
volumes:
– lockstep-data:/data
restart: unless-stopped

volumes:
lockstep-data:

Despliegue con Docker Compose desde Docker Hub

Modifica el valor image a caglaryalcin/lockstep:latest en el docker-compose.yml anterior y ejecuta docker compose up -d.

services:
lockstep:
image: caglaryalcin/lockstep:latest
ports:
– "4174:4174"
environment:
PORT: "4174"
PSC_SETTINGS_FILE: /data/lockstep-users.json
LOCKSTEP_REGISTRATION_ENABLED: ${LOCKSTEP_REGISTRATION_ENABLED:-true}
volumes:
– lockstep-data:/data
restart: unless-stopped

volumes:
lockstep-data:

Despliegue con Docker Stack (Swarm)

Guarda el siguiente contenido como stack.yml y ejecuta docker stack deploy -c stack.yml lockstep. Para usar Docker Hub, cambia image a caglaryalcin/lockstep:latest.

version: "3.8"

services:
lockstep:
image: ghcr.io/caglaryalcin/lockstep:latest
ports:
– "4174:4174"
environment:
PORT: "4174"
PSC_SETTINGS_FILE: /data/lockstep-users.json
LOCKSTEP_REGISTRATION_ENABLED: "true"
volumes:
– lockstep-data:/data
deploy:
replicas: 1
restart_policy:
condition: any

volumes:
lockstep-data:

Ejecución local con Node.js

Clona el repositorio, instala dependencias, compila y ejecuta el servidor. La aplicación escucha en el puerto 4174 por defecto; puede cambiarse con la variable PORT.

npm install
npm run build
npm run serve
# Puerto personalizado:
PORT=4174 npm run serve

Build de imagen Docker local

Solo necesario si se desea crear una imagen propia. Ejecuta desde la raíz del proyecto.

docker build -t lockstep .
docker run -d –name lockstep -p 4174:4174 -v lockstep-data:/data lockstep

Acceder al proyecto

Interfaz web

Accede a http://127.0.0.1:4174 (o al puerto configurado) tras iniciar el contenedor o el servidor local. La primera visita permite crear la cuenta inicial; si LOCKSTEP_REGISTRATION_ENABLED=false, solo se permite esa primera cuenta.

Casos de uso

  • Gestión personal de hábitos de seguridad digital (contraseñas, 2FA, actualizaciones, copias de seguridad)
  • Seguimiento de cumplimiento de listas de verificación de seguridad para equipos pequeños
  • Auditoría periódica de postura de seguridad personal con histórico de progreso
  • Despliegue autohospedado para mantener control total sobre datos de seguridad sensibles

Configuración avanzada

Deshabilitar nuevos registros

Establece LOCKSTEP_REGISTRATION_ENABLED=false para permitir solo la cuenta inicial y bloquear registros posteriores. Usuarios existentes siguen pudiendo iniciar sesión.

LOCKSTEP_REGISTRATION_ENABLED=false docker compose up -d
# O en docker run:
docker run -d –name lockstep -p 4174:4174 -v lockstep-data:/data -e LOCKSTEP_REGISTRATION_ENABLED=false ghcr.io/caglaryalcin/lockstep:latest

Personalizar lista de verificación

Edita personal-security-checklist.yml para añadir, modificar o eliminar categorías, elementos y prioridades. Tras los cambios, reconstruye la imagen o ejecuta npm run build en desarrollo local para que los cambios surtan efecto en la build de producción.

# Editar archivo
vim personal-security-checklist.yml
# Reconstruir
npm run build
# O reconstruir imagen Docker
docker build -t lockstep .

Cambiar puerto de escucha

Modifica la variable de entorno PORT en docker-compose.yml, stack.yml o al ejecutar docker run. El contenedor expone el puerto 4174 por defecto.

environment:
PORT: "8080"
# En docker run:
docker run -d -p 8080:8080 -e PORT=8080 …

Ruta de archivo de datos de usuario

La variable PSC_SETTINGS_FILE define la ubicación del archivo JSON que almacena cuentas, hashes de contraseña, ajustes de perfil y progreso. Por defecto es /data/lockstep-users.json. Debe apuntar a una ruta dentro del volumen montado.

environment:
PSC_SETTINGS_FILE: /data/lockstep-users.json

Gestión y mantenimiento

Actualizar imagen

Descarga la última versión de la imagen y reinicia el servicio. Los datos persisten en el volumen lockstep-data.

docker compose pull
docker compose up -d

Ver logs del contenedor

Consulta la salida estándar del servicio para diagnosticar problemas de inicio o ejecución.

docker compose logs -f lockstep

Backup de datos de usuario

Copia el archivo JSON de usuarios desde el volumen. Requiere acceso al host Docker o uso de contenedor auxiliar.

docker run –rm -v lockstep-data:/data -v $(pwd):/backup alpine cp /data/lockstep-users.json /backup/lockstep-users-$(date +%F).json

Comandos de desarrollo

Scripts disponibles en package.json para build, lint, smoke test y servidor de desarrollo.

npm run build # Compila cliente, servidor y tipos
npm run lint # Ejecuta ESLint
npm run smoke # Build + test de humo en producción
npm run fmt # Formatea código con Prettier
npm run fmt.check # Verifica formato

Stack técnico

  • TypeScript
  • Qwik (@builder.io/qwik, @builder.io/qwik-city)
  • Vite
  • Tailwind CSS 4
  • DaisyUI
  • Node.js 26 (runtime en Docker)
  • marked (procesamiento Markdown)
  • sharp (procesamiento de imágenes)
  • undici (cliente HTTP)
  • ESLint + TypeScript ESLint
  • Prettier
  • Docker (multi-stage build con node:26-bookworm-slim)

Referencias oficiales

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *