calnedario iniciado
This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user