594 - Federación con GoToSocial en Docker

594 - Federación con GoToSocial en Docker

Como levantar de forma sencilla tu propio servicio de #microblogging ligero y federar con #mastodon utilizando #gotosocial y #docker en #linux

1:25
-3:15

Sin lugar a dudas, la culpa de que finalmente, haya levantado una instancia en el Fediverso, recae única y exclusivamente en Gabriel del podcast Sobre la marcha y de Ernesto del podcast Como pienso digo. Y es que después de haberlos oído a ambos, hablar sobre sus propias instanacias de mastodon, me he visto empujado a saborear la aventura. Sin embargo, mi aproximación ha sido distinta, dado que no he levantado una instancia de Mastodon sino que finalmente me he decidido por levantar una instancia de GoToSocial. Así, en este episodio del podcast, te cuento, el que y el porque de GoToSocial, como puedes levantar tu propia instancia, y mi propia experiencia por supuesto.

Federación con GoToSocial en Docker

¿Tiene sentido levantar mi propia instancia?

Empiezo realmente por el principio, y algo que me he planteado en varias ocasiones desde mi entrada en el mundo del Self Hosted, y es si tiene sentido levantar mi propia instancia. Y te seré totalmente sincero, en la actualidad, para mi no. Para mi, levantar mi propia instancia en el Fediverso es como levantar Twitter. Yo utilizo Twitter al igual que Masatodon, al igual que cualquier red social de las que me encuentro como un canal para compartir el contenido y para relacionarme con otras personas, pero no como un repositorio de información.

Probablemente este punto es el que debería replantearme y ver si debería covertirlo en un repositorio de información, o simplemente quiero seguir como hasta el momento, donde toda la información la puedes encontrar en atareao.es. Aunque, esto, tampoco es tan así, porque actualmente, mucha de la información que comparto, no se encuentra en mi sitio, sino que también se encuentra en otros medios como GitHub o en Spotify o en YouTube o en FediversoTV.

Desde luego, si utilizas tu instancia para compartir tus pensamientos, ideas, o lo que quieras compartir, y todo esto no tiene soporte en otro medio, desde luego que tiene sentido. Y tiene sentido, por algo que habrás leído en mas de una ocasión, y es que cuando dices que tus datos están en la nube, quieres decir que tus datos están en el ordenador de otro. Si quieres conservar toda esa información, deberías tenerla en tu poder.

¿Y porque la levanto entonces?

Llegados a este punto, probablemente te estés preguntando si realmente tiene sentido levantar mi propia instancia, dado mi planteamiento. Sin embargo, tal y como te indiqué en la introducción, vengo empujado por la curiosidad que han inducido en mi tanto Ernesto como Gabriel, y he querido probar la experiencia.

Pero, por otro lado, ¿debería replantearme mi postura hacia mi propia instancia? La verdad es que no lo tengo nada claro, y en este sentido, voy a hacer este experimento a ver que tal sale y vamos viendo.

La cuestión, es que hasta el momento, y tal y como indicaba anteriormente, he utilizado Mastodon, mas como un canal de difusión, que como una red social, en el sentido de relacionarme. No quiere decir que no me relacione con otras personas, lo que que quiero decir, es que el uso mayoritario que le doy es como canal de difusión. Y por otro lado, hasta la fecha, mi comportamiento ha sido mas reactivo que proactivo, en el sentido de que espero siempre que alguien interaccione conmigo, y no al revés. Esto, la verdad es que me llama mucho la atención, y a lo mejor con esta nueva instancia, cambio mi comportamiento. Veremos.

Sobre GoToSocial y porque GoToSocial

Empezando por el principio ¿Que es GoToSocial? GoToSocial es un servidor de red social basado en ActivityPub, escrito en Golang y que puedes autoalojar (Self Hosted) de forma realmente sencilla en Docker. Con esto que te acabo de explicar, entiendes las razones, por las que me ha costado tan poco decidirme por utilizar este servidor en lugar de directamente Mastodon.

Por supuesto que esto tiene sus ventajas e inconvenientes, en el sentido de que si bien GoToSocial te proporciona una entrada al Fediverso ligera, personalizable y enfocada en la seguridad, lo cierto es que no tiene todas las funcionalidades de Mastodon. En el caso de que lo que necesites sea un servidor de microblogging de ActivityPub con todas las funciones, Mastodon. En este sentido, no puedes publicar directamente desde el servidor, sino que tienes que utilizar siempre un cliente para tus publicaciones.

