Foro QNAP en español

Full Version: Servidor Baikal de calendarios y contactos
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hola

En este post vamos a ver como desplegar un docker de Baikal.
Baikal es una aplicación web que permite a varios usuarios alojar sus citas e calendarios y sus contactos no dependiendo de servidores de terceros.

No es una aplicación pesada ya que en realidad en ella sólo se gestionan los datos que envíen los equipos clientes y hay una pequeña gestión web para crear usuarios.

Se que hay un qpkg para la aplicación en MyQnap.org , pero pide tiene una dependencia de Apache84. Y ese Apache84 es un paquete de pago de 16€. 

En nuestro caso no tenemos esa dependencia y el costo es 0€  Wink

Requisitos:
1-tener instalado Container Station para poder lanzar dockers
2-tener instalada y activa una BBDD MariaDB o MySQL.
3-tener una carpeta compartida o subcarpeta dentro de una compartida para dejar datos de forma persistente
3-tener acceso a la consola de comandos de la NAS.

Requisitos recomendables:
1-tener una dns publica para acceder a la nas desde el exterior.
2-tener un dominio para gestionar nuestros dns. Los hay baratos sobre los 12€ al año (si vas a adquirir revisa las renovaciones)
3-usar un proxy inverso tipo nginx para aportar un certificado http y un extra de seguridad
4-tener Cloudflare web como gestor de nuestros dns, para ocultar nuestra ip pública real

Para el punto 1, es importante no estar bajo CGNAT, ya que no podríamos acceder desde el exterior haca nuestra nas.
Para el punto 2, he preferido usar nginx proxy manager, pero podemos usar traefik o bien el integrado en la nas.

Los datos que generemos van a estar repartidos en dos ubicaciones:
-la base de datos de MariaDB
-la carpeta persistente

Lo indico ya que deberemos hacer copia de seguridad de ambos contenidos.
Siempre debemos tener copias de seguridad de nuestros datos, que luego vienen los sustos  Wink


Indice

1-Creación de la base de datos y un usuario en MariaDB
2-Creación y despliegue del docker
3-Accesos web y creación de usuarios en Baikal
4-Accesos desde el exterior
5-Configuración de clientes en móvil IOs
6-Configuración de clientes en móvil Android
7-Configuración de clientes en Thunderbird




1-Creación de la base de datos y el usuario en MariaDB

Estoy dando por supuesto que ya tenemos instalada y activa la aplicación MariaDB en nuestra nas. Pero podríamos tenerla en otra máquina distinta.

Para este ejemplo usaré MariaDB10

[attachment=3702]

En este caso el puerto que se usa es el 3307, pero puede ser otro.

Se puede hacer la gestión de MariaDB enteramente por consola ssh, pero es mas gráfico y comprensible si lo hacemos por entorno gráfico.
Para ello usaremos la aplicación PhpMyAdmin instalabre desde nuestro App Center.

En su momento ya se describió en este otro post de creación de una BBDD en MariaDB usando PhpMyAdmin


Para este caso vamos a crear una base de datos bacía de nombre "baikal_db" y un usuario "baikal" con permisos en esa base de datos desde cualquier host (%). 
La clave será una de nuestra elección. Apuntad estos tres datos ya que posteriormente hemos de usarlos.

Pongo unas capturas del proceso

Nos logueamos en 
[attachment=3703]

En la pantalla principal, pulso sobre el botón de agregar una nueva base de datos
[attachment=3704]

Le doy nombre y la creo. En este caso "baikal_db"

[attachment=3705]

Me aparecerá en la lista de la izquierda

[attachment=3706]

Ahora crearemos un usuario para esa base de datos de nombre "baikal" y contraseña "clave_de_baikal"
Para ello selecciono la base de datos de "baikal_db" de la izquierda y después selecciono la lengüeta de privilegios.
En la parte inferior de la pantalla está la opción de "Agregar cuenta de usuario"

[attachment=3707]

Asignamos nombre, clave y permisos

[attachment=3708]

[attachment=3709]

Pulsamos luego sobre continuar y ya tenemos nuestro usuario con los permisos adecuados.

[attachment=3710]

Ya podemos cerrar PhpMyAdmin.


2-Creación y despliegue del docker

Aquí usaremos la consola de ssh para lanzar el siguiente comando de creación del docker
Code:
docker run -d --name baikal --restart unless-stopped -p 18080:80 -v /share/DockerData/baikal/data:/var/www/baikal/Specific -v /share/DockerData/baikal/config:/var/www/baikal/config ckulka/baikal:nginx

El comando usa dos carpetas persistentes que están apuntando a un carpeta compartida de nuestra nas. En el ejemplo la carpeta compartida es "DockerData".
En su interior de forma automática se creará la carpeta "baikal" y dentro de ellas las de "data" y "config"

He puesto como puerto de publicación el 18080, pero puede ser cualquiera de nuestra elección que no esté por otros servicios.

