# 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](MULTI_INSTANCIAS.md) > - 🎯 **Despliegue en Dokploy** con gestión centralizada → [Guía Dokploy](DOKPLOY.md) > - 🔒 **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 →](DOKPLOY.md)** ### 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 1. Clona el repositorio: ```bash git clone cd onedrive ``` 2. Copia el archivo de configuración de ejemplo: ```bash cp .env.example .env ``` 3. Edita el archivo `.env` con tus credenciales: ```bash # Linux/Mac nano .env # Windows notepad .env ``` 4. Rellena todas las variables requeridas: ```env 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 ``` 5. Inicia los servicios: ```bash docker-compose up -d ``` 6. Verifica el estado: ```bash 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: ```bash # 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](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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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`