No estás usando esta distribución?

Selecciona una versión o distribución diferente

Lemmy es una plataforma descentralizada de redes sociales diseñada para fomentar la creación de comunidades en línea de manera abierta y colaborativa. Inspirada en el formato de foros de discusión tradicionales y sitios como Reddit, Lemmy permite a los usuarios crear y participar en comunidades temáticas, publicar contenido, votar en publicaciones y comentarios, y participar en debates con otros usuarios.

Una de las características más destacadas de Lemmy es su integración dentro del fediverso (una contracción de "federación" y "universo"). El fediverso es un ecosistema de redes sociales descentralizadas que se comunican entre sí a través de protocolos abiertos, como ActivityPub. Esto permite a los usuarios de Lemmy interactuar no solo con otras instancias de Lemmy, sino también con plataformas federadas como Mastodon, Pleroma, Peertube, entre otras. De esta forma, Lemmy fomenta una comunicación más libre, sin depender de una única empresa o servidor centralizado, garantizando la autonomía y el control de los datos por parte de los usuarios y comunidades.

En este tutorial, aprenderás cómo instalar Lemmy, configurar tu propia instancia y conectarla al fediverso para que puedas empezar a crear y participar en comunidades de forma descentralizada.

Primeros pasos

Para instalar Lemmy hay varias opciones, para este tutorial hemos optado por la opción más sencilla que es usar un PlayBook de Ansible donde se instala todo lo necesario. En voidnull tenemos un curso de Ansible por si te interesa echarle un vistazo:

Automatización - _ voidNull
Artículos relacionados con la automatización y administración de configuración

El PlayBook es compatible con diferentes distros, pero en este caso utilizaremos Ubuntu 24.04 y la siguiente configuración de recursos del servidor:

  • 4vcores
  • 8GB de RAM
  • 50GB de disco SSD

Además de esto, tendremos que tener un dominio apuntando a la IP del servidor.

Configuración SSH

Una configuración previa a todo, es tener acceso por clave SSH para acceder por SSH al servidor sin contraseña. Para ello tendremos que generar -si no la tenemos- y copiarla al servidor.

Creamos la llave SSH con el usuario root de nuestro sistema (si no la tenemos creada de antes):

 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Y la copiamos al servidor:

ssh-copy-id [IP_SERVIDOR]

Comprobamos que funciona correctamente:

ssh root@[IP_SERVIDOR]

Descargar repositorio con el PlayBook

Lo primero que haremos, será descargar el repositorio donde se encuentra el PlayBook:

git clone https://github.com/LemmyNet/lemmy-ansible.git

Entramos dentro del directorio:

cd lemmy-ansible/

Comprobamos que estamos en la última versión:

git checkout $(git describe --tags)

Configuración del PlayBook

A continuación, configuraremos los datos de nuestro nodo de Lemmy, para ello tendremos que copiar algunos ficheros y editarlos a nuestro gusto.

Creamos un directorio con nuestro dominio:

mkdir -p inventory/host_vars/[NombreDominio]

Copiamos la configuración base del nodo:

cp examples/config.hjson inventory/host_vars/arrel.top/config.hjson

Si lo editamos, podremos cambiar algunas cosas como la cuenta de correo que se utilizará para validar los registros así como la configuración de correo.

Ahora copiamos los hosts implicados:

cp examples/hosts inventory/hosts

Editaremos el fichero inventory/hosts y modificaremos para poner nuestro dominio y correo electrónico para validar el SSL:

[DOMINIO]  ansible_user=root domain=[DOMINIO]  letsencrypt_contact_email=[EMAIL]  lemmy_base_dir=/srv/lemmy pictrs_safety=false lemmy_web_port=9633

Copiamos la configuración de PostgreSQL, aquí podemos editar el fichero para configurarlo a nuestras necesidades.

cp examples/customPostgresql.conf inventory/host_vars/[DOMINIO]/customPostgresql.conf

Si necesitas saber como configurarlo para adaptarlo a los recursos de tu servidor, puedes revisar este otro artículo que explica el funcionamiento de PGTune:

Optimitzar servidor de PostgreSQL usando PGTune
Tener un servidor de bases de datos optimizado es crucial para una buena respuesta de nuestra aplicación web. Ya sea un blog personal o una instancia de Peertube, es recomendable configurar correctamente los servidores de bases datos para que las consultas sean lo más rápidas posibles.

Seguimos configurando, esta vez con las variables del PlayBook, aquí podemos cambiar lo que necesitemos, pero evitad tocar todo lo que contenga {{ }}.

cp examples/vars.yml inventory/host_vars/arrel.top/vars.yml

Instalación de Lemmy