Otro importante inconveniente de GoToSocial frente a Mastodon, es que el primero se trata de un desarrollo pequeño, que en cualquier momento, su desarrollador puede decidir abandonar. Esto es algo que hay que pensarse muy mucho.

¿Para que está pensado GoToSocial?. El nicho de GoToSocial son instancias pequeñas o de un solo usuario que se ejecutan en dispositvos de baja potencia, como pueden ser servidores de placa única o ordenadores antiguos, o simplemente cualquier servidor como es mi caso.

GoToSocial está enfocado en proporcionar un software ligero, sencillo de instalar y mantener y que tenga una buena seguridad y las configuraciones necesarias para el funcionamiento.

Como ves, con estas especificaciones, GoToSocial se adapta perfectamente a lo que quiero hacer, y cumple exactamente mis necesidades.

Características de GoToSocial

Compatibilidad con Mastodon

Actualmente la API de Mastodon se ha convertido en el estándar de facto para comunicación entre clientes y servidores federados. Así, GoToSocial ha implementado y extendido la API con algunas funcionalidades personalizadas.

Respecto a los clientes que puedes utilizar con GoToSocial, indicarte que la mayoría de ellos debería funcionar perfectamente, pero en concreto, los desarrolladores de este servicio recomiendan Tusky, Semaphore y Feditext. En mi caso estoy utilizando Moshidon, y funciona de maravilla. Por este lado ningún problema.

Publicaciones granularizadas

Por otro lado, al igual que sucede con Mastodon, GoToSocial, te permite la publicación granularizada, en el sentido que que tu puedes elegir quien quieres que va una determinada publicación. Pero también te permite elegir quien quieres que interaccione con ellas.

Configuración para administradores

A pesar de que no encontrarás todas las opciones que ofrece Mastodon, lo cierto es que los administradores tienen una gran cantidad de opciones que configurar. En este sentido, no te voy a engañar, ni siquiera me las he mirado todas, solo lo básico, para saber como federar la instancia.

Sencillo de poner en marcha

Poner en funcionamiento GoToSocial es realmente sencillo, y no tiene ninguna complejidad. Ya sea que lo levantes directamente en tu máquina o con Docker, es muy fácil. Realmente GoToSocial no tiene dependencias externas, salvo la base de datos.

En este sentido puedes elegir entre SQLite o PostgreSQL. Yo para esta primera aproximación, por supuesto me he decantado por SQLite. Y realmente, no se si tiene sentido levantar PostgreSQL para una instancia de un solo usuario. No se cuantas publicaciones haré, pero estoy convencido que esto no será ningún problema para SQLite.

Seguridad

Si bien GoToSocial tiene incorporado un soporte automático para HTTPS con Let’s Encrypt, lo cierto es que actualmente no lo estoy utilizando, porque aprovecho Traefik para estos menesteres. Pero, además de esto, GoToSocial, también tiene otras sería de características referentes a la seguridad muy interesantes como,

  • Aplicación estricta de la privacidad para las publicaciones y lógica estricta de bloqueo.
  • Importación y exportación de listas de permitidos y listas de denegados. Suscripción a listas de bloqueo creadas por la comunidad (¡piensa en un bloqueador de anuncios, pero para la federación!).
  • GoToSocial requiere firmas HTTP al enviar y recibir mensajes, para asegurar que tus mensajes no puedan ser manipulados y tu identidad no pueda ser falsificada.
Federación

GoToSocial no aplica un enfoque único para todos en cuanto a la federación. Con quién se federa tu servidor debería depender de ti.

  • Modo ‘blocklist’ (por defecto): descubre nuevos servidores; bloquea los servidores que no te gustan.
  • Modo ‘allowlist’ (experimental): elige la federación con servidores de confianza.
  • Modo de federación ‘zero’: mantiene tu servidor privado (aún no implementado).

Tengo que decirte que es posible combinar los dos primeros métodos, con resultados un tanto perturbadores. Lo cierto es que esto me ha llevado algo de confusión, pero finalmente he dejado el modo por defecto, y tan contento.

Mi objetivo actual, además por supuesto de probar como es esto de tener tu propia instancia, también, es la de compartir, seguir e interaccionar, con lo que otras opciones actualmente no tienen sentido para mi.

OpenID Connect

Es posible integrar GoToSocial con diferentes proveedores de identidad OpenID Connect, como pueden ser Auth0 o GitLab. En mi caso, y actualmente, no tiene mucho sentido, y no lo estoy utilizando.

Backend

Como te he mencionado anteriormente, GoToSocial no incluye un frontend integrado, es decir, no tendrás una aplicación web, mas que la mínima para poder hacer lo básico referente a configuración y otros aspectos.

El funcionamiento es similar al proyecto Synapse de Matrix.org, del que te he hablado en alguna que otra ocasión. Lo que vas a encontrar en GoToSocial es un backend con las páginas necesarias para la parte de la configuración y para el perfil, y poco mas.

Realmente, yo no necesito nada mas, porque en general utilizo otros clientes, normalmente en el móvil, como Moshidon, y puntalmente Semaphore.

Mi configuración

En mi caso, lo he levantado con Docker y por supuesto con Traefik como proxy inverso, con la siguiente configuración,

services:
  gotosocial:
    image: superseriousbusiness/gotosocial:latest
    container_name: gotosocial
    restart: "always"
    init: true
    user: 1000:1000
    networks:
      - proxy
    environment:
      GTS_HOST: $FQDN
      GTS_DB_TYPE: sqlite
      GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
      GTS_LETSENCRYPT_ENABLED: "false"
      GTS_LETSENCRYPT_EMAIL_ADDRESS: ""
    volumes:
      - data:/gotosocial/storage
    labels:
      traefik.enable: true
      traefik.http.services.${ROUTER}.loadbalancer.server.port: 8080
      traefik.http.routers.${ROUTER}.rule: Host(`${FQDN}`)

volumes:
  data:
    name: gotosocial_data

networks:
  proxy:
    external: true

Respecto a las variables,

ROUTE=gotosocial
FQDN=social.tuservidor.es

Y con esto listo y funcionando a las mil maravillas.

Sobre la federación

Tengo que decirte que inicialmente la lié, como no podía ser de otra forma. En GTS_HOST puse tuservidor.es en lugar de social.tuservidor.es. Esto te permite definir tus usuarios como @atareao@tuservidor.es en lugar de @atareao@social.tuservidor.es. Sin embargo, es necesario realizar algunos cambios en los labels de Traefik. Nada complejo, simplemente tendrías que añadir lo siguientes,

    traefik.http.routers.myservice.rule: Host(`tuservidor.es`)
    traefik.http.middlewares.myservice-gts.redirectregex.permanent: true
    traefik.http.middlewares.myservice-gts.redirectregex.regex: ^https://(.*)/.well-known/(webfinger|nodeinfo|host-meta)$$
    traefik.http.middlewares.myservice-gts.redirectregex.replacement: https://social.$${1}/.well-known/$${2}
    traefik.http.routers.myservice.middlewares: myservice-gts@docker

Sin embargo, no he querido complicarme la vida. Me da lo mismo aparecer como @atareao@social.territoriolinux.es. Se que es un poquito mas largo, pero que le vamos a hacer.

Con el lío que monté efectivamente no se localizaba mi usuario, y esto pensé que era un problema de que mi instancia no estaba federada. Sin embargo, al cambiar a social.tuservidor.es todo comenzó a funcionar correctamente, una vez reconstruí la base de datos.

Actualmente, he podido comprobar que la mi instancia está federada con al menos tres mas, así que parece que esto funciona como se espera.

Gestión de usuarios

Tanto la creación de usuarios como la promoción de usuarios lo tienes que hacer a través de terminal. Para ello, tienes que utilizar los siguientes comandos,

bash docker exec -it gotosocial /gotosocial/gotosocial admin account create --username <nombre-del-usuario> --email <email-del-usuario> --password '<password-del-usuario>' 476 docker exec -it gotosocial /gotosocial/gotosocial admin account promote --username <nombre-del-usuario>

Siguientes pasos

Por supuesto, entre mis siguientes pasos, está probar la publicación automatizada y como no puede ser de otra forma, utilizando Rust, pero esto, lo dejo para un futuro episodio del podcast.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *