OneDrive Engine

Sistema automatizado para la renovación de Microsoft E5 usando Docker, compuesto por dos servicios principales que trabajan en conjunto.

Nueva Característica: Este proyecto ahora soporta ejecutar múltiples instancias en la misma máquina sin conflictos de puertos. Ver documentación →

📋 Descripción

Este proyecto implementa un sistema de dos contenedores Docker:

  • odengin: Motor principal que gestiona la renovación automática de Microsoft E5
  • odcron: Servicio de tareas programadas que se comunica con el motor principal

Características

Soporte para múltiples instancias en la misma máquina
Configuración con variables de entorno (.env)
Redes Docker aisladas por instancia
Health checks automáticos
Reinicio automático de servicios
Fácil de escalar y mantener

🚀 Inicio Rápido

Prerrequisitos

  • Docker
  • Docker Compose
  • Credenciales de Microsoft E5:
    • Client ID
    • Client Secret
    • Refresh Token

Instalación

  1. Clona el repositorio:
git clone <tu-repositorio>
cd onedrive
  1. Copia el archivo de configuración de ejemplo:
cp .env.example .env
  1. Edita el archivo .env con tus credenciales:
# Linux/Mac
nano .env

# Windows
notepad .env
  1. Rellena todas las variables requeridas:
E5_CLIENT_ID=tu_client_id
E5_CLIENT_SECRET=tu_client_secret
E5_REFRESH_TOKEN=tu_refresh_token
WEB_APP_PASSWORD=tu_password_segura
E5_WEB_APP_PASSWORD=tu_e5_password
CRON_PASSWORD=tu_cron_password
CRON_REFRESH_TOKEN=tu_cron_refresh_token
  1. Inicia los servicios:
docker-compose up -d
  1. Verifica el estado:
docker-compose ps
docker-compose logs -f

⚙️ Configuración

Archivo .env

El archivo .env contiene todas las variables de entorno necesarias. Nunca debes:

  • Subir .env a Git
  • Compartir .env públicamente
  • Guardar credenciales en el código

El archivo .env.example se incluye como referencia para documentar qué variables se necesitan.

Variables de Entorno

Servicio odengin

Variable Descripción Requerida Variable de Entorno
E5_CLIENT_ID Client ID de Microsoft Azure E5_CLIENT_ID
E5_CLIENT_SECRET Client Secret de Azure E5_CLIENT_SECRET
E5_REFRESH_TOKEN Token de renovación E5_REFRESH_TOKEN
WEB_APP_PASSWORD Contraseña de la aplicación web WEB_APP_PASSWORD
E5_WEB_APP_PASSWORD Contraseña adicional E5 E5_WEB_APP_PASSWORD

Servicio odcron

Variable Descripción Requerida Variable de Entorno
IP del motor Dirección del motor (formato: host:puerto) CRON_IP
Contraseña Contraseña de autenticación CRON_PASSWORD
Token de renovación Token de renovación CRON_REFRESH_TOKEN

Puertos

  • 8089: Puerto expuesto del servicio odengin (mapea al 8080 interno)
  • Para múltiples instancias, usa puertos diferentes: 8089, 8090, 8091, etc.

🚀 Múltiples Instancias

Este proyecto está diseñado para ejecutar múltiples instancias en la misma máquina:

# Instancia 1 - Puerto 8089
COMPOSE_PROJECT_NAME=instancia1 ENGINE_PORT=8089 docker-compose up -d

# Instancia 2 - Puerto 8090
COMPOSE_PROJECT_NAME=instancia2 ENGINE_PORT=8090 docker-compose up -d

# Instancia 3 - Puerto 8091
COMPOSE_PROJECT_NAME=instancia3 ENGINE_PORT=8091 docker-compose up -d

Ver documentación completa de múltiples instancias: MULTI_INSTANCIAS.md

📁 Estructura del Proyecto

onedrive/
├── docker-compose.yml      # Orquestación de servicios (multi-instancia)
├── README.md              # Este archivo
├── MULTI_INSTANCIAS.md    # Guía para ejecutar múltiples instancias
├── .env.example           # Plantilla de configuración
├── .gitignore             # Archivos a ignorar
├── cron/                  # Servicio de tareas programadas
│   ├── Dockerfile
│   ├── requirements.txt
│   ├── script.py
│   └── README.md
└── engine/                # Motor principal
    ├── Dockerfile
    └── README.md

🔧 Comandos Útiles

Gestión de Contenedores

# Iniciar servicios
docker-compose up -d

# Detener servicios
docker-compose down

# Ver logs en tiempo real
docker-compose logs -f

# Ver logs de un servicio específico
docker-compose logs -f odengin
docker-compose logs -f odcron

# Reiniciar servicios
docker-compose restart

# Reconstruir imágenes
docker-compose build --no-cache
docker-compose up -d

Monitoreo

# Estado de los contenedores
docker-compose ps

# Inspeccionar un contenedor
docker inspect odengin

# Acceder al shell de un contenedor
docker exec -it odengin /bin/bash
docker exec -it odcron /bin/bash

🔍 Troubleshooting

El servicio odengin no inicia

  • Verifica que las credenciales de E5 sean correctas
  • Revisa los logs: docker-compose logs odengin
  • Asegúrate de que el puerto 8089 no esté en uso

El servicio odcron no se conecta

  • Verifica que odengin esté corriendo: docker-compose ps
  • Confirma que la variable IP apunte a odengin:8080
  • Revisa la configuración de la red: docker network inspect onedrive_odeng-net

Problemas de red entre contenedores

# Verificar conectividad
docker exec -it odcron ping odengin

🛡️ Seguridad

Gestión de Credenciales

HACER:

  • Usar archivo .env para variables sensibles
  • Incluir .env en .gitignore
  • Compartir solo .env.example con placeholders
  • Cambiar contraseñas por defecto
  • Restringir permisos del archivo .env: chmod 600 .env
  • Usar secretos de Docker/Kubernetes en producción

NO HACER:

  • Nunca subir .env a Git
  • No guardar credenciales en el código
  • No compartir .env por mensajes o email
  • No usar contraseñas débiles
  • No hacer commit accidental de .env

Verificar antes de subir

# Asegurate de que .env NO está en Git
git status

# Si fue agregado accidentalmente:
git rm --cached .env
git commit --amend -m "Remove .env from repository"

📝 Notas

  • Los contenedores se reinician automáticamente (restart: unless-stopped)
  • La comunicación entre servicios usa la red interna odeng-net
Description
No description provided
Readme 124 KiB
Languages
Shell 64.3%
Dockerfile 35.7%