Ahora que ya tenemos todo configurado, podemos iniciar la instalación utilizando el PlayBook. Este PlayBook, lo que hará será instalar Docker y configurar los contenedores necesarios para Lemmy.

Ejecutamos el siguiente comando:

ansible-playbook -i inventory/hosts lemmy.yml

Salida del comando

PLAY [Install Lemmy] *******************************************

TASK [Assert that Ansible version is >= 2.11.0] ***********************
ok: [DOMINIO] -> localhost] => {
"changed": false,
"msg": "All assertions passed"
}

TASK [Check lemmy_base_dir] ***********************************
skipping: [DOMINIO]

TASK [Check for legacy passwords/postgres file] ********************
ok: [DOMINIO] -> localhost]

TASK [Legacy use of passwords/postgres file] **********************
skipping: [DOMINIO]

TASK [Check for vars.yml file] ********************************
ok: [DOMINIO] -> localhost]

TASK [Missing vars.yml file] *********************************
skipping: [DOMINIO]

TASK [Install python for Ansible] *******************************
ok: [DOMINIO]

TASK [Gather facts] ******************************************
ok: [DOMINIO]

TASK [Ensure target system is Debian or Ubuntu] ******************
ok: [DOMINIO] => {
"changed": false,
"msg": "All assertions passed"
}

TASK [Install dependencies] **********************************
changed: [DOMINIO]

TASK [Add Docker GPG apt Key] *****************************
skipping: [DOMINIO]

TASK [Add Docker Repository] ******************************
skipping: [DOMINIO]

TASK [Get architecture using dpkg] *****************************
ok: [DOMINIO]

TASK [Download Docker GPG Key] ****************************
changed: [DOMINIO]

TASK [Add Docker apt repo] *********************************
changed: [DOMINIO]

TASK [Install docker-ce and docker-compose] **********************
changed: [DOMINIO]

TASK [Copy docker config] ************************************
changed: [DOMINIO]

TASK [Request initial letsencrypt certificate] **********************
changed: [DOMINIO]

TASK [Create lemmy folder] ***********************************
changed: [DOMINIO] => (item={'path': '/srv/lemmy/[DOMINIO]/', 'owner': 'root'})
changed: [DOMINIO] => (item={'path': '/srv/lemmy/[DOMINIO]/volumes/', 'owner': 'root'})
changed: [DOMINIO] => (item={'path': '/srv/lemmy/[DOMINIO]/volumes/pictrs/', 'owner': '991'})
changed: [DOMINIO] => (item={'path': '/var/cache/lemmy/[DOMINIO]/', 'owner': 'www-data'})

TASK [Generate random port for lemmy service] **********************
ok: [DOMINIO]

TASK [Distribute nginx proxy_params configuration] *******************
changed: [DOMINIO]

TASK [Add template files] ****************************************
changed: [DOMINIO] => (item={'src': 'templates/docker-compose.yml', 'dest': '/srv/lemmy/[DOMINIO]/docker-compose.yml', 'mode': '0600'})
changed: [DOMINIO] => (item={'src': 'templates/nginx_internal.conf', 'dest': '/srv/lemmy/[DOMINIO]/nginx_internal.conf', 'mode': '0644'})
changed: [DOMINIO] => (item={'src': 'templates/nginx.conf', 'dest': '/etc/nginx/sites-available/[DOMINIO].conf', 'mode': '0644'})

TASK [Gather stats on site enabled config] ***************************
ok: [DOMINIO]

TASK [Remove if regular file (legacy) instead of symlink] **************
skipping: [DOMINIO]

TASK [Enable nginx site] *****************************
changed: [DOMINIO]

TASK [Add the config.hjson] **********************************
changed: [DOMINIO]

TASK [Add the customPostgresql.conf] *******************************
changed: [DOMINIO]

TASK [Enable and start docker service] **************************
ok: [DOMINIO]

TASK [Start docker-compose] ****************************
changed: [DOMINIO]

TASK [Certbot renewal cronjob] *****************************
changed: [DOMINIO]

RUNNING HANDLER [Reload nginx] *****************************
changed: [DOMINIO]

PLAY RECAP **************************************
[DOMINIO] : ok=25 changed=15 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0

Accediendo por primera vez

Una vez haya finalizado la instalación del PlayBook, podremos acceder a nuestro dominio e configurar el primer usuario:

Una vez hemos configurado los datos de nuestro usuario, hacemos clic sobre el botón "Crear cuenta" y seguimos con la configuración:

Finalmente, abajo del todo le damos a "Crear" para inicializar nuestro nodo de Lemmy:

Y listo! Ya tenemos nuestra instancia de Lemmy!


Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación