3ca5f1b29f44c5dc72bb12dcaacd9965757275ed
Calendario de Contactos - CalDAV/CardDAV
Sistema completo de calendario y contactos usando Radicale e InfCloud con Docker.
🚀 Configuración Rápida
-
Configurar variables de entorno:
make setup # Edita el archivo .env con tus credenciales -
Iniciar servicios:
make start -
Acceder a la aplicación:
- InfCloud: http://localhost:8090/ (o http://localhost:8090/infcloud/)
- Radicale: http://localhost:5232/
📁 Estructura del Proyecto
calendario_contactos/
├── .env # Variables de entorno (no incluir en git)
├── .env.example # Plantilla de variables de entorno
├── docker-compose.yml # Configuración de servicios
├── Makefile # Comandos de gestión
├── config/ # Configuración de Radicale
│ ├── config # Configuración principal de Radicale
│ └── users # Usuarios y contraseñas (bcrypt)
├── data/ # Datos persistentes de Radicale
└── infcloud_config/ # Configuración de InfCloud
├── config.js # Configuración generada (no editar)
├── config.js.template # Plantilla de configuración
└── nginx-infcloud.conf # Configuración nginx
🛠️ Comandos Disponibles
make help # Mostrar ayuda
make setup # Configuración inicial (copia .env.example)
make start # Generar config e iniciar servicios
make stop # Detener servicios
make restart # Reiniciar servicios
make config # Regenerar config.js desde .env
make status # Mostrar estado de servicios
make test-connection # Probar conexión con Radicale
make logs # Mostrar logs de todos los servicios
make logs-infcloud # Mostrar logs solo de InfCloud
make logs-radicale # Mostrar logs solo de Radicale
make clean # Limpiar configuración generada
⚙️ Variables de Entorno
Configura estas variables en tu archivo .env:
# Configuración de Radicale
RADICALE_USERNAME=admin
RADICALE_PASSWORD=tu_contraseña_segura_aqui
# Configuración de Red
RADICALE_PORT=5232
INFCLOUD_PORT=8090
# Configuración de Zona Horaria
TZ=Europe/Madrid
# URLs base
RADICALE_BASE_URL=http://localhost:5232
INFCLOUD_BASE_URL=http://localhost:8090
🔧 Servicios
Radicale (CalDAV/CardDAV Server)
- Puerto: 5232
- Función: Servidor CalDAV/CardDAV que almacena calendarios y contactos
- Configuración:
/config/config - Datos:
/data/collections
InfCloud (Web Client)
- Puerto: 8090
- Función: Cliente web para calendarios y contactos
- URL: http://localhost:8090/ (también disponible en /infcloud/)
- Configuración: Generada automáticamente desde
.env
PHP-FPM
- Función: Soporte PHP para InfCloud (si es necesario)
🔐 Gestión de Usuarios
Agregar un nuevo usuario:
# Generar hash de contraseña para cualquier usuario
python3 -c "import crypt; print('nombre_usuario:' + crypt.crypt('contraseña', crypt.mksalt(crypt.METHOD_BLOWFISH)))" >> config/users
# Ejemplo para crear usuario 'juan':
python3 -c "import crypt; print('juan:' + crypt.crypt('mi_password', crypt.mksalt(crypt.METHOD_BLOWFISH)))" >> config/users
# Reiniciar Radicale
docker compose restart radicale
Usuarios de ejemplo:
- admin: kIKTu4rI5MBBJjTqujbCp61ZFN30Y8adI
- user1: password123
Cambiar contraseña:
- Edita
config/userscon el nuevo hash bcrypt - Actualiza
.envcon la nueva contraseña - Regenera configuración:
make config - Reinicia servicios:
make restart
📱 Acceso desde Dispositivos
Android (DAVx5)
- URL CalDAV: http://tu-servidor:5232/usuario/
- URL CardDAV: http://tu-servidor:5232/usuario/
- Usuario: tu_usuario
- Contraseña: tu_contraseña
iOS (Configuración nativa)
- Servidor: tu-servidor
- Puerto: 5232
- Ruta principal: /usuario/
- SSL: No (para desarrollo local)
🐛 Resolución de Problemas
Error 405 PROPFIND
✅ Solucionado: Configuración nginx con proxy y rewrite rules
Error 401 Unauthorized
- Verifica credenciales en
.env - Regenera config:
make config - Verifica usuario en
config/users
Error de conexión
make status # Verificar estado de servicios
make logs # Ver logs para errores
make test-connection # Probar conexión directa
Regenerar todo
make clean # Limpiar configuración
make config # Regenerar config.js
make restart # Reiniciar servicios
📋 Verificación Post-instalación
-
Servicios ejecutándose:
make status -
Conexión a Radicale:
make test-connection -
Acceso a InfCloud:
- Navegar a http://localhost:8090/
- Login dinámico: Cualquier usuario puede iniciar sesión
- Usuarios disponibles: admin, user1, o cualquier usuario que agregues
-
Verificar que no hay errores 405:
curl -u usuario:contraseña -X PROPFIND http://localhost:8090/caldav.php/usuario/ -H "Depth: 0" -v 2>&1 | grep "HTTP" # Debe devolver: HTTP/1.1 207 Multi-Status
🔒 Seguridad
- ❌ NO hardcodear contraseñas en archivos de configuración
- ✅ Usar variables de entorno (
.env) - ✅ Mantener
.envfuera del control de versiones - ✅ Usar contraseñas seguras y únicas
- ✅ Configurar HTTPS en producción
📚 Referencias
🎯 Problemas Resueltos
✅ Error PROPFIND 405 Method Not Allowed
Problema: InfCloud enviaba peticiones PROPFIND a /caldav.php/ que devolvían error 405.
Solución:
- Configuración nginx con proxy que redirige peticiones CalDAV a Radicale
- Rewrite rules para traducir rutas
/caldav.php/y/radicale/a rutas nativas de Radicale - Headers CORS completos para WebDAV
- Sistema de variables de entorno para configuración segura
✅ Configuración de Credenciales Segura
Problema: Contraseñas hardcodeadas en archivos de configuración.
Solución:
- Sistema de variables de entorno con
.envy.env.example - Generación automática de
config.jsdesde template - Makefile para automatizar tareas comunes
- Hash bcrypt para almacenamiento seguro de contraseñas
✅ Soporte Multi-Usuario Dinámico
Funcionalidad: InfCloud ahora soporta múltiples usuarios con login dinámico.
Características:
- Login dinámico: Los usuarios ingresan sus credenciales en la pantalla de login
- Múltiples usuarios: Soporte para admin, user1, user2, etc.
- Nginx universal: Maneja rutas para cualquier usuario (
/usuario/) - Configuración automática: InfCloud detecta usuarios automáticamente
Pruebas realizadas:
- ✅ admin: HTTP 207 Multi-Status
- ✅ user1: HTTP 207 Multi-Status
- ✅ Cualquier usuario nuevo funciona automáticamente
Description
Languages
JavaScript
93.1%
CSS
3.4%
HTML
3%
Shell
0.4%