# 🔧 Solución de Problemas - Dokploy ## ❌ Error: `[Errno 2] No such file or directory` ### Causa El Dockerfile intentaba copiar `script.py` pero el archivo no existía en el directorio `cron/`. ### ✅ Solución Aplicada 1. **Creado `script.py`** en el directorio `cron/` 2. **Actualizado Dockerfiles** para mejor logging con flag `-u` (unbuffered output) 3. **Mejorado healthcheck** para no depender de wget/curl ### 📝 Archivos Corregidos - ✅ `cron/script.py` - Creado - ✅ `cron/Dockerfile` - Actualizado con `-u` flag - ✅ `engine/Dockerfile` - Actualizado con `-u` flag - ✅ `docker-compose.dokploy.yml` - Healthcheck mejorado ### 🚀 Cómo Proceder en Dokploy 1. **Commitea los cambios**: ```bash git add . git commit -m "Fix: Add missing script.py and improve Dockerfiles" git push ``` 2. **En Dokploy UI**: - Ve a tu proyecto - Clic en **"Rebuild & Deploy"** (no solo "Deploy") - Esto forzará rebuild de las imágenes con los nuevos archivos 3. **Verifica los logs**: - Service → Logs - Deberías ver: `"Running initial test..."` --- ## 🔍 Otros Problemas Comunes ### 1. Build Context Incorrecto **Síntoma**: `Cannot find Dockerfile` o `No such file or directory` durante build **Solución**: - En Dokploy: Build Path debe ser `./` (raíz del repo) - Compose File Path: `docker-compose.dokploy.yml` ### 2. Variables de Entorno No Cargadas **Síntoma**: Servicios inician pero fallan al conectarse **Solución**: - Verifica que TODAS estas variables estén configuradas: ``` E5_CLIENT_ID E5_CLIENT_SECRET E5_REFRESH_TOKEN WEB_APP_PASSWORD E5_WEB_APP_PASSWORD CRON_PASSWORD CRON_REFRESH_TOKEN ``` ### 3. Healthcheck Falla **Síntoma**: El servicio se reinicia constantemente **Solución**: - Aumenta `start_period` a 60s o más - Verifica que el puerto 8080 esté correcto - Revisa logs para errores de inicio ### 4. odcron No Puede Conectarse a odengin **Síntoma**: Logs de cron muestran "Connection refused" **Solución**: - Verifica que ambos servicios estén en la misma red - IP debe ser `odengin:8080` (nombre del servicio, no localhost) - Espera a que el healthcheck de odengin pase ### 5. Puerto Ya en Uso **Síntoma**: `Address already in use` o `port is already allocated` **Solución**: - Cambia `ENGINE_PORT` en variables de entorno - O elimina el puerto y usa dominios de Dokploy --- ## 📊 Checklist de Deploy Exitoso Antes de hacer deploy: - [ ] Todos los archivos están en Git y pusheados - [ ] `script.py` existe en `cron/` - [ ] Dockerfiles tienen `CMD ["python", "-u", ...]` - [ ] Variables de entorno configuradas en Dokploy UI - [ ] Build Path: `./` - [ ] Compose File: `docker-compose.dokploy.yml` Después del deploy: - [ ] Ambos servicios muestran estado "Running" - [ ] Healthcheck pasa (ícono verde) - [ ] Logs de odengin muestran inicio exitoso - [ ] Logs de odcron muestran "Running initial test..." - [ ] No hay errores de conexión en logs --- ## 🔬 Debug Avanzado ### Ver Logs en Tiempo Real En Dokploy UI: 1. Service → Logs 2. Activa "Follow" (auto-scroll) 3. Busca por "error", "exception", "failed" ### SSH al Contenedor ```bash # Desde Dokploy UI: Service → Terminal # O desde SSH del servidor: docker exec -it /bin/bash # Verificar archivos ls -la /app # Verificar proceso Python ps aux | grep python # Test manual del script cd /app python -u script.py ``` ### Verificar Red Docker ```bash # Listar redes docker network ls | grep onedrive # Inspeccionar red docker network inspect # Verificar que ambos contenedores estén en la red ``` ### Test de Conectividad ```bash # Desde el contenedor odcron docker exec -it /bin/bash ping odengin wget -O- http://odengin:8080 ``` --- ## 💡 Tips Pro ### 1. Unbuffered Output La flag `-u` en Python es crucial para Dokploy: ```dockerfile CMD ["python", "-u", "script.py"] ``` Sin ella, los logs pueden no aparecer en tiempo real. ### 2. Healthcheck Realista El healthcheck actual usa Python nativo (siempre disponible): ```yaml test: [ "CMD-SHELL", 'python -c ''import urllib.request; urllib.request.urlopen("http://localhost:8080")'' || exit 1', ] ``` ### 3. Start Period Generoso Dale tiempo al servicio de iniciar: ```yaml start_period: 60s # 60 segundos antes de empezar healthchecks ``` ### 4. Logs Estructurados El script usa `logging` de Python: ```python logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') ``` Esto hace los logs más legibles en Dokploy. --- ## 📞 Necesitas Más Ayuda? 1. **Revisa logs completos**: Service → Logs → Download 2. **Verifica configuración**: Service → Settings 3. **Rebuild limpio**: Service → "Clear Build Cache" → Rebuild Si el problema persiste, comparte: - Logs completos (últimas 50 líneas) - Variables de entorno configuradas (sin valores sensibles) - Output del build