Agregar soporte para múltiples instancias en la configuración del proyecto, actualizando .gitignore, README.md, DOKPLOY.md, DOKPLOY_QUICK.md y docker-compose.dokploy.yml; además, se crea un nuevo archivo .dockerignore.

This commit is contained in:
2025-12-07 12:33:16 -05:00
parent 418348c54c
commit e69d2414b9
6 changed files with 660 additions and 9 deletions

55
.dockerignore Normal file
View File

@@ -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*/

6
.gitignore vendored
View File

@@ -2,6 +2,8 @@
.env .env
.env.local .env.local
.env.*.local .env.*.local
.env.inst*
.env.instancia*
# IDE # IDE
.vscode/ .vscode/
@@ -14,6 +16,10 @@
# Docker # Docker
docker-compose.override.yml docker-compose.override.yml
# Multiple instances directories
instancia*/
inst*/
# Python # Python
__pycache__/ __pycache__/
*.py[cod] *.py[cod]

400
DOKPLOY.md Normal file
View File

@@ -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 <tu-repositorio-url>
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. 🎉

109
DOKPLOY_QUICK.md Normal file
View File

@@ -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)

View File

@@ -2,7 +2,11 @@
Sistema automatizado para la renovación de Microsoft E5 usando Docker, compuesto por dos servicios principales que trabajan en conjunto. 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 ## 📋 Descripción
@@ -14,13 +18,26 @@ Este proyecto implementa un sistema de dos contenedores Docker:
### Características ### Características
✅ Soporte para múltiples instancias en la misma máquina ✅ Soporte para múltiples instancias en la misma máquina
✅ Compatible con Dokploy para gestión centralizada
✅ Configuración con variables de entorno (`.env`) ✅ Configuración con variables de entorno (`.env`)
✅ Redes Docker aisladas por instancia ✅ Redes Docker aisladas por instancia
✅ Health checks automáticos ✅ Health checks automáticos
✅ Reinicio automático de servicios ✅ Reinicio automático de servicios
✅ Fácil de escalar y mantener ✅ 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 ### Prerrequisitos
@@ -139,9 +156,11 @@ COMPOSE_PROJECT_NAME=instancia3 ENGINE_PORT=8091 docker-compose up -d
``` ```
onedrive/ onedrive/
├── docker-compose.yml # Orquestación de servicios (multi-instancia) ├── docker-compose.yml # Compose para despliegue local/tradicional
├── docker-compose.dokploy.yml # Compose optimizado para Dokploy
├── README.md # Este archivo ├── README.md # Este archivo
├── MULTI_INSTANCIAS.md # Guía para ejecutar múltiples instancias ├── DOKPLOY.md # Guía completa para Dokploy
├── MULTI_INSTANCIAS.md # Guía para múltiples instancias locales
├── .env.example # Plantilla de configuración ├── .env.example # Plantilla de configuración
├── .gitignore # Archivos a ignorar ├── .gitignore # Archivos a ignorar
├── cron/ # Servicio de tareas programadas ├── cron/ # Servicio de tareas programadas

View File

@@ -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"