Instalacion y Despliegue

Despliega OpenJornada en tu propia infraestructura en minutos.

1. Requisitos previos

Software necesario

  • Docker 20.10+ y Docker Compose v2+
  • Git para clonar repositorios
  • Opcionalmente: Docker Swarm para produccion

Recursos minimos

ComponenteDesarrolloProduccion
CPU2 cores4+ cores
RAM4 GB8+ GB
Disco20 GB50+ GB

2. Arquitectura del sistema

OpenJornada esta compuesto por los siguientes servicios:

API (FastAPI)

Backend REST API con Python

ghcr.io/openjornada/openjornada-api

Admin (Next.js)

Panel de administracion

ghcr.io/openjornada/openjornada-admin

Webapp (React + Vite)

Aplicacion para trabajadores

ghcr.io/openjornada/openjornada-trabajadores

MongoDB

Base de datos

mongo:7-jammy
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   INTERNET                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚
                        โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              Caddy (Reverse Proxy)              โ”‚
โ”‚         SSL automatico + Load Balancing         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚               โ”‚               โ”‚
        โ–ผ               โ–ผ               โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Admin   โ”‚   โ”‚  Webapp   โ”‚   โ”‚    API    โ”‚
โ”‚  :3000    โ”‚   โ”‚   :80     โ”‚   โ”‚   :8000   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                        โ”‚
                                        โ–ผ
                              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                              โ”‚    MongoDB    โ”‚
                              โ”‚    :27017     โ”‚
                              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Docker Compose (desarrollo)

Inicio rapido

# Clonar repositorio
git clone https://github.com/openjornada/openjornada-api.git
cd openjornada-api

# Configurar variables
cp .env.example .env
# Editar .env con tu configuracion

# Iniciar servicios
docker-compose up -d

# Ver logs
docker-compose logs -f

docker-compose.yml basico

version: '3.8'

services:
  mongodb:
    image: mongo:7-jammy
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: changeme123
    volumes:
      - mongodb_data:/data/db
    ports:
      - "27017:27017"

  api:
    image: ghcr.io/openjornada/openjornada-api:latest
    environment:
      - MONGODB_URL=mongodb://admin:changeme123@mongodb:27017
      - SECRET_KEY=your-secret-key-here
    ports:
      - "8000:8000"
    depends_on:
      - mongodb

  admin:
    image: ghcr.io/openjornada/openjornada-admin:latest
    environment:
      - NEXT_PUBLIC_API_URL=http://localhost:8000
    ports:
      - "3001:3000"

  webapp:
    image: ghcr.io/openjornada/openjornada-trabajadores:latest
    environment:
      - VITE_API_URL=http://localhost:8000
      - VITE_API_USERNAME=admin
      - VITE_API_PASSWORD=your-password
    ports:
      - "5173:80"

volumes:
  mongodb_data:

4. Docker Swarm (produccion)

Inicializar Swarm

# Inicializar Swarm (solo primera vez)
docker swarm init

# Crear red overlay
docker network create --driver overlay --attachable frontend

# Desplegar stack
docker stack deploy -c docker-compose.swarm.yml openjornada

# Ver servicios
docker stack services openjornada

# Ver logs de un servicio
docker service logs openjornada_api -f

Actualizar servicios

# Actualizar imagen de un servicio
docker service update --image ghcr.io/openjornada/openjornada-api:1.0.5 openjornada_api

# Forzar actualizacion
docker service update --force openjornada_api

# Rollback si hay problemas
docker service rollback openjornada_api

Alta disponibilidad

Para alta disponibilidad, usa multiples replicas de los servicios web. MongoDB requiere configuracion de replica set para HA.

5. Variables de entorno

API (openjornada-api)

VariableDescripcionEjemplo
MONGODB_URLURL de conexion MongoDBmongodb://user:pass@host:27017
SECRET_KEYClave para JWT (min 32 chars)your-secret-key-min-32-characters
SMTP_HOSTServidor SMTPsmtp.gmail.com
SMTP_PORTPuerto SMTP587
SMTP_USERUsuario SMTPnoreply@empresa.com
SMTP_PASSWORDContrasena SMTPapp-password

Admin Panel

VariableDescripcion
NEXT_PUBLIC_API_URLURL de la API
NEXT_PUBLIC_APP_NAMENombre de la aplicacion
NEXT_PUBLIC_APP_LOGORuta del logo

Webapp (Trabajadores)

VariableDescripcion
VITE_API_URLURL de la API
VITE_API_USERNAMEUsuario API para auth JWT
VITE_API_PASSWORDContrasena API para auth JWT
VITE_APP_NAMENombre de la app

6. Configuracion SSL

Usamos Caddy como reverse proxy. Obtiene certificados SSL automaticamente de Let's Encrypt.

Caddyfile de ejemplo

# Dominio principal
app.tuempresa.com {
    # Admin panel
    handle /admin* {
        reverse_proxy admin:3000
    }

    # API
    handle /api* {
        reverse_proxy api:8000
    }

    # Webapp (default)
    handle {
        reverse_proxy webapp:80
    }
}

# Redirect www a non-www
www.tuempresa.com {
    redir https://app.tuempresa.com{uri} permanent
}

SSL Automatico

Caddy obtiene y renueva certificados SSL automaticamente. Solo asegurate de que tu dominio apunte a la IP del servidor.

7. MongoDB

Configuracion recomendada

# docker-compose.yml
mongodb:
  image: mongo:7-jammy
  environment:
    MONGO_INITDB_ROOT_USERNAME: admin
    MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    MONGO_INITDB_DATABASE: openjornada
  volumes:
    - mongodb_data:/data/db
    - mongodb_config:/data/configdb
  deploy:
    placement:
      constraints:
        - node.role == manager

Conexion desde CLI

# Conectar a MongoDB
docker exec -it openjornada_mongodb mongosh

# Autenticar
use admin
db.auth("admin", "password")

# Ver bases de datos
show dbs

# Usar base de datos
use openjornada

# Ver colecciones
show collections

8. Crear primer usuario

Despues de desplegar, crea el primer usuario administrador usando el CLI de la API.

Crear usuario admin

# Acceder al contenedor de la API
docker exec -it openjornada_api bash

# Crear usuario administrador
python -m api.manage_api_users create admin admin@empresa.com admin

# Se te pedira una contrasena

# Verificar que se creo
python -m api.manage_api_users list

Otros comandos utiles

# Ver usuarios
python -m api.manage_api_users list

# Cambiar contrasena
python -m api.manage_api_users password admin

# Cambiar rol
python -m api.manage_api_users role admin tracker

# Activar/desactivar usuario
python -m api.manage_api_users toggle admin

Siguiente paso

Una vez creado el usuario admin, accede al panel de administracion y crea tu primera empresa y trabajadores.

Instalacion OpenJornada - Docker, Kubernetes y Self-Hosted