Federando con Misskey desde una Raspberry Pi

En esta entrada se explica como levantar una instancia de Misskey con Docker en un una Raspberry Pi 4, aunque sirve para cualquier sistema de otras arquitecturas. Se necesita tener Docker instalado aunque tampoco es necesario, pudiendo ejecutar el software directamente en el sistema nativo pero por seguridad y soporte lo utilizaremos.

Misskey es un programa escrito en JavaScript, nos brinda la posibilidad de crear una instancia propia para conectar nuestro ordenador y crearnos una cuenta en el Fediverso, la red social Federada que está basada en el protocolo ActivityPub, el Fediverso está compuesto de nodos que federan entre ellos; notas, estados y recursos necesarios para la comunicación entre los usuarios de las instancias. Al crear nuestra propia instancia estamos añadiendo un nodo a la red donde podremos compartirlo o usarlo con las cuentas que queramos crear.

Primeramente clonamos el repositorio de Misskey con el tag que queremos compilar:

$ git clone --depth 1 --branch 12.119.0 https://github.com/misskey-dev/misskey

Con el sistema instalado y Docker funcionando, construimos la imagen usando la compilación cruzada, compilando de una arquitectura amd64 a otra distinta en el caso de la Pi4 aarch64:

$ cd misskey && docker buildx build --platform aarch64 -t misskey .

Una vez finalice correctamente pasamos la imagen a la Pi4 guardándola o subiéndola a un registro de Docker propio:

$ docker save -o misskey.tar misskey

Y recuperamos la imagen en la instancia Docker de la Pi4:

$ docker load -i misskey.tar

Para montar el servicio podemos utilizar el siguiente docker-compose.yml y ajustarlo a nuestras necesidades, en el se ejecutan tres contenedores: misskey, un postgres (que es el base de datos donde se almacena la información) y un índice redis:

version: '3.7'

services:

  misskey:
    image: misskey
    container_name: misskey
    hostname: misskey
    restart: always
    depends_on:
      - redis
      - postgres
    expose:
      - 3000
    volumes:
      - ./files:/misskey/files
      - ./config:/misskey/.config:ro
    networks:
      misskeynet:

  postgres:
    image: postgres:9.6
    container_name: postgres-misskey
    hostname: postgres-misskey
    restart: always
    shm_size: 384M
    volumes:
      - ./pg_data:/var/lib/postgresql/data
      - ./pg_backups:/pg_backups
    environment:
      - POSTGRES_USER=misskey
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=misskey
    command: >
      -c max_parallel_workers_per_gather=4
      -c shared_buffers=384MB
      -c max_connections=30
    expose:
      - 5432
    networks:
      misskeynet:

  redis:
    image: redis
    container_name: redis-misskey
    hostname: redis-misskey
    restart: always
    volumes:
      - ./redis:/data
    expose:
      - 6379
    networks:
      misskeynet:

networks:
  misskeynet:

Generamos la configuración de misskey en el archivo config donde se encuentre el compose y levantamos el servicio:

$ docker-compose up -d

Ya podemos conectarnos a nuestra instancia en la ruta http://misskey:3000, comentar que es recomendable repasar la configuración antes de arrancar ya que se generan datos en el almacenamiento, también usar un servidor proxy como nginx con el dominio correspondiente y certificados ssl si se va a poner en producción.

El frontend de Misskey tiene un buen diseño y UX además el backend en JavaScript es mucho más rápido que en otros lenguajes. Hasta aquí la entrada, nos leemos por las redes federadas como este blog 😉