Files
Onedrive/README.md

254 lines
6.8 KiB
Markdown

# 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 →](MULTI_INSTANCIAS.md)
## 📋 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:
```bash
git clone <tu-repositorio>
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 # 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
```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`