Pues después de que escribiese la entrada Joplin, apunta notas y tareas. Sincronízalas donde quieras vengo a explicar las diferentes fases de uso por las que pasé.
Empecé sincronizando las notas con Dropbox, luego contraté un año de Joplin Cloud por necesidad para compartir algunas cosas en el trabajo y así agilizar procesos.
Pero enseguida vi que para el uso que quería darle, se quedaba algo limitado. así que pagué un año pero realmente lo usé dos meses. Empecé a necesitar compartir libretas con otras personas y para hacerlo mediante Joplin Cloud tendríamos que estar todos suscritos a un plan de pago.
El usuario principal (el que puede compartir libretas), tendría que tener el plan pro, que cuesta 57.48€ anuales, y el resto de usuarios tendría que tener el básico que sale por 28.69€.
Como ves, esto tiene varios problemas. el usuario básico no tiene la posibilidad de crear libretas compartidas. Y aunque yo tuviese el pro, me costaría mucho convencer a la gente que se animase a probar una aplicación, teniendo en cuenta estas limitaciones de entrada y si encima tienen que hacer un pago después de los 14 días de prueba nunca darían el paso.
Hay que tener en cuenta que los precios son algo caros porque la cuenta básica solo permite tener 2 GB de almacenamiento y la pro 30. Que también te digo, seguro que no lo lleno. Con archivos adjuntos el máximo que he ocupado son 20 megas y sin ellos estoy usando menos de 2.
Tengo unas 700 notas y 49 libretas con sus correspondientes sublibretas. Seguiré donando al proyecto anualmente. Pero las barreras de entrada para montar un sistema de notas colaborativo entre usuarios no es viable. Si lo vas a usar únicamente a nivel personal con el plan básico es más que suficiente porque permite compartir notas públicamente.
Aunque use el servidor he visto que tiene alguna limitación. Por ejemplo, no se pueden compartir libretas entre diferentes servidores al estilo Mastodon. Así que si tienes a alguien que quiere compartirte alguna libreta, y no quieres dejarle tus notas privadas, tendrías que crearte una cuenta a parte en ese otro servidor y usar dos perfiles, manteniendo tus notas en tu método de almacenamiento preferido.
Así que nada, vamos al lío. Voy a explicarte cómo lo he echo yo montando el Joplin Server en mi Raspberry Pi y después los errores que cometí al principio y cómo luego los solucioné. También lo dejo a modo de notas por si en un futuro tengo que volver a montarlo todo en otra instalación.
Estoy haciendo una prueba con los bloques de acordeón y de código, así que si estás suscrito por RSS, email o por el fediverso, cuéntame si tienes problemas para desplegar y contraer las secciones y al copiar diferentes fragmentos.
Actualizar el sistema:
sudo apt update && sudo apt upgrade -y
Instalar Docker y Docker Compose (si no los tenemos instalados ya):
curl -fsSL https://get.docker.com | sh sudo apt install docker-compose -y
Se puede instalar docker-compose desde los repositorios oficiales. Me pareció ver en la documentación que estos no se actualizaban con tanta frecuencia, así que me decidí por los otros. También por si a corto plazo no cambio de versión de Debian, puede ser una forma de que sigan llegando nuevas versiones.
Crear un directorio para Joplin Server:
mkdir ~/joplin-server && cd ~/joplin-server
Crearemos el archivo docker-compose.yml con la siguiente configuración:
services:
db: # base de datos
image: postgres:13
container_name: nombre de la base de datos.db
restart: unless-stopped
volumes:
- ./postgres-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=tu contraseña
- POSTGRES_USER=tu usuario
- POSTGRES_DB=el que quieras
joplin-server:
image: joplin/server:latest
container_name: joplin-server
depends_on:
- db
expose:
- "22300"
environment:
- APP_PORT=22300
- APP_BASE_URL=https://subdominio.dominio.com
- DB_CLIENT=pg
- POSTGRES_PASSWORD=Contraseña de la base de datos
- POSTGRES_DATABASE=nombre de la base de datos
- POSTGRES_USER=usuario
- POSTGRES_HOST=db
# Configuración de correo (Gmail con contraseña de aplicación)
- MAILER_ENABLED=1
- MAILER_HOST=smtp.gmail.com
- MAILER_PORT=587
- MAILER_SECURITY=starttls
- MAILER_AUTH_USER=correo@gmail.com
- MAILER_AUTH_PASSWORD=contraseña de aplicación
- MAILER_NOREPLY_NAME=Joplin Server
- MAILER_NOREPLY_EMAIL=correo@gmail.com
restart: unless-stopped
npm: # Nginx Proxy Manager
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80" # web
- "81:81" # panel de administración
- "443:443" # SSl
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
El unless-stopped sirve para que los contenedores se levanten cuando reiniciamos.
Los parámetros de la base de datos en el servicio db y joplin-server tienen que coincidir. Usuario, contraseña y nombre de la base de datos.
- Activar la verificación en dos pasos en tu cuenta de Gmail. Lo más probable es que ya lo esté.
- Crear una contraseña de aplicación en tu cuenta de Google.
- Entra en Seguridad > Contraseñas de aplicaciones.
- Selecciona «Correo» y «Otro (nombre personalizado)», puedes ponerle
Joplin. - Copia la contraseña generada.
- Selecciona «Correo» y «Otro (nombre personalizado)», puedes ponerle
- Pon esa contraseña en el campo
MAILER_AUTH_PASSWORDde tu archivodocker-compose.yml.
En el directorio donde está el docker-compose.yml, ejecutaremos:
docker-compose up -d
Esto tardará bastante la primera vez, porque tendrá que descargar todas las imágenes. Cuando termine, podremos verificar que los contenedores se levantan con:
docker ps
Una vez levantamos los contenedores, si podemos acceder al panel de administración del proxy significará que la cosa está saliendo bien y vamos por buen camino. Entraremos a:http://IP_RASPBERRY:81
- Usuario inicial: admin@example.com
- Contraseña: changeme
(pedirá cambiarla al entrar).
- Crear un Proxy Host nuevo con estos parámetros:
- Domain Name:
subdominio.dominio.com - Forward Hostname / IP:
joplin-server - Forward Port:
22300 - Scheme:
http - Activar opción
Block Common Exploits - En la pestaña SSL, seleccionar
Request a new SSL Certificate (Let’s Encrypt) y activar Force SSL.
- Domain Name:
Con esto, el proxy inverso gestiona el tráfico HTTPS y lo envía al puerto de Joplin Server.
- 80 (HTTP): necesario para que Let’s Encrypt valide y renueve
certificados SSL. - 443 (HTTPS): para el acceso seguro a Joplin Server.
- Accede desde un navegador a:
htpps://subdominio.dominio.com y comprueba que carga la página de Joplin Server y que puedes acceder con las credenciales. Por defecto, el usuario es admin@localhost y la contraseña admin. (tendrás que cambiarlos). - Verifica que los correos (invitaciones, cambios de email, etc.) se envían correctamente a través de Gmail. Una vez tengas acceso, para las altas de nuevos usuarios, puedes hacerlo con la cuenta de administración desde admin > Users.
Una vez creadas las cuentas, haz una copia de seguridad de las notas, ya sea en alguna nube o creando un archivo .jex con todas las notas. en el cliente de Joplin (PC o móvil), en Sincronización tendrás que indicar:
- En opciones (Control+,) > objetivo de sincronización, marcaremos Joplin Server
- URL:
https://subdominio.dominio.com - usuario: correo electrónico
- Contraseña: la que hayamos definido.
Estos comandos se pueden ejecutar sin ningún nombre, lo que actuará sobre todos los servicios. Si especificamos un argumento sólo se actuará en ese.
Antes de actualizar detendremos el servicio:
docker compose down joplin-server
Una vez esté parado, ejecutamos
docker compose pull joplin-server
Después tendríamos que levantar el contenedor que hemos actualizado con:
docker-compose up joplin-server
También podemos hacerlo actualizándolo todo, esto incluiría base de datos, Joplin Server y Proxy, aunque es más probable que nos aparezca algún error.
docker compose down && docker compose pull && docker compose up -d
Cuando las actualizaciones se hacen correctamente las imágenes antiguas se quedan ocupando mucho espacio. Se pueden borrar ejecutando
docker system prune -a
Mi primer intento fue con la tarjeta Sd que tenía, pero se quedaba pequeña y me quedé sin poder hacerlo. Así que Para empezar, como Docker consume bastante, tuve que comprar una tarjeta SD de 128 GB.
- El primer error fue configurarlo sin el proxy. Al hacerlo así el puerto quedaba expuesto y la forma de entrar era a través de subdominio.dominio.com:22300. Si se va a usar a nivel individual puede ser suficiente, pero en cuanto se comparten notas con otros usuarios o se invita a gente a nuestro servidor no queda bien y no es seguro. Fue un puerto que abrí un rato y lo cerré cuando me di cuenta al compartir mi primera nota por la URL que aparecía.
- El segundo fue configurar el nombre del contenedor de Joplin Server como app, ya que al actualizar se me olvidaba cómo lo llamé. Hubiese sido más fácil poniendo el nombre correctamente desde el principio.
- Cuando ya tenía los puertos saliendo por https, me di cuenta que no podía crear invitaciones a otros usuarios, ni modificar el correo de mi cuenta de administrador ni resetear las contraseñas. Esto era porque no tenía configurado una cuenta para enviar los correos electrónicos.
- Al configurar el Nginx Proxy Manager, lo hice en la misma imagen donde estoy cargando todo lo demás. Esto si no se montan otros servicios no tiene por qué ser un problema. Pero si decidimos tener otros servidores quizá sea más práctico instalarlo en local o en otro contenedor. Simplemente me pareció la opción más sencilla en su momento porque no tenía que configurar también las tareas de renovación de certificados.
- Poner todos los datos de puertos y contraseñas en el docker-compose. Después descubrí que hay otras soluciones como crear un archivo .env a parte en el que se especifiquen estos datos. La verdad que con esto podemos elegir mil opciones y complicarnos hasta donde queramos. Vi este artículo de Atareao que para mis conocimientos es demasiado: ¡Deja de usar contraseñas en tus Docker Compose! Descubre Podman Secrets
Tengo pendiente automatizar un sistema de guardado de la base de datos, pero todavía no me he puesto a ello. No sé si lo documentaré por aquí, porque creo que esta entrada ha quedado demasiado técnica para lo que suelen ser habitualmente.
Deja un comentario