En la consola veremos la descarga, descompresión e instalación del docker

[attachment=3711]

Tras este proceso veremos una pantalla similar a la siguiente

[attachment=3712]

Y con esto hemos acabado de instalar el contenedor.

3-Accesos web y creación de usuarios en Baikal

Si lo hemos hecho bien, abrimos un navegador y si vamos a http://ip_nas:18080 veremos el asistente de la primera configuración:

[attachment=3713]

Vamos rellenando los datos y los adaptamos a nuestra instalación.
Pondremos una clave de usuario administrador que debemos apuntar ya que la usaremos para crear mas usuarios de Baikal en un futuro.

[attachment=3714]

Ahora pasamos a la base de datos, que por defecto usa sqlite.
La cambiamos a Mysql y rellenamos con los datos que pusimos en MariaDB.

[attachment=3716]

El motivo de usar MariaDB frente a sqlite, es que su motor es mas ágil si tenemos volúmenes importantes de datos y permite una mejro gestión de copias de seguridad.

Una vez acabado el asistente, este no vuelve a estar disponible.

[attachment=3715]

Una vez salgamos del asistente y nos identifiquemos en la web, veremos siguiente dashboard:

[attachment=3717]

En el menú superior elegimos usuarios y recursos para agregar una nuevo

[attachment=3718]

Para el ejemplo creo al usuario "usuario" con su clave.

[attachment=3719]

[attachment=3720]

Por defecto se han creado un calendario pro defecto y una agenda de direcciones por defecto.

Podremos crear nuevas desde los equipos clientes o bien crearlas desde la web

Para crear un calendario de "viajes" lo haríamos de la siguiente forma:

[attachment=3721]

[attachment=3722]

En el campo tokenID puedo poner cualquier cadena única en minúsculas. 
Para no complicarlo uso el nombre del calendario en minúsculas. Una vez creado NO puede ser modificado

[attachment=3723]

He activado el uso de notas en las citas.

Y una vez creado, lo veremos en la lista

[attachment=3724]

Podemos operar de forma similar con la agenda de contactos.
Lo normal para todos es tener una única agenda de contactos, pero puede haber usuarios que quieran tener mas de una.
Por ejemplo para tener una personal y una laboral.

Con esto ya hemos acabado con la gestión de usuarios y ya tenemos operativo nuestro servidor caldav y cardav.


4-Accesos desde el exterior

Ahora mismo nuestro servidor sólo es accesible si estamos en la misma red que la nas.

Si no tenemos un dominio propio podemos acceder a Baikal mediante una VPN (Wireguard u OpenVPN)
Es decir podríamos acceder al servidor Baikal como si estuviésemos en la red de la nas.

Si tenemos un dominio personal y tenemos nuestra gestión de dns. Podemos definir una nueva que apunte a nuestra ip publica.
Y para agregar una capa de seguridad debemos usar un proxy inverso (Nginx, Traefik, el de QTS)  que nos aporta el certificado

En función de que usemos o no los accesos desde el exterior, tendremos las siguientes direcciones para acceder a los calendarios y agendas.

Aquí tenemos las del primer calendario que es el de defecto.
http://ip_nuestra_nas:18080/dav.php/cale...o/default/
https://baikal.mi_dominio.eus/dav.php/ca...o/default/

Las direcciones del calendario de viajes son:
http://ip_nuestra_nas:18080/dav.php/cale...io/viajes/
https://baikal.mi_dominio.eus/dav.php/ca...io/viajes/

Las direcciones de la agenda de defecto son:
http://ip_nuestra_nas:18080/dav.php/addr...o/default/
http://baikal.mi_dominio.eus/dav.php/add...o/default/

y como credenciales usaremos "usuario" y la clave que definimos anteriormente.

Cuando lo configuremos en clientes de correo podemos usar las genéricas:
http://ip_nuestra_nas:18080/dav.php/addressbookst
http://baikal.mi_dominio.eus/dav.php/addressbooks

http://ip_nuestra_nas:18080/dav.php/calendars
https://baikal.mi_dominio.eus/dav.php/calendars

En esto últimos casos, la aplicación cliente nos mostrará y permitirá seleccionar que calendarios o agendas queremos agregar.




5-Configuración de clientes en móvil IOs

Para agregar los calendarios o agendas en iOS iremos a Ajustes y buscaremos "cuentas" o "cuentas de Mail" en función de la versión de iOS.

Pulsamos añadir cuentas y seleccionamos de la lista la inferior "otras".

De ahí seleccionamos "Añadir cuenta CardDav"

[attachment=3726]

Rellenamos los datos del usuario y su clave. En la dirección del servidor pondremos
"ip_nas:18080/dav.php" donde ip_nas es la ip privada de la nas

[attachment=3727]

Como estamos sin https, nos dará un aviso de ssl ya que internamente no está activado.

