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.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]

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.
> **✨ 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
```

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"