Files
calendario_contactos/README.md
T
2025-11-13 01:11:01 +01:00

227 lines
7.1 KiB
Markdown

# Calendario de Contactos - CalDAV/CardDAV
Sistema completo de calendario y contactos usando Radicale e InfCloud con Docker.
## 🚀 Configuración Rápida
1. **Configurar variables de entorno:**
```bash
make setup
# Edita el archivo .env con tus credenciales
```
2. **Iniciar servicios:**
```bash
make start
```
3. **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
```bash
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`:
```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:
```bash
# 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:
1. Edita `config/users` con el nuevo hash bcrypt
2. Actualiza `.env` con la nueva contraseña
3. Regenera configuración: `make config`
4. 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
```bash
make status # Verificar estado de servicios
make logs # Ver logs para errores
make test-connection # Probar conexión directa
```
### Regenerar todo
```bash
make clean # Limpiar configuración
make config # Regenerar config.js
make restart # Reiniciar servicios
```
## 📋 Verificación Post-instalación
1. **Servicios ejecutándose:**
```bash
make status
```
2. **Conexión a Radicale:**
```bash
make test-connection
```
3. **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
4. **Verificar que no hay errores 405:**
```bash
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 `.env` fuera del control de versiones
- ✅ Usar contraseñas seguras y únicas
- ✅ Configurar HTTPS en producción
## 📚 Referencias
- [Radicale Documentation](https://radicale.org/v3.html)
- [InfCloud Documentation](https://www.inf-it.com/open-source/clients/infcloud/)
- [CalDAV RFC](https://tools.ietf.org/html/rfc4791)
- [CardDAV RFC](https://tools.ietf.org/html/rfc6352)
## 🎯 Problemas Resueltos
### ✅ Error PROPFIND 405 Method Not Allowed
**Problema:** InfCloud enviaba peticiones PROPFIND a `/caldav.php/` que devolvían error 405.
**Solución:**
1. Configuración nginx con proxy que redirige peticiones CalDAV a Radicale
2. Rewrite rules para traducir rutas `/caldav.php/` y `/radicale/` a rutas nativas de Radicale
3. Headers CORS completos para WebDAV
4. 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:**
1. Sistema de variables de entorno con `.env` y `.env.example`
2. Generación automática de `config.js` desde template
3. Makefile para automatizar tareas comunes
4. 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:**
1. **Login dinámico:** Los usuarios ingresan sus credenciales en la pantalla de login
2. **Múltiples usuarios:** Soporte para admin, user1, user2, etc.
3. **Nginx universal:** Maneja rutas para cualquier usuario (`/usuario/`)
4. **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