230 lines
4.9 KiB
Markdown
230 lines
4.9 KiB
Markdown
# 🔧 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 <container-name> /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 <network-name>
|
|
|
|
# Verificar que ambos contenedores estén en la red
|
|
```
|
|
|
|
### Test de Conectividad
|
|
|
|
```bash
|
|
# Desde el contenedor odcron
|
|
docker exec -it <odcron-container> /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
|