236 lines
6.1 KiB
Markdown
236 lines
6.1 KiB
Markdown
# OneDrive Engine
|
|
|
|
Sistema automatizado para la renovación de Microsoft E5 usando Docker, compuesto por dos servicios principales que trabajan en conjunto.
|
|
|
|
## 📋 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
|
|
|
|
## 🏗️ Arquitectura
|
|
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐
|
|
│ odcron │────────>│ odengin │
|
|
│ (Scheduler) │ HTTP │ (Engine) │
|
|
│ Port: N/A │ │ Port: 8080 │
|
|
└─────────────────┘ └─────────────────┘
|
|
```
|
|
|
|
Los servicios se comunican a través de una red Docker privada (`odeng-net`).
|
|
|
|
## 🚀 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)
|
|
|
|
## 📁 Estructura del Proyecto
|
|
|
|
```
|
|
onedrive/
|
|
├── docker-compose.yml # Orquestación de servicios
|
|
├── README.md # Este archivo
|
|
├── cron/ # Servicio de tareas programadas
|
|
│ ├── Dockerfile
|
|
│ ├── docker-compose.yml
|
|
│ ├── requirements.txt
|
|
│ ├── script.py
|
|
│ └── README.md
|
|
└── engine/ # Motor principal
|
|
├── Dockerfile
|
|
├── docker-compose.yml
|
|
└── 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`
|