diff --git a/.env.example b/.env.example index 63d06c4..29574df 100644 --- a/.env.example +++ b/.env.example @@ -5,6 +5,11 @@ RADICALE_USERNAME=admin RADICALE_PASSWORD=tu_contraseña_segura_aqui +# Configuración de dominios públicos (Coolify) +RADICALE_DOMAIN=radicale.tu-dominio.com +INFCLOUD_DOMAIN=infcloud.tu-dominio.com +COOLIFY_ENTRYPOINTS=https + # Configuración de Red RADICALE_PORT=5232 INFCLOUD_PORT=8090 @@ -14,4 +19,4 @@ TZ=Europe/Madrid # URLs base (no cambiar a menos que sepas lo que haces) RADICALE_BASE_URL=http://localhost:5232 -INFCLOUD_BASE_URL=http://localhost:8090 \ No newline at end of file +INFCLOUD_BASE_URL=http://localhost:8090 diff --git a/README.md b/README.md index 3b47d3b..d070c0e 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,11 @@ INFCLOUD_PORT=8090 # Configuración de Zona Horaria TZ=Europe/Madrid +# Dominios públicos (Coolify) +RADICALE_DOMAIN=radicale.tu-dominio.com +INFCLOUD_DOMAIN=infcloud.tu-dominio.com +COOLIFY_ENTRYPOINTS=https + # URLs base RADICALE_BASE_URL=http://localhost:5232 INFCLOUD_BASE_URL=http://localhost:8090 @@ -130,6 +135,16 @@ docker compose restart radicale - **Ruta principal:** /usuario/ - **SSL:** No (para desarrollo local) +## 🌐 Integración con coolify-proxy + +1. **Define los dominios públicos:** Rellena las variables `RADICALE_DOMAIN`, `INFCLOUD_DOMAIN` y `COOLIFY_ENTRYPOINTS` (por defecto `https`) en `.env`. Mantén `RADICALE_BASE_URL` e `INFCLOUD_BASE_URL` apuntando a las URLs HTTPS finales para que InfCloud genere enlaces correctos. +2. **Genera la configuración de InfCloud:** `make config`. +3. **Asegura la red externa:** Coolify crea una red llamada `coolify-proxy`. Si no existe ejecútalo una vez como root: `docker network create coolify-proxy`. +4. **Ajusta y despliega los servicios:** `docker compose up -d` (o `make start`). Cada servicio se conectará automáticamente tanto a `caldav_net` como a `coolify-proxy` y expondrá las etiquetas Traefik necesarias. +5. **Verifica la conexión a la red de Coolify:** `docker network inspect coolify-proxy | grep -E 'radicale|infcloud'`. +6. **Crea los routers desde Coolify:** Dentro del panel de Coolify > Proxy, declara cada subdominio apuntando al contenedor correspondiente y al puerto interno (`5232` para Radicale, `80` para InfCloud). Traefik detectará los labels y emitirá los certificados usando el resolver indicado. +7. **Pruebas rápidas:** `docker compose ps` para comprobar que ambos contenedores están arriba y `curl -u usuario:contraseña -X PROPFIND https://tu-subdominio-radicale/usuario/ -H "Depth: 0"` para validar la publicación detrás de Coolify. + ## 🐛 Resolución de Problemas ### Error 405 PROPFIND @@ -224,4 +239,4 @@ make restart # Reiniciar servicios **Pruebas realizadas:** - ✅ admin: HTTP 207 Multi-Status - ✅ user1: HTTP 207 Multi-Status -- ✅ Cualquier usuario nuevo funciona automáticamente \ No newline at end of file +- ✅ Cualquier usuario nuevo funciona automáticamente diff --git a/docker-compose.yml b/docker-compose.yml index ffc083e..9a0ecec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,12 @@ services: - "${RADICALE_PORT}:5232" networks: - caldav_net + - coolify-proxy + labels: + - "traefik.enable=true" + - "traefik.http.routers.radicale.rule=Host(`${RADICALE_DOMAIN}`)" + - "traefik.http.routers.radicale.entrypoints=${COOLIFY_ENTRYPOINTS}" + - "traefik.http.services.radicale.loadbalancer.server.port=5232" infcloud: image: nginx:alpine @@ -30,7 +36,15 @@ services: - ./infcloud_config/nginx-simple.conf:/etc/nginx/conf.d/default.conf:ro networks: - caldav_net + - coolify-proxy + labels: + - "traefik.enable=true" + - "traefik.http.routers.infcloud.rule=Host(`${INFCLOUD_DOMAIN}`)" + - "traefik.http.routers.infcloud.entrypoints=${COOLIFY_ENTRYPOINTS}" + - "traefik.http.services.infcloud.loadbalancer.server.port=80" networks: caldav_net: driver: bridge + coolify-proxy: + external: true diff --git a/infcloud_config/config.js b/infcloud_config/config.js index 5fcd359..82f4433 100644 --- a/infcloud_config/config.js +++ b/infcloud_config/config.js @@ -3,7 +3,7 @@ // Configuración según documentación oficial de Radicale // https://github.com/Kozea/Radicale/wiki/Client-InfCloud var globalNetworkCheckSettings = { - href: 'http://localhost:8090/radicale/', + href: 'https://infcloud-h5j23io4jn45.organic-machine.com/radicale/', timeOut: 90000, lockTimeOut: 10000, checkContentType: false, @@ -109,7 +109,7 @@ var globalHideInfoMessageAfter = 3000; // Tiempo en millisegundos para ocultar m var globalDefaultActiveApp = null; var globalSubscribedCalendars = {}; var globalCalendarStartOfBusiness = 8; -var globalCalendarEndOfBusiness = 19; +var globalCalendarEndOfBusiness = 17; var globalAMPMFormat = false; // Persistencia de configuraciones de usuario