OneDrive Engine
Sistema automatizado para la renovación de Microsoft E5 usando Docker, compuesto por dos servicios principales que trabajan en conjunto.
✨ Características Destacadas:
- 🚀 Múltiples instancias en la misma máquina sin conflictos → Documentación
- 🎯 Despliegue en Dokploy con gestión centralizada → Guía Dokploy
- 🔒 Variables de entorno seguras con archivos
.env
📋 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
✅ Compatible con Dokploy para gestión centralizada
✅ 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
🎯 Métodos de Despliegue
Opción 1: Dokploy (Recomendado para múltiples instancias)
Gestiona múltiples instancias desde una interfaz web con SSL, dominios y monitoreo.
📖 Ver guía completa de Dokploy →
Opción 2: Docker Compose Local
Despliegue tradicional en tu máquina local o servidor.
👇 Continúa leyendo esta guía para instalación local.
Prerrequisitos
- Docker
- Docker Compose
- Credenciales de Microsoft E5:
- Client ID
- Client Secret
- Refresh Token
Instalación
- Clona el repositorio:
git clone <tu-repositorio>
cd onedrive
- Copia el archivo de configuración de ejemplo:
cp .env.example .env
- Edita el archivo
.envcon tus credenciales:
# Linux/Mac
nano .env
# Windows
notepad .env
- 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
- Inicia los servicios:
docker-compose up -d
- 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
.enva Git - ❌ Compartir
.envpú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 # Compose para despliegue local/tradicional
├── docker-compose.dokploy.yml # Compose optimizado para Dokploy
├── README.md # Este archivo
├── DOKPLOY.md # Guía completa para Dokploy
├── MULTI_INSTANCIAS.md # Guía para múltiples instancias locales
├── .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
IPapunte aodengin: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
.envpara variables sensibles - ✅ Incluir
.enven.gitignore - ✅ Compartir solo
.env.examplecon 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
.enva Git - ❌ No guardar credenciales en el código
- ❌ No compartir
.envpor 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