[attachment=3728]

la cuenta será verificada

[attachment=3729]

Y luego ya estará agregada

[attachment=3730]

Para hacer una comprobación rápida compruebo desde el gestor web que el "usuario" NO tiene contactos

[attachment=3731]

Ahora desde el móvil agregamos uno

[attachment=3732]

Y si vamos de nuevo al entorno web veremos que ha aumentado el número de contactos del usuario "usuario".

[attachment=3733]

Para los calendarios es muy simular ya que hemos de ir al mismo menú de cuentas pero hay que agregar "Añadir cuenta CalDAV"

[attachment=3734]

Introducimos los datos de dirección ("ip_nas:18080/dav.php" donde ip_nas es la ip privada de la nas) , usuario y clave

[attachment=3735]

Nos da el aviso para que lo intente sin ssl.

[attachment=3736]

Se hace la comprobación

[attachment=3737]

Nos ha activado citas y recordatorios

[attachment=3738]

Ahora ya vemos que ha sido agregada y podemos agregar citas desde iOS
[attachment=3739]

6-Configuración de clientes en móvil Android

Sorprendentemente Android NO integra de forma nativa los calendarios CalDAV y la libretas de direcciones CardDAV.

Pero hay programas que si lo hacen como DAVx5 (gracias pepebetis por recomendarlo Wink )  que permite sincronizar con cuentas de Google, Apple y otros CalDAV como Baikal.

Tras instalarlo comienza su asistente, donde introduciremos la dirección, el nombre de usuario, la clave.

Tendremos que dar permisos a la aplicación para que pueda acceder a calendarios y contactos.
Un resumen de capturas se ve en la siguiente secuencia de imágenes

 [attachment=3753]

(No he podido ponerlas por separado ya que el post tiene un límite de 50 imágenes)

En la captura 12 se ve que nos aparece en la aplicación de contactos el de "pruebas" que es el que teníamos previamente en Baikal

7-Configuración de clientes en Thunderbird

Thunderbird es un programa cliente de correo gratuito y en mi opinión uno de los mejores.
Soporta muchos tipos de servidores de correo, calendarios y contactos. 
Además hay una infinidad de complementos que lo potencian.
En las últimas versiones ya se incorpora de forma nativa la gestión de los estándares CalDAV y CardDAV.

7.1-Agregando calendarios
La pantalla principal donde podemos ver los calendarios es la siguiente:
En el ejemplo vemos uno local llamado Casa

[attachment=3740]

Para agregar uno nuevo pulsamos en la parte inferior izquierda en "Nuevo calendario"

Se nos abre un asistente donde primero elegimos un calendario "En la red"

[attachment=3741]

Después rellenamos con los datos del nombre del usuario y la dirección de calendario ( en este caso interna de nuestra red)

[attachment=3742]

Después nos pedirá la contraseña de las anteriores credenciales

[attachment=3743]

Tras aceptar nos presentará todos los calendarios del usuario "usuario".
Lo normal es incorporar todos, pero podemos elegir los que nos interesen.

[attachment=3744]

Después ya podemos ver que en la lista de calendarios ya tenemos disponibles los que hemos agregados

[attachment=3745]

7.2 Agregando la agenda de contactos

El proceso es similar al de los calendarios.
La pantalla de gestión de contactos y agendas es la siguiente:

[attachment=3746]

Pulsamos en el botón de agregar agenda y se no presenta un desplegable de tipo. 
Elegimos "Añadir libreta de direcciones CardDAV"

[attachment=3747]

Después empieza el asistente con la siguiente ventana, donde escribimos el nombre del usuario de la cuenta y la dirección de servidor Baikal
En este caso al ser local es http://ip_nas:18080/dav.php

[attachment=3748]

Luego nos pide la clave del usuario "usuario"

[attachment=3749]

A continuación se nos presenta una ventana para que seleccionemos las libretas disponibles en esa cuenta.
En nuestro caso sólo hay una.

[attachment=3750]

Tras pulsar el botón de continuar ya veremos que hay una nueva libreta de direcciones llamada "Default Address Book".
Evidentemente podemos darle otro nombre, haciendo clic con el botón secundario, propiedades y escribir el nuevo nombre.

Tras la adicción ya vemos la nueva agenda y el único contacto de pruebas que creamos anteriormente.

[attachment=3752]


En este post he detallado algo mas lo de los programa clientes de iOS, Android y Thunderbird.

Thunderbird al ser un programa de los mas estándar, nos permite hacer de conversor/intermediario de otros calendarios ya que con un copia pega podemos hacerlo entre calendarios/contactos.

Mi recomendación si tenéis un historial importante en otros servidores es que:
-exportéis en formato ICS desde el servidor origen
-importéis en un nuevo calendario local temporal de Thunderbird
-copiéis de ese calendario local al calendario de red (Baikal CalDAV en nuestro caso)