diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ac73cd1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,55 @@ +# Git +.git +.gitignore +.gitattributes + +# CI/CD +.github +.gitlab-ci.yml + +# Documentation +*.md +docs/ + +# Environment files +.env +.env.* +!.env.example + +# IDE +.vscode +.idea +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +*.egg-info/ +dist/ +build/ + +# Logs +*.log +logs/ + +# Node +node_modules/ +npm-debug.log + +# Docker +docker-compose.yml +docker-compose.*.yml +Dockerfile +.dockerignore + +# Other instances +instancia*/ diff --git a/.gitignore b/.gitignore index 7c4229e..2127741 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ .env .env.local .env.*.local +.env.inst* +.env.instancia* # IDE .vscode/ @@ -14,6 +16,10 @@ # Docker docker-compose.override.yml +# Multiple instances directories +instancia*/ +inst*/ + # Python __pycache__/ *.py[cod] diff --git a/DOKPLOY.md b/DOKPLOY.md new file mode 100644 index 0000000..fb88222 --- /dev/null +++ b/DOKPLOY.md @@ -0,0 +1,400 @@ +# 🚀 Despliegue en Dokploy + +Esta guía explica cómo desplegar múltiples instancias de OneDrive Engine en Dokploy. + +## 📋 ¿Qué es Dokploy? + +Dokploy es una plataforma de gestión de aplicaciones que simplifica el despliegue de contenedores Docker. Automáticamente maneja: + +- Nombres únicos de contenedores +- Redes aisladas por proyecto +- Variables de entorno +- SSL/TLS con Let's Encrypt +- Dominios y subdominios +- Monitoreo y logs + +## 🎯 Ventajas de usar Dokploy + +✅ **Interfaz Web**: Gestiona todo desde el navegador +✅ **Multi-instancia**: Cada proyecto es independiente +✅ **Sin conflictos**: Dokploy maneja puertos y nombres automáticamente +✅ **Variables de entorno**: Configuración segura desde la UI +✅ **Logs centralizados**: Ver logs de todas las instancias en un lugar +✅ **Actualizaciones fáciles**: Rebuild y redeploy con un clic + +## 🔧 Preparación + +### Prerrequisitos + +1. Servidor con Dokploy instalado +2. Acceso a la UI de Dokploy +3. Repositorio Git (opcional, pero recomendado) + +### Estructura del Proyecto + +Asegúrate de que tu proyecto tenga esta estructura: + +``` +onedrive/ +├── docker-compose.dokploy.yml # Compose para Dokploy +├── docker-compose.yml # Compose local/tradicional +├── .env.example +├── engine/ +│ └── Dockerfile +└── cron/ + └── Dockerfile +``` + +## 📦 Método 1: Deploy desde Git (Recomendado) + +### Paso 1: Sube el proyecto a Git + +```bash +# Inicializar repositorio (si no existe) +git init +git add . +git commit -m "Initial commit" + +# Subir a GitHub/GitLab/Gitea +git remote add origin +git push -u origin main +``` + +### Paso 2: Crear Proyecto en Dokploy + +1. Accede a Dokploy: `https://tu-servidor:3000` +2. Clic en **"New Project"** +3. Nombre del proyecto: `onedrive-instancia1` (o el nombre que prefieras) +4. Clic en **"Create Project"** + +### Paso 3: Crear Aplicación (Compose) + +1. Dentro del proyecto, clic en **"New Service"** +2. Selecciona **"Docker Compose"** +3. Configura: + - **Name**: `e5-renewal` + - **Repository**: Tu URL de Git + - **Branch**: `main` + - **Compose File Path**: `docker-compose.dokploy.yml` + - **Build Path**: `./` (raíz del repo) + +### Paso 4: Configurar Variables de Entorno + +En la sección **"Environment Variables"**, agrega: + +```env +# Credenciales E5 +E5_CLIENT_ID=tu_client_id_aqui +E5_CLIENT_SECRET=tu_client_secret_aqui +E5_REFRESH_TOKEN=tu_refresh_token_aqui + +# Contraseñas +WEB_APP_PASSWORD=tu_password_segura +E5_WEB_APP_PASSWORD=tu_e5_password + +# Cron +CRON_PASSWORD=tu_cron_password +CRON_REFRESH_TOKEN=tu_cron_refresh_token + +# Puerto (opcional, Dokploy puede asignar automáticamente) +ENGINE_PORT=8089 +``` + +### Paso 5: Deploy + +1. Clic en **"Deploy"** +2. Dokploy automáticamente: + - Clona el repositorio + - Construye las imágenes + - Inicia los contenedores + - Configura la red + +### Paso 6: Configurar Dominio (Opcional) + +1. En la aplicación, ve a **"Domains"** +2. Agrega un dominio: `onedrive1.tudominio.com` +3. Dokploy configurará SSL automáticamente + +## 📦 Método 2: Deploy Manual (Docker Compose) + +### Paso 1: Crear Proyecto en Dokploy + +1. Nuevo proyecto: `onedrive-instancia1` +2. New Service → **"Docker Compose"** +3. Selecciona **"Custom Compose"** + +### Paso 2: Pegar Docker Compose + +Copia el contenido de `docker-compose.dokploy.yml` en el editor. + +### Paso 3: Configurar Variables de Entorno + +Igual que en el Método 1. + +### Paso 4: Deploy + +Clic en **"Deploy"**. + +## 🔄 Múltiples Instancias en Dokploy + +Para gestionar múltiples cuentas de E5, crea **proyectos separados**: + +### Configuración Recomendada + +| Proyecto Dokploy | Cuenta E5 | Puerto | Dominio (opcional) | +| ------------------ | --------------- | ------ | -------------------- | +| `onedrive-cuenta1` | Cuenta personal | 8089 | `e5-1.tudominio.com` | +| `onedrive-cuenta2` | Cuenta trabajo | 8090 | `e5-2.tudominio.com` | +| `onedrive-cuenta3` | Cuenta familiar | 8091 | `e5-3.tudominio.com` | + +### Crear Nueva Instancia + +1. **Duplicar Proyecto**: + + - Clic en el menú del proyecto → **"Clone Project"** + - Nuevo nombre: `onedrive-cuenta2` + +2. **Actualizar Variables**: + + - Ir a Environment Variables + - Cambiar todas las credenciales E5 + - Cambiar `ENGINE_PORT` (ej: 8090) + +3. **Deploy**: + - Clic en "Deploy" + +Repite para cada cuenta adicional. + +## 📊 Gestión desde Dokploy UI + +### Ver Logs + +1. Navega al proyecto +2. Selecciona el servicio (`odengin` o `odcron`) +3. Clic en **"Logs"** +4. Logs en tiempo real con búsqueda y filtros + +### Reiniciar Servicios + +1. En el servicio, clic en **"Restart"** +2. O **"Rebuild"** para reconstruir desde cero + +### Monitoreo + +1. Dashboard del proyecto muestra: + - Estado de contenedores + - Uso de recursos (CPU, RAM) + - Tráfico de red + +### Actualizar Código + +1. Haz push de cambios a Git +2. En Dokploy, clic en **"Rebuild & Deploy"** +3. Dokploy pull, rebuild y redeploy automáticamente + +## 🔒 Seguridad en Dokploy + +### Mejores Prácticas + +✅ **Variables de Entorno**: + +- Usa la UI de Dokploy para variables sensibles +- No las incluyas en el compose file + +✅ **Dominios con SSL**: + +- Dokploy genera certificados Let's Encrypt automáticamente +- Fuerza HTTPS para todas las conexiones + +✅ **Redes Aisladas**: + +- Cada proyecto tiene su propia red Docker +- Los servicios no pueden comunicarse entre proyectos + +✅ **Control de Acceso**: + +- Configura usuarios con permisos específicos +- Usa autenticación de dos factores + +## 🛠️ Configuración Avanzada + +### Usar Registry Privado + +Si construyes imágenes previamente: + +```yaml +services: + odengin: + image: ghcr.io/tuusuario/onedrive-engine:v1.0 + # No necesitas 'build' si usas imagen pre-construida +``` + +Variables de entorno en Dokploy: + +```env +REGISTRY=ghcr.io +IMAGE_OWNER=tuusuario +IMAGE_TAG=v1.0 +``` + +### Health Checks Personalizados + +Dokploy respeta los health checks del compose: + +```yaml +healthcheck: + test: ["CMD-SHELL", "wget --spider http://localhost:8080/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s +``` + +### Límites de Recursos + +Agrega en el compose file: + +```yaml +services: + odengin: + deploy: + resources: + limits: + cpus: "0.5" + memory: 512M + reservations: + cpus: "0.25" + memory: 256M +``` + +## 🔍 Troubleshooting + +### El servicio no inicia + +1. **Revisar logs**: + + - Dokploy UI → Service → Logs + - Busca errores de inicio + +2. **Verificar variables**: + + - Asegúrate de que todas las variables requeridas están configuradas + - Revisa por typos en nombres de variables + +3. **Rebuild**: + - Intenta "Rebuild & Deploy" para forzar reconstrucción + +### Puertos en conflicto + +Dokploy maneja esto automáticamente, pero si necesitas puertos específicos: + +1. Asigna puertos únicos en cada proyecto +2. O deja que Dokploy asigne puertos aleatorios +3. Usa dominios en lugar de puertos + +### No puedo acceder al servicio + +1. **Verifica el estado**: + + - Dashboard → Service Status debe ser "Running" + +2. **Revisa el firewall**: + + ```bash + # En el servidor + sudo ufw allow 8089/tcp + ``` + +3. **Usa dominios**: + - Más fácil que gestionar puertos + - Dokploy configura proxy reverso automáticamente + +### Actualización no se refleja + +1. **Force rebuild**: + - Clic en "Rebuild & Deploy" (no solo "Deploy") +2. **Limpia cache**: + - En algunas versiones de Dokploy: Settings → "Clear Build Cache" + +## 📋 Checklist de Deploy + +Antes de crear una nueva instancia: + +- [ ] Nombre único de proyecto +- [ ] Repositorio Git configurado (o compose manual) +- [ ] Todas las variables de entorno configuradas +- [ ] Puerto único asignado (o dominio configurado) +- [ ] Credenciales E5 correctas y válidas +- [ ] Build context correcto (`./`) +- [ ] Compose file path correcto + +Después del deploy: + +- [ ] Estado del servicio es "Running" +- [ ] Logs no muestran errores críticos +- [ ] Health check pasa (si está configurado) +- [ ] Puedes acceder al servicio (puerto o dominio) + +## 💡 Tips Pro + +### 1. Usa Git Tags para Versiones + +```bash +git tag -a v1.0 -m "Version 1.0" +git push origin v1.0 +``` + +En Dokploy, configura el branch a `v1.0` para deploys estables. + +### 2. Organiza con Etiquetas + +En el compose, agrega labels: + +```yaml +labels: + - "com.dokploy.project=onedrive" + - "com.dokploy.environment=production" + - "com.dokploy.owner=admin" +``` + +### 3. Automatiza con Webhooks + +1. Dokploy UI → Service → Webhooks +2. Copia la URL del webhook +3. En GitHub: Settings → Webhooks → Add webhook +4. Paste URL, selecciona eventos (push, release) +5. Ahora cada push redeploya automáticamente + +### 4. Backup de Variables + +Exporta variables de entorno periódicamente: + +1. Settings → Export Configuration +2. Guarda el JSON de forma segura +3. Úsalo para restaurar o clonar proyectos + +### 5. Monitoreo Externo + +Integra con herramientas como: + +- **Uptime Kuma**: Para monitoreo de uptime +- **Grafana**: Para métricas avanzadas +- **Prometheus**: Para alertas + +## 🔗 Recursos + +- [Dokploy Docs](https://docs.dokploy.com) +- [Docker Compose Reference](https://docs.docker.com/compose/compose-file/) +- [Microsoft E5 Auto-Renewal](https://github.com/TheCaduceus/Microsoft-E5-Auto-Renewal) + +## 📝 Resumen + +Con Dokploy puedes: + +1. **Crear proyecto** → Asignar nombre único +2. **Configurar compose** → Desde Git o manual +3. **Agregar variables** → Desde la UI segura +4. **Deploy** → Con un clic +5. **Repetir** → Para múltiples instancias + +Cada instancia es completamente independiente y se gestiona desde una interfaz centralizada. 🎉 diff --git a/DOKPLOY_QUICK.md b/DOKPLOY_QUICK.md new file mode 100644 index 0000000..776c60c --- /dev/null +++ b/DOKPLOY_QUICK.md @@ -0,0 +1,109 @@ +# Guía Rápida de Dokploy + +## 🚀 Deploy en 5 Minutos + +### 1. Preparar el Repositorio + +```bash +# Asegúrate de que todo esté commiteado +git add . +git commit -m "Preparar para Dokploy" +git push +``` + +### 2. Crear Proyecto en Dokploy + +1. Accede a Dokploy: `https://tu-servidor:3000` +2. **New Project** → Nombre: `onedrive-cuenta1` +3. **New Service** → **Docker Compose** + +### 3. Configurar el Servicio + +**Repository Settings:** + +- Git URL: `https://github.com/tuusuario/onedrive-engine.git` +- Branch: `main` +- Compose File: `docker-compose.dokploy.yml` +- Build Path: `./` + +**Environment Variables:** + +```env +E5_CLIENT_ID=tu_client_id +E5_CLIENT_SECRET=tu_client_secret +E5_REFRESH_TOKEN=tu_refresh_token +WEB_APP_PASSWORD=password123 +E5_WEB_APP_PASSWORD=e5password123 +CRON_PASSWORD=cronpass123 +CRON_REFRESH_TOKEN=cron_refresh_token +ENGINE_PORT=8089 +``` + +### 4. Deploy + +Clic en **"Deploy"** → Espera ~2-3 minutos → ✅ Listo! + +--- + +## 📋 Checklist Pre-Deploy + +- [ ] Repositorio Git actualizado +- [ ] `docker-compose.dokploy.yml` en la raíz +- [ ] Dockerfiles en `engine/` y `cron/` +- [ ] Credenciales E5 válidas preparadas +- [ ] Puerto único decidido (8089, 8090, etc.) + +--- + +## 🔄 Para Múltiples Instancias + +**Opción A: Clonar Proyecto en Dokploy** + +1. Proyecto existente → Menu → **Clone Project** +2. Nuevo nombre: `onedrive-cuenta2` +3. Cambiar variables de entorno (especialmente credenciales y puerto) +4. Deploy + +**Opción B: Crear Nuevo Proyecto** + +Repite los pasos 1-4 con: + +- Diferente nombre de proyecto +- Diferentes credenciales E5 +- Diferente `ENGINE_PORT` + +--- + +## 🌐 Configurar Dominio (Opcional) + +1. En el servicio → **Domains** +2. Add Domain: `e5-cuenta1.tudominio.com` +3. Dokploy configura SSL automáticamente +4. Accede via HTTPS: `https://e5-cuenta1.tudominio.com` + +--- + +## 📊 Tabla de Instancias Recomendada + +| Proyecto Dokploy | Puerto | Dominio | Cuenta E5 | +| ---------------- | ------ | ---------------- | --------- | +| onedrive-cuenta1 | 8089 | e5-1.example.com | Personal | +| onedrive-cuenta2 | 8090 | e5-2.example.com | Trabajo | +| onedrive-cuenta3 | 8091 | e5-3.example.com | Familiar | + +--- + +## 🛠️ Comandos Útiles en Dokploy + +- **Ver Logs**: Service → Logs +- **Reiniciar**: Service → Restart +- **Rebuild**: Service → Rebuild & Deploy +- **SSH al Contenedor**: Service → Terminal + +--- + +## 🔗 Enlaces + +- Documentación completa: [DOKPLOY.md](DOKPLOY.md) +- Múltiples instancias local: [MULTI_INSTANCIAS.md](MULTI_INSTANCIAS.md) +- README principal: [README.md](README.md) diff --git a/README.md b/README.md index 4528eca..1759be1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,11 @@ 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) +> **✨ 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 @@ -14,13 +18,26 @@ Este proyecto implementa un sistema de dos contenedores Docker: ### 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 -## 🚀 Inicio Rápido +## 🎯 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 @@ -139,17 +156,19 @@ COMPOSE_PROJECT_NAME=instancia3 ENGINE_PORT=8091 docker-compose up -d ``` 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 +├── 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 +└── engine/ # Motor principal ├── Dockerfile └── README.md ``` diff --git a/docker-compose.dokploy.yml b/docker-compose.dokploy.yml new file mode 100644 index 0000000..ac21495 --- /dev/null +++ b/docker-compose.dokploy.yml @@ -0,0 +1,62 @@ +--- +# Docker Compose for Dokploy +# Dokploy automáticamente maneja: +# - Nombres únicos de contenedores por proyecto +# - Redes aisladas +# - Variables de entorno desde la UI + +services: + odengin: + build: + context: ./engine + dockerfile: Dockerfile + image: ${REGISTRY:-ghcr.io}/${IMAGE_OWNER:-user}/onedrive-engine:${IMAGE_TAG:-latest} + environment: + - E5_CLIENT_ID=${E5_CLIENT_ID} + - E5_CLIENT_SECRET=${E5_CLIENT_SECRET} + - E5_REFRESH_TOKEN=${E5_REFRESH_TOKEN} + - WEB_APP_PASSWORD=${WEB_APP_PASSWORD} + - E5_WEB_APP_PASSWORD=${E5_WEB_APP_PASSWORD} + ports: + - "${ENGINE_PORT:-8089}:8080" + restart: unless-stopped + networks: + - onedrive-net + healthcheck: + test: + [ + "CMD-SHELL", + "wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1", + ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + labels: + - "com.dokploy.project=onedrive" + - "com.dokploy.service=engine" + + odcron: + build: + context: ./cron + dockerfile: Dockerfile + image: ${REGISTRY:-ghcr.io}/${IMAGE_OWNER:-user}/onedrive-cron:${IMAGE_TAG:-latest} + environment: + - IP=odengin:8080 + - PASSWORD=${CRON_PASSWORD} + - REFRESH_TOKEN=${CRON_REFRESH_TOKEN} + restart: unless-stopped + networks: + - onedrive-net + depends_on: + odengin: + condition: service_healthy + labels: + - "com.dokploy.project=onedrive" + - "com.dokploy.service=cron" + +networks: + onedrive-net: + driver: bridge + labels: + - "com.dokploy.project=onedrive"