Instalacion y Despliegue
Despliega OpenJornada en tu propia infraestructura en minutos.
Contenido
1. Requisitos previos
Software necesario
- Docker 20.10+ y Docker Compose v2+
- Git para clonar repositorios
- Opcionalmente: Docker Swarm para produccion
Recursos minimos
| Componente | Desarrollo | Produccion |
|---|---|---|
| CPU | 2 cores | 4+ cores |
| RAM | 4 GB | 8+ GB |
| Disco | 20 GB | 50+ GB |
2. Arquitectura del sistema
OpenJornada esta compuesto por los siguientes servicios:
API (FastAPI)
Backend REST API con Python
ghcr.io/openjornada/openjornada-apiAdmin (Next.js)
Panel de administracion
ghcr.io/openjornada/openjornada-adminWebapp (React + Vite)
Aplicacion para trabajadores
ghcr.io/openjornada/openjornada-trabajadoresMongoDB
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)
| Variable | Descripcion | Ejemplo |
|---|---|---|
| MONGODB_URL | URL de conexion MongoDB | mongodb://user:pass@host:27017 |
| SECRET_KEY | Clave para JWT (min 32 chars) | your-secret-key-min-32-characters |
| SMTP_HOST | Servidor SMTP | smtp.gmail.com |
| SMTP_PORT | Puerto SMTP | 587 |
| SMTP_USER | Usuario SMTP | noreply@empresa.com |
| SMTP_PASSWORD | Contrasena SMTP | app-password |
Admin Panel
| Variable | Descripcion |
|---|---|
| NEXT_PUBLIC_API_URL | URL de la API |
| NEXT_PUBLIC_APP_NAME | Nombre de la aplicacion |
| NEXT_PUBLIC_APP_LOGO | Ruta del logo |
Webapp (Trabajadores)
| Variable | Descripcion |
|---|---|
| VITE_API_URL | URL de la API |
| VITE_API_USERNAME | Usuario API para auth JWT |
| VITE_API_PASSWORD | Contrasena API para auth JWT |
| VITE_APP_NAME | Nombre 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 == managerConexion 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 collections8. 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.