Val 🏳️‍⚧️

Publicaciones

Últimas publicaciones de Val

from Val 🏳️‍⚧️

Quiero comenzar esta publicación diciendo que esta publicación es más bien yo abriendo un poco de mí, y es algo que necesito escribir para sacar algo que traigo dentro.

Dicho esto, también quiero decir que podría ser una lectura difícil, ya que abordo temas delicados, como salud mental y mención del suicidio. Así que si no quieres leer este pequeño desahogo, mejor pasa de largo.

Cuando la gente te pregunta cómo estás, sueles responder “bien”. Ya sea porque realmente lo sientes, o por simple cortesía. En mi caso, ya le respondo a la gente, “sigo con vida, que ya es ganancia”. Y sí, ha habido días en los que estoy bien. Pero generalmente estos días he estado generalmente en modo zombie. O de plano cansada por todo y nada. A decir verdad, ha habido días en los que no tengo ganas de levantarme de la cama, pero el trabajo me obliga a hacerlo, y prácticamente ya estoy quemada. Y las cosas que he hecho para relajarme y distraerme realmente son más trabajo. Como por ejemplo, las traducciones, escribir para este blog, o una página que estoy haciendo con JavaScript.

He estado demasiado frustrada, y a veces sí me llego a sentir demasiado insuficiente, más particularmente en el trabajo por no poder llegar a las métricas que se nos piden. Cualquiera que vea que es un trabajo de oficina pensaría que no es nada agotador. Y honestamente, tienen razón. Físicamente no es agotador para nada. Pero es mental y emocionalmente demandante, y eso es lo que cansa. Irónicamente he tenido problemas para dormir bien. Me cuesta trabajo comenzar a dormir, y permanecer dormida. Y hay días donde mi cabeza no deja de dolerme de una forma muy intensa. Mi cuerpo prácticamente me exige un descanso, pero la ansiedad y los pensamientos intrusivos no lo hacen más sencillo.

Hablando de pensamientos intrusivos, y retomando lo de que me he sentido muy insuficiente, la última semana de febrero de 2025 fue particularmente difícil en ese aspecto. Tanto que hubo un día en que, caminando hacia el trabajo desde la parada del transporte público, pasaron por mi mente pensamientos de aventarme a la carretera para que un automóvil me atropellara. Lo que me detuvo fue que, entre todo ese lío que estaba hecho mi cabeza, pensé, «¿pero cómo le va a hacer mi familia sin mi apoyo?». Ni siquiera fue el dejar cosas pendientes, o mi temor a la no-existencia, o la esperanza de dejar de estar sola (que ese es otro asunto qué trabajar). A decir verdad, con altibajos y lo que sea, mi familia me ha apoyado mucho. Pero aún con su apoyo y aliento, me he sentido demasiado sola desde que, bueno, dejé de tener una mejor amiga, y siento que no he tenido mi cierre con eso, pero sé que eso no pasará. Ambas somos demasiado obstinadas para ello. Además de que también hay miembros de mi familia extendida que se han alejado de mí, o que la relación está deteriorada, por lo que no negaré que me he sentido demasiado sola, y me cuesta mucho acercarme a la gente. Tanto por miedo a lastimar, como por miedo a salir lastimada. Más de lo último, pero aún así.

Pensando un poco al respecto de todo, creo que he pasado por un episodio depresivo desde mediados o finales de diciembre, del que no me he recuperado por completo. Y ver las noticias respecto a lo que está pasando tanto en Estados Unidos como también aquí en México sólo empeoran las cosas. Aunque hay días en los que me siento realmente bien. Por ejemplo, el otro día iba caminando del trabajo hacia el transporte público, y el viento hizo que las hojas secas de los árboles se cayeran, y me pareció un efecto muy bonito. Además de que realmente estas situaciones que he descrito son bastante abrumadoras para mí, realmente hay gente que la pasa peor. Mi hermano, por ejemplo, no puede ver a su hija porque su madre la sacó ilegalmente del país, y no podemos hacer nada al respecto, además de algunas personas que conozco que no son aceptadas por su familia, entre otras cosas. Así que también trato de ser un poco más flexible conmigo misma, y hacerme ver que no la tengo tan jodida como algunas personas. Pero… sí. Los demonios internos están presentes.

Creo que sólo quería expresar esto que traigo dentro para ordenar un poco más mi cabeza y desahogarme. Así que simplemente voy a terminar con esto diciendo que sí, podría estar mejor. Pero estoy bien.

 
Leer más...

from Val 🏳️‍⚧️ (En)

I wanna start this post saying this is really me opening up about myself, and it’s something I need to write to vent about some things inside me.

With that said, I also wanna say that this will be a hard reading, because I’ll write about delicate topics, such as mental health and suicide mention. So if you don’t wanna read this little venting session, you better skip this one.

When people ask how are you, you often answer “good”. Whether it’s because you really feel it, or just mere courtesy. In my case, I answer “I’m still alive, that’s something”. And yes, there have been days on which I’m okay. But generally these days I’ve been generally in zombie mode. Or flat out tired for everything and nothing. To say the truth, there have been days on which I don’t want to get out of bed, but the job makes me do it, and I’m practically burnt out. And the things I have done to relax and get distracted are really more work. For example, the comic translations, writing for this blog, or a page I’m doing with JavaScript.

I’ve been really frustrated, and sometimes I do feel really insufficient, more particularly at work for not being able to get the metrics asked. Anyone who sees that it’s an office job might think it’s not tiring at all. And honestly, you’re right. Physically it’s not tiring at all. But it’s mentally and emotionally demanding, and that IS tiring. Ironically I have had troubles sleeping, and staying asleep. And there are days I have a really constant, intense headache. My body practically demands a rest, but the anxiety and the intrusive thoughts don’t make it easy at all.

Speaking about intrusive thoughts, and going back on feeling insufficient, the last week of February 2025 was particularly difficult in that regard. So much that there was a day on which I was walking from the public transport stop to my job, and thoughts about jumping to the road went through my head for a car to bump me. What stopped me is that, between all that mess in my head, I thought, «but how is my family gonna do without my help?». Not even the fear of letting unfinished projects, or my fear to the non-existence, or the hopes of not being alone anymore (which is another thing to unpack). To say the truth, with it’s ups and down and whatnot, my family has supported me a lot. But even with their help and support, I have felt really alone since, well, I stopped having a best friend, and I feel like I haven’t had a closure with that, but I know that won’t happen. Both of us are really obstinate for that. Besides, there are some extended family members who have distanced themselves from me, or that the relationship is stranded, so I won’t deny I have felt really alone, and I have a hard time getting closer to people. Both out of fear of hurting people, and getting hurt. More of the latter, but still.

Thinking a bit about everything, I think I have gone through a depressive episode since middle or late December, and I haven’t fully recovered from that. And seeing the news about what’s happening in the United States and here in Mexico just makes things worse. Although there are some days I feel really good. For example, the other day I was walking from my job to the bus stop, and the wind made the dried leaves fall from the trees, and I thought it was such a nice effect. Besides, although these situations I have described are really overwhelming for me, there are people who have it worse. My brother, for example, cannot see his daughter because her mother took her out of the country illegally, and we can’t do anything about it, and also there are some people I know who are not accepted by their families, among other things. So I try to be a little bit more flexible with myself, and making myself see that I’m not as fucked up as other people. But… yeah. The inner demons are present.

I think I just wanted to express all of this I had inside to sort my head a bit and vent out. So I’ll simply gonna end this saying that yes, I could be better. But I’m okay.

 
Read more...

from Val 🏳️‍⚧️

Esta publicación, más que ser un tutorial, es un anecdotario de lo que viví al querer montar mi propio blog en mi propio equipo en lugar de rentar una VPS.

Dicho esto, si bien voy a tratar de hacer esto desde un punto de vista más general, seguiré enfocándome en realizar el proceso exclusivo para Linux. Ya que, según mi humilde opinión, es más versátil y más en punto del equipo que elegí, además de no consumir tantos recursos como Windows o Mac. Digo, se puede. Pero no le veo mucho sentido. :P

Es importante aclarar que sí se requiere de una inversión monetaria. Asumiendo que ya cuentas con tu propio equipo y conexión a internet estable, requerirías pagar por el nombre de dominio para tu servidor. Realmente sería el único gasto extra requerido, y lo voy a cubrir más a detalle en la sección correspondiente.

Y para llevar a cabo este tutorial-anecdotario, voy a volver a realizar el proceso en otro equipo, con un tiempo estimado de cinco horas. Parece demasiado tiempo, pero queda en el mismo día, si te das el tiempo.

Índice

  1. Eligiendo el equipo
  2. Preparando el servidor
    1. Apache: El servidor web como tal
    2. MariaDB: Base de datos almacenados del servidor
  3. Proxy inverso vs Servidor en solitario: ¿Qué conviene más?
  4. Adquiere tu propia dirección para tu instancia
  5. DNS dinámico vs. Cloudflare Tunnel
    1. Registro en Cloudflare for Teams
    2. Instalación y configuración de Cloudflared
    3. Crear y configurar el túnel de acceso
    4. Crea los registros DNS para apuntar a tu equipo
  6. ¡A crear el blog de WriteFreely!
    1. Descarga e instalación de WriteFreely
    2. Inicialización de las bases de datos y configuración de WriteFreely
    3. Crea tu primera publicación
    4. Configurando las opciones del blog
    5. Traducción de (gran parte de) la interfaz de usuario
    6. Habilita las suscripciones por correo electrónico
  7. Aplicaciones web adicionales
  8. Comentarios finales

Eligiendo el equipo

Partamos de dos puntos. El primero es que tienes una computadora vieja que no utilizas a menudo, pero que todavía enciende, y tiene procesador de 64 bits. A esa computadora puedes instalarle un sistema minimalista o específico para servidores, como Arch Linux o Ubuntu Server, que pese a ser sistemas en lineas de comandos como base, realmente es todo lo que necesitas para configurar un servidor web.

Y el segundo, es que realmente no tienes un equipo extra del que puedas disponer, y el que tienes no es tan viable usarlo como servidor porque juegas o lo utilizas para el trabajo, o para hacer traducciones de webcómics (soy culpable de eso último :P). Así que sí necesitarías adquirir un nuevo equipo. Aunque opciones para equipos económicos existen. Por ejemplo, equipos de segunda mano y de casas de empeño, o la opción que elegí yo, una computadora de placa única, como las Raspberry Pi. Yo me decanté por la Raspberry Pi 5 de 4GB de RAM, y una MicroSD de 64GB, aunque con base en mi experiencia, incluso la Raspberry Pi Zero 2 W funcionaría bastante bien. Además, existen kits para comprar en Mercado Libre y Amazon.

Si te decantas por un equipo de segunda mano, lo mismo. Arch o Ubuntu Server, y queda joya. Y si te decantas por una Raspberry Pi, puedes formatear la tarjeta MicroSD para el arranque usando Raspberry Pi Imager. Súper recomendado, ya que te permite instalar la versión lite de Raspberry Pi OS (y otros sistemas) y aplicar configuraciones previas, como usuario y contraseña, red WiFi a conectarse, y habilitar el acceso a través de SSH por defecto.

Si usas la Raspberry Pi, para saber la dirección IP que ésta tiene, puedes conectar un teclado y monitor a tu equipo, y ejecutar el comando ifconfig, lo que te daría una salida como esta:

Salida del programa ifconfig, resaltando la sección del adaptador inalámbrico

Si esto no es opción, entras a la configuración de tu router (usualmente entrando a 192.168.100.1 con el navegador, pero varía de router a router), y buscas los dispositivos conectados, ya sea a Ethernet o a WiFi, y también puedes encontrar su dirección.

Captura de pantalla recortada de la configuración de un router, mostrando la dirección IP de un equipo

Con ese dato, a través de cualquier cliente de SSH (incluyendo la línea de comandos de Windows 10 y 11) puedes conectarte con el comando ssh [usuario]@[dirección IP], para poder seguir configurando el equipo desde otro lado, e incluso acceder a los archivos utilizando SFTP. Pongo como ejemplo, Thunar (uno de los administradores de archivos de Linux), que funciona directo.

Captura de pantalla de inicio de sesión por SSH a través del navegador de archivos Thunar

Al ingresar con el usuario y la dirección, nos pide la contraseña.

Captura de pantalla de Thunar, mostrando la raíz de un equipo remoto por SFTP

Y una vez adentro, nos muestra el directorio inicial del equipo.

Si bien, para Windows no hay acceso directo desde el explorador integrado, en su momento utilicé WinSCP, y realmente me funcionó bastante bien, así que lo recomiendo ampliamente. (Sin capturas de pantalla, porque ya no uso WinSCP... ni Windows xd)

Preparando el servidor

Una vez que tenemos la computadora preparada para interactuar como tal, vamos a instalar los programas de servidor web, y de bases de datos.

En Arch y derivadas (Manjaro, Endeavour, Garuda):

sudo pacman -Syu apache mariadb

En Debian y derivadas (Ubuntu, Linux Mint, Raspberry Pi OS, Pop! OS, MX Linux):

sudo apt update
sudo apt upgrade
sudo apt install apache2 mariadb-server

Esto sólo nos instala los programas, pero no nos ayuda a configurar nada como tal. Vayamos a ello.

Apache: El servidor web como tal

Antes de activar el servidor, lo ideal es que tengamos una página web básica de prueba sólo para ver si el servidor funciona. Copiando y pegando este código en un editor de texto debería ser más que suficiente.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Página web de prueba</title>
</head>
<body>
    <p>Sitio web en construcción.</p>
</body>
</html>

Recuerda guardar este código en un archivo de texto llamado index.html

La parte que sigue es un poco confusa dependiendo de si estamos haciendo el proceso en sistemas basados en Arch o en Debian, ya que tanto los archivos de configuración como la ubicación para colocar las páginas van a variar dependiendo de cada caso. Por ejemplo, en Arch, el archivo de configuración principal se encuentra en /etc/httpd/conf/httpd.conf, y debes poner los archivos web (el archivo index.html, por ejemplo) en /srv/http. Pero en Debian cambia la cosa. Aquí la configuración se encuentra en /etc/apache2/apache2.conf, y los archivos web se guardan en /var/www/html.

Vamos a copiar nuestro archivo HTML a la carpeta de archivos web de nuestro sistema, y habilitar el servicio de Apache para comprobar que funciona.

Desde Arch:

sudo systemctl enable --now httpd

Desde Debian:

sudo systemctl enable --now apache2

Este comando inicia el servicio al momento, además de que programa el inicio automático con cada arranque del sistema (por ejemplo, después de un reinicio por actualización), por lo que sólo es necesario introducir este comando una vez.

Y para comprobar si sí funciona, vamos a abrir la página http://localhost. Debería salir esto.

Si te salió esto, ¡Felicidades! Ya comenzamos con este pequeño proyecto. Que apenas es el inicio de este viaje. Vamos a configurar un poco la parte que no se ve.

MariaDB: Base de datos almacenados del servidor

Antes de habilitar el servicio de bases de datos, vamos a ejecutar el siguiente comando sólo en Arch.

sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

Ahora sí, habilitamos el servicio. El comando es el mismo para ambos sistemas.

sudo systemctl enable --now mariadb

También es importante que mejoremos la seguridad inicial de MariaDB. Convenientemente, se nos incluye un comando para hacerlo.

sudo mariadb-secure-installation

Este comando es interactivo, y consta de siete preguntas. Realmente es bastante directo y sencillo de configurar, pero por si acaso, vamos en orden.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

Nos pide la contraseña de root de MariaDB. No la hemos configurado, así que sólo presionaremos [Enter], y vamos al siguiente paso.

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n]

Aquí se nos pide si queremos usar la autenticación por Socket Unix o su autenticación estándar. Honestamente desconozco las implicaciones de eso, y además, la misma configuración nos lo sugiere, así que le diremos que no, presionando [n].

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n]

Aquí nos sugiere cambiar la contraseña de root de MariaDB. Esta vez, sí le vamos a decir que sí, presionando [Enter].

Inmediatamente nos pide que ingresemos la contraseña que queramos usar, preferentemente que sea diferente de cualquiera de usuario que utilices tú, pero lo dejo a tu criterio. Aunque si me permiten una sugerencia, yo utilizo un generador de contraseñas para no tener qué pensarle, y tener una buena contraseña. Además de que es muy versátil.

Una vez que tengas tu contraseña (recomiendo guardarla en un lugar seguro) debes ingresarla dos veces en la ventana donde estemos ejecutando el comando. Pasamos a la siguiente pregunta.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]

Nos pregunta si queremos eliminar usuarios invitados. Por seguridad, le diremos que sí, presionando [Enter].

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]

Obviamente queremos que las bases de datos sólo sean accesibles desde el equipo que funcionará como servidor. Así que deshabilitaremos el acceso remoto en esta pregunta, presionando [Enter].

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]

MariaDB tiene una base de datos de prueba que no necesitaremos en un entorno final. Así que la vamos a eliminar presionando nuevamente [Enter].

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]

Aquí simplemente recargaremos los privilegios de las bases de datos para que los cambios sean efectivos al momento, simplemente presionando [Enter].

Y ya también tenemos preparada nuestra base de datos limpia y lista para continuar.

Ahora, vamos a entrar a la linea de comandos de MariaDB con el comando sudo mariadb -u root -p. Una vez que lo ejecutes, te pedirá la contraseña que configuramos hace unos momentos. Si lo hiciste bien, al final de la línea de comandos debería aparecer este indicador, que significa que estamos dentro.

MariaDB [(none)]>

Una vez ahí, vamos a ejecutar los siguientes comandos, uno por uno.

CREATE USER 'writefreely'@'localhost' IDENTIFIED BY '[Contraseña de MariaDB]';

CREATE DATABASE writefreely CHARACTER SET latin1 COLLATE latin1_swedish_ci;

GRANT ALL PRIVILEGES on writefreely.* to 'writefreely'@'localhost';

FLUSH PRIVILEGES;

exit

El primer comando crea un usuario específico de WriteFreely para MariaDB, para no interactuar usando la cuenta de root, lo que puede ser peligroso. También especificamos la contraseña.

El segundo crea la base de datos que usará WriteFreely.

El tercer comando le da permisos al usuario de WriteFreely únicamente sobre su base de datos, para que no pueda modificar nada más.

El cuarto, aplica los cambios al momento.

Y el quinto cierra la línea de comandos de MariaDB.

Por el momento, ya no tocaremos más el tema de MariaDB, así que vamos a lo que sigue.

Proxy inverso vs Servidor en solitario: ¿Qué conviene más?

Hay dos formas de configurar cualquier servidor web. Cuando es un sitio web único, y este no es demasiado complejo, se recomienda hacer un servidor en solitario, donde tal sitio, y solamente ese sitio puede existir en ese servidor. Lo que hace que las solicitudes puedan procesarse más eficientemente, pero evidentemente limita la escalabilidad del servidor, en caso de que quieras alojar más de un proyecto, como un sitio web personal, o incluso una instancia de Mastodon. En cuyo caso conviene más el proxy inverso, donde puedes alojar varios sitios en la misma computadora, incluso con diferentes dominios, con la desventaja de que las solicitudes podrían procesarse más lento.

En teoría, WriteFreely soporta ambos tipos de servidor, pero por mucho que lo intenté, no pude hacerlo funcionar en servidor solitario, y no me quiero quebrar la cabeza para hacerlo funcionar así, por lo que lo haremos en proxy inverso.

Para ello, vamos a habilitar la funcionalidad de proxy en Apache.

En Arch, se hace modificando el archivo de configuración principal.

sudo nano /etc/httpd/conf/httpd.conf

Buscamos las siguientes líneas, una por una, y les quitamos el símbolo # del inicio.

#Include conf/extra/httpd-vhosts.conf

#LoadModule proxy_module modules/mod_proxy.so

#LoadModule proxy_connect_module modules/mod_proxy_connect.so

#LoadModule proxy_http_module modules/mod_proxy_http.so

#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

#LoadModule proxy_http2_module modules/mod_proxy_http2.so

Guardamos con [Control] + [S] y salimos con [Control] + [X].

Y en Debian, se hace ejecutando dos comandos.

sudo a2enmod proxy
sudo a2enmod proxy_http

Después de eso, reiniciamos el servicio de Apache.

En Arch:

sudo systemctl restart httpd

En Debian:

sudo systemctl restart apache2

Hay una cosa más que debemos de hacer con el proxy inverso, pero para ello, necesitamos el dominio, o la dirección web que usaremos para nuestro blog, y configurar WriteFreely. Vamos con lo primero.

Adquiere tu propia dirección para tu instancia

Los sitios web que visitas tienen una dirección detrás de un nombre de dominio para que sea más fácil de recordar. Y registrar un dominio no siempre es sencillo. La forma más accesible de obtener un dominio es a través de un sitio que ofrezca este servicio. Aunque puedes tratar de conseguir un dominio gratuito a través de Freenom, personalmente no lo recomiendo mucho porque tu dominio preferido podría no estar disponible para registrar, y se te limita a unos cuantos dominios de nivel superior (TLD por sus siglas en inglés, con lo que termina la dirección, usualmente .com o .tk). Si no tienes inconveniente con buscar un dominio gratuito, aunque no sea el que tengas en mente exactamente, puede ser una buena opción.

Así que, siguiendo la recomendación que alguien me hizo en su momento, yo ahora recomiendo Porkbun porque también ofrece dominios a precios bastante accesibles, con costos desde USD$1 por oferta de primer año, y renovación anual desde USD$5, además de tener opciones variadas y divertidas de TLDs como .lol, .wtf, .pizza, entre otras.

El proceso de registro es ir a la página de inicio de sesión, y llenar el formulario de registro en la derecha.

Lo típico. Usuario, contraseña (o llave de acceso física), correo electrónico, datos personales, y aceptar términos y condiciones. Al completar el registro, debes validar tu cuenta con un código que recibes al correo, y una vez validada tu cuenta, ya puedes buscar dominios para adquirir. Y justo voy a comprarme uno que quiero para un pequeño proyecto personal que planeo hacer más tarde, pero todavía no le quiero hacer difusión.

Y aquí podemos ver varios de los TLDs que tenemos disponibles para elegir. Para este dominio, elegí el .cc porque no está caro, y ese proyecto más bien será general. Pero no nos desviemos del tema. Una vez que seleccionemos nuestro dominio, y lo agreguemos al carrito, vamos a proceder a verlo.

Desde aquí podemos seleccionar por cuántos años queremos comprar el dominio. Por el momento, nos limitaremos a elegir un año, y oprimiremos el botón [Continue to Billing], para proceder a introducir los datos de nuestra tarjeta. Y una vez que pase el pago, vamos a ver nuestro dominio en nuestra lista.

Ya que tenemos nuestro dominio, vamos a hacer que apunte a nuestro equipo.

DNS dinámico vs. Cloudflare Tunnel

Existen dos formas de hacer que la dirección web apunte a nuestro sitio. La primera sería una vieja conocida por muchos, y es DNS dinámico. Donde le pedimos a nuestro router o a nuestra computadora que periódicamente solicite al servidor que haga el cambio de forma automática y que siempre apunte a la dirección pública de tu router. Y la segunda es una que yo no conocía hasta hace poco, pero es muy interesante, y es Cloudflare Tunnel, que hace más o menos lo mismo que el DNS dinámico. La diferencia entre ellas es que el DNS dinámico lo hace con tu dirección IP real, lo que podría exponerte a ataques con bastante facilidad, y Cloudflare tunnel lo hace a través de un enrutamiento de tu dirección IP a través de su infraestructura, lo que agrega una capa de protección más.

De hecho, cuando recién comencé a querer levantar esto, no conocía para nada Cloudflare Tunnel, y lo quise hacer únicamente por DNS dinámico.

No les voy a mentir. En esta parte estuve a punto de rendirme, porque hay proveedores de internet que hacen que los routers se conecten a internet a través de subredes, lo que se conoce como NAT. Básicamente una dirección IP se comparte entre varios equipos, lo que dificulta la parte del DNS dinámico. Y con la parte del túnel te saltas todas esas restricciones de redes, además de que la infraestructura de Cloudflare ayuda un poco.

Un muy querido amigo mío me recomendó probar con Cloudflare Tunnel, y hasta me pasó un tutorial. Y como me fue de mucha utilidad, pero está en inglés, lo voy a poner traducido por acá, aunque un poco más detallado.

Registro en Cloudflare for Teams

Aquí no debes hacer más que ir a la página de registro, poner tu correo y tu contraseña, y verificar tu correo electrónico. Una vez que hayas hecho todo esto, se te presenta la pantalla para agregar el dominio que acabamos de adquirir.

Una vez que ingresemos el dominio, y presionamos el botón de continuar, nos pasa al asistente de configuración.

Con la primera opción seleccionada y presionando en Continuar, avanzamos a la siguiente pantalla.

Aquí nos da varios planes para seleccionar. No queremos gastar un centavo más, así que nos iremos por el gratuito. Y al presionar el botón de Continuar, pasamos a la pantalla para configurar los registros DNS.

Como este proceso lo haremos más adelante, por el momento daremos en Continuar con la activación, y después en el botón de Confirmar. Pasaremos a la pantalla de guía de configuración de servidores de nombre.

Vamos a seguir las instrucciones que nos aparecen aquí. El primer punto ya está cubierto iniciando sesión en Porkbun, así que sólo basta con ir a la página de control de dominios de tu cuenta de Porkbun.

El segundo punto ya está cubierto por defecto, desglosando los detalles de nuestro dominio, y viendo que la sección Registry DNSSEC está en cero.

Y el tercer punto, lo vamos a cubrir presionando el botón de editar que está en la sección de Nameservers, y en la ventana que nos aparece, ponemos en lineas separadas los servidores que nos aparecen en Cloudflare.

Al presionar el botón de continuar, nos dice que los servidores quedan listos en un plazo máximo de 24 horas, pero tras refrescar la página unos cinco minutos después, dice que ya quedó.

Con los servidores listos, e incluso en lo que termina de quedar, podemos proceder con el siguiente paso.

Instalación y configuración de Cloudflared

Antes de proceder con la instalación del servicio de Cloudflare, debemos saber qué tipo de arquitectura tiene nuestro sistema. En cualquier sistema Linux se puede hacer a través del comando uname -a. Dejo la captura de pantalla con las salidas de este comando desde la computadora que uso a diario (y la que será esta instancia de prueba), y desde mi Raspberry Pi (la que es este blog).

Captura de dos pantalla del comando uname. Una de una PC de escritorio de 64 bits, y otra de un equipo ARM

Dependiendo de esa última parte (que resalto en mi captura de arriba), es la versión que vamos a instalar. Si el resultado de uname contiene x86_64, y estás en Arch (o derivadas), la tienes fácil. Lo puedes instalar con el siguiente comando:

sudo pacman -Syu cloudflared

Para otras configuraciones, se complica la cosa. Primero, es importante mencionar que, por alguna razón, los resultados de la salida de uname y la versión del programa que vamos a descargar difiere un poco. Así que les dejo esta tabla con las equivalencias.

Resultado de uname Arquitectura
x86_64 amd64
x86 386
arm7l armhf
aarch64 arm64

Basándonos en esto, para instalarlo en Debian (y otros Linux), vamos a ejecutar esta serie de comandos:

sudo wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-{arquitectura}
sudo mv cloudflared /usr/local/bin
sudo chmod +x /usr/local/bin/cloudflared

Es importante notar que, con esto, la forma de actualizar Cloudflared (que por cierto, sale al menos una actualización cada mes) varía, dependiendo de si instalas en Arch x86_64 o no. Si sí, basta con usar el comando para actualizar todo el sistema.

sudo pacman -Syu

Pero para los demás, el comando cambia un poco, al no estar ligado al gestor de paquetes del sistema.

cloudflared update

Ahora que ya está instalado el servicio, vamos a configurar el túnel para, por fin, hacer que la dirección apunte a nuestro equipo.

Crear y configurar el túnel de acceso

Primero vamos a crear el túnel, iniciando sesión desde cloudflared.

cloudflared login

Y en la línea de comandos, nos debe salir algo como esto:

A browser window should have opened at the following URL:

https://dash.cloudflare.com/argotunnel?aud=[ID de acceso privado que no comparto por seguridad xd]

If the browser failed to open, please visit the URL above directly in your browser.

Y también es posible que se haya abierto directamente la ventana de nuestro navegador con esa dirección. Pero en caso de que, por algún motivo no se haya abierto, toca copiar y pegar esa dirección en nuestro navegador. La cual, muestra algo parecido a esto.

Y una vez que seleccionemos nuestro dominio que creamos hace unos momentos, nos aparece esta otra ventana.

Una vez que le demos al botón de Autorizar, ya podemos cerrar la ventana del navegador. Y ahora podemos crear el archivo del túnel para poder hacerlo servicio automático. Para ello, ejecutamos el siguiente comando:

cloudflared tunnel create [Nombre que quieras darle al túnel]

Y debe darte una salida similar a esta:

Tunnel credentials written to /home/vo/.cloudflared/[UUID largo].json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel [Nombre del túnel] with id [UUID largo]

Ahora, vamos a crear el archivo de configuración para Cloudflared con los datos del túnel.

sudo nano ~/.cloudflared/config.yml

Y vamos a ingresar el siguiente texto en ese archivo:

tunnel: [UUID largo]
credentials-file: /home/[tu usuario]/.cloudflared/[UUID largo].json

ingress:
  - hostname: [Dominio de Porkbun]
    service: http://localhost:80
  - service: http_status:404

Una vez que guardemos el archivo de texto, ahora vamos a crear los registros DNS. Ya no falta mucho.

Crea los registros DNS para apuntar a tu equipo

Hay dos formas de crearlos. A mano, y directo desde Cloudflared. Honestamente no sé hacerlo a mano, así que dejemos que Cloudflare nos haga el trabajo con el siguiente comando:

cloudflared tunnel route dns [UUID largo] [Dominio]

Y así, sin más, en nuestro panel de control de Cloudflare, ya aparecen los registros DNS para que apunten a nuestro equipo.

Ahora, en la parte superior izquierda, al lado de nuestra dirección de correo electrónico, está la flecha de 'regresar'. La pulsaremos, y luego, en ese mismo lado, más en medio, está la opción de Zero Trust.

En esta nueva pantalla, vamos a la parte de Redes. Debemos ver esto.

Si aparece el túnel que creamos hace un momento, vamos por buen camino. Le damos click, y estaremos comenzando la migración a un nuevo centro de control específico de Zero Trust. Basta con que sigamos las instrucciones que se nos presentan (ya saben, siguiente, siguiente, terminar), teniendo en cuenta que el proceso sólo se puede hacer una vez. Y debe aparecer esta pantalla.

El comando resaltado es el que más nos interesa, para instalar el servicio de una vez por todas. No se muestra el código completo, así que hay qué hacerle clic para copiarlo, y pegarlo directamente en la linea de comandos. Una vez que lo ejecutemos, el servicio se instalará e iniciará. Lo que ya nos permite acceder a nuestra página de prueba. Que en mi caso, la modifiqué un poco.

Ya podemos deslindarnos de Cloufdlare y dominios por completo. Pasamos a la siguiente parte del proceso.

¡A crear el blog de WriteFreely!

Con todo listo, ahora sí, a lo que vinieron todos. Cómo descargar y configurar WriteFreely. Comencemos con la descarga.

Descarga e instalación de WriteFreely

¿Recuerdas la salida de uname? Nos va a volver a servir ahora para descargar la versión adecuada de WriteFreely.

Si tu arquitectura es amd64:

wget "https://github.com/writeas/writefreely/releases/latest/download/writefreely_0.15.1_linux_amd64.tar.gz"
tar -xvzf writefreely_0.15.1_linux_amd64.tar.gz
rm writefreely_0.15.1_linux_amd64.tar.gz

Si tu arquitectura es arm64:

wget "https://github.com/writeas/writefreely/releases/latest/download/writefreely_0.15.1_linux_arm64.tar.gz"
tar -xvzf writefreely_0.15.1_linux_arm64.tar.gz
rm writefreely_0..15.1_linux_arm64.tar.gz

Si tu arquitectura es armhf:

wget "https://github.com/writeas/writefreely/releases/latest/download/writefreely_0.15.1_linux_arm7.tar.gz"
tar -xvzf writefreely_0..15.1_linux_arm7.tar.gz
rm writefreely_0..15.1_linux_arm7.tar.gz

Ahora, vamos a configurar permisos para las carpetas del servidor, y mover los archivos de instalación de WriteFreely a la carpeta del servidor.

En Arch:

sudo chmod 755 -R /srv/http/
sudo mv writefreely/ /srv/http/
cd /srv/http/writefreely/
chmod +x writefreely

En Debian:

sudo chmod 755 -R /var/www/html/
sudo mv writefreely/ /var/www/html/
cd /var/www/html/writefreely/
chmod +x writefreely

Listo. WriteFreely ya se encuentra instalado de base en nuestro servidor. Pero todavía no está configurado.

Inicialización de las bases de datos y configuración de WriteFreely

Primero, vamos a pasar por la configuración inicial de WriteFreely.

./writefreely --config

Este comando es interactivo, así que vamos paso a paso por las configuraciones.

En Server setup, con las flechas [↑] y [↓] seleccionamos Production, behind reverse Proxy, y presionamos [Enter]. Nos pedirá un puerto, y podemos poner el que queramos, aunque para efectos de este tutorial, usaré 8080.

En Database Setup, vamos a seleccionar MySQL. Inmediatamente nos pedirá el usuario de la base de datos, donde pondremos writefreely, y la contraseña que hayamos elegido cuando creamos la base de datos cuando configuramos MariaDB. Después , ponemos el nombre de la base de datos, que también es writefreely. Host y Puerto lo dejamos tal cual.

Para App Setup es completamente a tu criterio. Ya sea que quieras que tu blog sea sólo para ti, que quieras hacer dos o varios blogs, o que quieras crear una pequeña comunidad de escritores. Para efectos de este tutorial, yo lo voy a dejar en Single user blog. Si es el caso, les pedirá crear el usuario, la contraseña y el nombre del blog. En unos momentos revisaremos la configuración para múltiples usuarios.

Ahora, les pedirá la dirección pública, que es el dominio que adquirimos, antecedido por https://.

La siguiente pregunta es importante, porque nos pide si queremos habilitar la federación, para que nuestras publicaciones se propaguen en el fediverso. Ya hablé de eso antes en otra publicación, así que creo que valdría la pena. Aquí lo vamos a habilitar para este tutorial.

Las siguientes preguntas hablan de estadísticas de uso al público. Esto no tiene efecto en la funcionalidad del blog como tal, pero permite que servicios que monitorean la actividad del fediverso puedan acceder a ellas. Lo dejo a criterio personal.

Tras terminar con este paso, ya terminamos la configuración inicial para una instancia de un solo blog, y parte de la configuración general.

Si configuramos la instancia para múltiples usuarios, hay unos pasos adicionales que debemos seguir. Ejecutaremos los siguientes dos comandos:

./writefreely --init-db
./writefreely --create-admin [Usuario de blog]:[Contraseña de blog]

Y ahora sí, todos ejecutaremos el siguiente comando para generar las claves de certificado.

./writefreely --gen-keys

Antes de pasar a crear el servicio de WriteFreely, vamos a terminar de configurar el Proxy inverso del servidor Apache.

Desde Arch:

sudo nano /etc/httpd/conf/extra/httpd-vhosts.conf 

Desde Debian:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Los archivos que están ahí realmente son archivos de muestra que podemos modificar, así que vamos a borrar todo el contenido de estos archivos, y les pegaremos el siguiente texto.

En Arch:

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        ServerName [Dominio adquirido]
        ServerAdmin [Correo electrónico personal, opcional]
        DocumentRoot /srv/http
        ErrorLog /var/log/httpd/error.log
        CustomLog /var/log/httpd/access.log combined
</VirtualHost>

En Debian:

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        ServerName [Dominio adquirido]
        ServerAdmin [Correo electrónico personal, opcional]
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Guardamos el archivo, y reiniciamos el servicio de Apache.

En Arch:

sudo systemctl restart httpd

En Debian:

sudo systemctl restart apache2

Ahora, vamos a crear el servicio de WriteFreely para que se ejecute todo el tiempo. Lo haremos a través de este comando.

sudo nano /etc/systemd/system/writefreely.service

Ahora, debe mostrarnos un archivo vacío. Lo vamos a llenar, dependiendo del sistema.

En Debian:

[Unit]
Description=Instancia de WriteFreely
After=syslog.target network.target mariadb.service

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/var/www/html/writefreely
ExecStart=/var/www/html/writefreely/writefreely
Restart=always

[Install]
WantedBy=multi-user.target

En Arch:

[Unit]
Description=Instancia de WriteFreely
After=syslog.target network.target mariadb.service

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/srv/http/writefreely
ExecStart=/srv/http/writefreely/writefreely
Restart=always

[Install]
WantedBy=multi-user.target

Ahora, sólo queda habilitar el servicio de WriteFreely.

sudo systemctl enable --now writefreely

Y si todo salió perfecto, debería salir algo parecido a esto cuando ingresamos al dominio.

Ahora, vamos a iniciar sesión con el usuario de nuestro blog, lo que inmediatamente nos lleva a la pantalla de escritura.

Crea tu primera publicación

La pantalla de edición es más bien simple.

De base, no hay muchas opciones de edición. Así que vamos a explicar cómo funciona.

La primera linea siempre es la linea de título. Así que para ponerle nombre a la publicación, Sólo escribimos algo, y presionamos dos veces [Enter].

Para el cuerpo de la publicación, tenemos varias opciones de formato de texto. Podemos escribir usando HTML y Markdown, incluso de forma intercambiada. Dejo una tabla comparativa sobre qué puedes hacer con los diferentes códigos disponibles.

HTML Markdown
Encabezados

<h1>Encabezado</h1>
<h2>Encabezado</h2>
<h3>Encabezado</h3>
<h4>Encabezado</h4>
<h5>Encabezado</h5>
<h6>Encabezado</h6>


# Encabezado
## Encabezado
### Encabezado
#### Encabezado
##### Encabezado
###### Encabezado

Formatos de texto

<strong>Negrita</strong>
<b>Negrita</b>
<em>Cursiva</em>
<i>Cursiva</i>


**Negrita**
__Negrita__
*Cursiva*
_Cursiva_

Listas

<ul>
<li>Lista simple</li>
<li>Lista simple</li>
<ul>
<li>Subelemento</li>
</ul>
</ul>
 
<ol>
<li>Lista numerada</li>
<li>Lista numerada</li>
<ol>
<li>Lista numerada</li>
</ol>
</ol>


* Lista simple
* Lista simple
  * Subelemento

1. Lista numerada
2. Lista numerada
  1. Lista numerada

Enlaces

<a href="https://val-vgms.gay/val">El mejor blog del mundo</a>
<a href="mailto:[email protected]">Envía un correo electrónico</a>


[El mejor blog del mundo](https://val-vgms.gay/val)
[Envía un correo electrónico](mailto:[email protected])

Imágenes

<img src="https://i.snap.as/T05UTpx.jpg" alt="Radiación cósmica" />


![Radiación cósmica](https://i.snap.as/T05UTpx.jpg)

Texto citado

<blockquote>El veloz murciélago hindú comía feliz cardillo y kiwi.
La cigüeña tocaba el saxofón detrás del palenque de paja.

<i>Microsoft en su programa de visor de tipografías</i>
</blockquote>


> El veloz murciélago hindú comía feliz cardillo y kiwi.
> La cigüeña tocaba el saxofón detrás del palenque de paja.
> 
> _Microsoft en su programa de visor de tipografías_

Bloques de código

<pre>
<code class="language-ini hljs">
[Sección]
; Comentario
Llave = Valor 1
Otra_llave = valor 2
</code>
</pre>


```ini
[Sección]
; Comentario
Llave = Valor 1
Otra_llave = valor 2
```

También hay cosas que no puedes hacer con Markdown, pero sí con HTML. Más específicamente, las etiquetas <iframe>, <audio> y <video>.

Y una vez que hayamos ingresado algo de texto, y presionemos el botón de publicar...

...nos saldrá para poderlo compartir con el mundo.

Una vez hayamos hecho nuestra primera publicación, vamos a personalizar nuestro blog.

Configurando las opciones del blog

Tenemos muchas opciones para nuestro blog. Para ello, vamos a ir al menú que aparece en la esquina superior izquierda.

Ahora, en esta nueva pantalla, vamos a ver varias opciones. Vamos a explicarlas todas.

Los primeros dos campos de texto son el nombre y la descripción de tu blog. Completamente personales, así que no puedo guiarte en eso.

En la URL, vamos a poder ver la dirección pública, y si activamos la feredación, también vamos a poder ver nuestro alias en el fediverso. Útil por si queremos que nos sigan desde Mastodon, Friendica, Pixelfed, y otras redes del fediverso.

En la parte de Visibilidad, puedes decir si quieres que tus publicaciones sean visibles para cualquiera, personas con el enlace, sólo tú mientras inicias sesión, o cualquiera con una contraseña que definas.

Para las actualizaciones, están activas la fuente RSS y la federación a través de ActivityPub, para que puedan seguir tu blog desde su lector RSS favorito, o incluso desde sus cuentas de Mastodon, por decir algo.

El formato de muestra permite tres opciones. El formato tradicional de blog muestra las publicaciones más recientes primero, y lo hace con fechas. El formato de novela oculta las fechas y muestra las publicaciones más antiguas primero, para que lo vayas leyendo en orden cronológico. Y el formato de anotaciones oculta las fechas, pero muestra las publicaciones más recientes primero.

El renderizado de texto nos permite habilitar Mathjax para pasar fórmulas matemáticas y que estas se vean bien. Markdown está habilitado por defecto.

El apartado de CSS personalizado nos permite cambiar la apariencia de nuestro blog. Hay diversos temas en write.as para que puedas estudiar cómo están hechos, e incluso copiarlos por completo. Que, de hecho, acabo de cambiar un poco el CSS de este blog para que utilice más el ancho de la pantalla, sin realmente cambiar nada de la apariencia (de eso me encargo después). Les dejo ese CSS:

body#post article{
    max-width: 75rem;
}

article img{
    display: block;
    margin-left: auto;
    margin-right: auto;
}

En la parte de firma de publicación puedes ingresar un texto que quieras que se agregue a la parte final de todas tus publicaciones.

Y finalmente, en la parte de Verificación, puedes poner la dirección de otro sitio con el que interactúes en la red abierta o el fediverso. Como tu perfil de Mastodon.

Pero no son todas las opciones que podemos modificar. Ya que, si vamos al submenú del nombre de nuestra instancia, vamos a encontrar varios enlaces más.

Por ahora, vamos a enfocarnos en las opciones de administración.

Esta primera pantalla no nos muestra gran información, más que las estadísticas de las publicaciones. Pero justo donde vemos el submenú de esta pantalla, hay tres pestañas, y la que de verdad nos interesa es la de Configuraciones, la segunda.

El host nos dice la dirección de nuestra instancia de WriteFreely. No modificable.

El modo comunidad nos permite saber si está configurada para un sólo usuario, o para varios. Cosa que configuramos al inicializar WriteFreely.

Si configuramos nuestra instancia para múltiples usuarios, se activan cinco opciones más.

La primera opción es la página de inicio para usuarios no registrados. Al alojar varios blogs, podría haber diferentes páginas, e incluso hay un feed general de todos los blogs registrados (de hecho, así está configurada esta instancia, al tener un usuario para el blog en español, y otro para el blog en inglés, y la página de llegada es ese feed).

La opción de registros abiertos permite decidir si quieres que personas externas puedan registrarse a tu instancia.

La opción de permitir borrado de cuenta permite si los usuarios pueden borrar sus cuentas (y sus blogs) cuando lo deseen, o si sólo la administración puede eliminar usuarios.

La opción de permitir invitaciones es útil cuando los registros están cerrados, ya que permite decidir si los usuarios registrados pueden invitar gente, si sólo la administración puede invitar gente, o si las invitaciones están bloqueadas.

Y finalizando con las opciones para instancias multiusuario, el Lector permite habilitar o deshabilitar el feed de todos los blogs de la instancia.

Volviendo a las opciones generales, la opción de instancia privada limita el acceso a los blogs a gente que tenga una cuenta en la instancia. Eso puede ser útil para, digamos, comunidades privadas como reporteros de un periódico local.

La opción de Federación permite que tu blog pueda ser buscado en el fediverso. Por ejemplo, ya pude buscar el perfil de la instancia de este tutorial desde mi perfil de Mastodon.

La opción de estadísticas públicas permiten que se puedan monitorizar las estadísticas de la instancia por servicios como Fediverse Observer.

La opción de Monetización web permite recibir micropagos de visitantes a tu blog. Pero no la he explorado tan a fondo porque honestamente no me interesa recibir ingresos por este blog. Pero si eres un periodista independiente, puede serte útil explorar esta característica.

Y finalmente, la opción de longitud de nombre de usuario permite configurar qué tan corto puede ser un nombre de usuario. Podrías configurar nombres de usuario tan cortos como un caracter, o tan largos como quieras.

Estas son las opciones básicas pero más importantes que puedes configurar desde La interfaz de tu navegador. Pero hay más opciones que puedes modificar desde el archivo de configuración de WriteFreely, que se encuentra ubicado junto al ejecutable (/srv/http/writefreely/config.ini en Arch, y /var/www/html/writefreely/config.ini en Debian). Y el proyecto de WriteFreely tiene una página dedicada a detallar las opciones modificables más a detalle, aunque esta está en inglés.

Traducción de (gran parte de) la interfaz de usuario

Hasta ahora, hemos visto la interfaz de WriteFreely en inglés (aunque he explicado sus opciones en español). Pero ¿realmente podemos cambiar la interfaz del blog por completo al español? Honestamente, no. Hay cosas que sí se deben cambiar desde el código fuente para lograr una interfaz al 100% en español. Y no sé lo suficiente sobre el lenguaje go (por no decir que no sé nada) para modificar el código fuente de WriteFreely. Lo que sí sé es lo suficiente de HTML para modificar los archivos de las plantillas que utiliza el programa para que puedan mostrarse en español.

De hecho, ya me encargué de modificar las plantillas para esta instancia. Dejo una comparativa de cómo quedaría la página de personalización de blog tanto para la instancia de este tutorial sin modificar, como para esta instancia ya modificada.

Y si quieres descargar las plantillas modificadas al español, convenientemente tengo un archivo zip que puedes descargar haciendo clic aquí. Una vez descargados estos archivos, sólo hay qué extraerlos y reemplazar las carpetas en el servidor.

Debes tener en cuenta que estos archivos son para la versión 0.15.1, que al día de escribir esto es la última versión. Podría actualizar los archivos con cada versión que salga, pero conociéndome, se me va a olvidar en algún punto.

Habilita las suscripciones por correo electrónico

Muy bonito que te puedan seguir desde el Fediverso, y todo. Pero ¿qué hay de los que no tienen cuenta por estos lares, pero quieren seguir nuestras publicaciones? Bueno, pues además del feed RSS tenemos la opción de habilitar el correo electrónico para suscripciones y recuperación de contraseña. Sin embargo, no se encuentra integrado dentro de WriteFreely como tal, sino que dependemos de Mailgun, un servicio externo gratuito, aunque con características adicionales de pago. Vamos a revisar la configuración de la cuenta para agregarla a WriteFreely.

La página de registro de Mailgun es bastante sencilla y directa, incluso todavía más que la de Porkbun.

Y una vez que llenamos el formulario, la cuenta está creada, pero no activa. Debe ser validada primero, como se indica en el banner de arriba.

Para validar nuestra cuenta, debemos ingresar nuestro número telefónico, seleccionando el país.

Una vez ingresado tu número, recibirás un mensaje de texto con un código para completar la validación. Lo introducimos, y ya nuestra cuenta estará validada.

Ahora, iremos a la pestaña de Get Started para comenzar con la configuración.

Incluso, tendremos nuestro siguiente paso resaltado en este centro de control. Lo que nos facilita la guía de configuración de Mailgun. Vamos con la creación de la Llave API.

Sólo le daremos un nombre a la API que crearemos. No debe ser realmente algo rebuscado. Y una vez que tengamos el nombre, tendremos la llave creada.

Cópiala y guárdala en un lugar seguro.

Para el siguiente paso, que es enviar un correo electrónico de prueba, tendremos dos opciones. A través de API, o por cliente SMTP.

Por API, tenemos los códigos de diferentes lenguajes para integrar en los proyectos.

Y por SMTP es más acorde con lo que hemos usado desde siempre con cualquier aplicación de correo electrónico. Iniciar sesión, y eso.

Pero por ahora, ignoraremos el email de prueba. :P

Lo que nos interesa es la siguiente parte, que es la de agregar dominio personalizado.

En el apartado de Domain name, pondremos nuestro dominio, y le daremos al botón azul. Lo que nos llevará a la siguiente pantalla.

Esta información nos va a servir para introducirla en nuestro panel de control de Cloudflare dentro de las configuraciones de registros DNS de nuestro dominio. Para introducirlo, vamos al inicio de la cuenta, hacemos clic en nuestro dominio, y en el panel de la izquierda, seleccionamos la opción de DNS. Deberíamos estar aquí.

Y para agregar los registros de Mailgun a Cloudflare, sólo presionamos el botón azul de Agregar registro, lo que nos abre estos campos.

Ahora, seleccionamos el tipo que nos da Mailgun, y copiamos el host de Mailgun y lo pegamos en el nombre de Cloudflare, y el valor de Mailgun va en el contenido de Cloudflare. Hacemos esto por cada entrada que nos da Mailgun, y en el caso de la entrada CNAME deshabilitaremos el interruptor de proxy.

Opcionalmente, podemos poner el comentario en Cloudflare para indicar que esos son los registros de Mailgun. Yo lo puse por organización, pero no es necesario.

Una vez que hayamos terminado de agregar todas las entradas, en Mailgun presionamos el botón de Verificar que se encuentra hasta arriba. Si lo hicimos bien, incluso recibiremos un correo electrónico indicando que la configuración fue exitosa.

Ahora, en Mailgun, vamos a generar la nueva API de envío de correos para nuestro dominio, yendo a la pestaña de claves de envío.

Al presionar el botón de Agregar clave de envío, volveremos a configurar una nueva, esta específica para producción en nuestro blog. Le daremos un nombre, y se nos muestra la clave generada una sola vez. Es importante que la copiemos, porque la utilizaremos en un momento.

Ahora, vamos a configurar las claves directamente en WriteFreely. Para ello, abriremos el archivo de configuración.

Desde Arch:

nano /srv/http/writefreely/config.ini

Desde Debian:

nano /var/www/html/writefreely/config.ini

Y en este archivo, vamos a buscar las siguientes lineas.

[email]
domain          = 
mailgun_private = 

En domain vamos a poner nuestro dominio, y en mailgun_private la clave que acabamos de generar.

Guardamos el archivo, y reiniciamos el servicio de WriteFreely.

sudo systemctl restart writefreely

Y ahora, si nos vamos a las opciones de personalización del blog, en las opciones de actualizaciones, veremos una nueva opción, para habilitar las suscripciones por correo electrónico.

Una vez que están habilitadas, en la página principal de tu blog, hasta abajo, los usuarios externos pueden ingresar su correo para comenzar la suscripción.

Una vez que lo ingresen, deben confirmar su suscripción en su bandeja de entrada.

El mensaje de confirmación luce más o menos así.

Y una vez que nuestros suscriptores confirmen su suscripción, y enviemos una publicación, nuestros suscriptores por correo recibirán las publicaciones 15 minutos después de haberlas posteado. Por ejemplo, voy a copiar el texto de un generador de texto Lorem Ipsum sólo por propósitos de demostración del correo electrónico. Y tras un rato, la tendremos disponible tanto en el fediverso como enviada al correo electrónico.

¡Finalmente hemos terminado de instalar y configurar WriteFreely, y ya podemos publicar nuestros pensamientos en internet! Aunque no es todo lo que podemos hacer con el servidor, aprovechando las ventajas del proxy inverso.

Aplicaciones web adicionales

Si en algún momento decides que quieres hacer otro sitio web independiente de WriteFreely, podemos crear otro directorio para apuntar a un subdominio que podemos crear, sin necesidad de comprar otro. Que de hecho, yo ya hice un subdominio para otro proyecto que quiero hacer. Este de hecho es menos importante que el del dominio que compré para este tutorial, así que para este sí les digo que planeo hacer una guía dinámica de comandos, habilidades, estilos de combate y golpes finales para Kingdom Hearts Birth by Sleep Final Mix. Estoy consciente de que ya existe un sitio web similar (muy bueno por cierto), pero no está completo con lo que quiero integrar, además de que carece de opciones para visualizar los comandos en diferentes idiomas. Por ejemplo, cambiar libremente entre inglés, español, japonés, italiano, francés y alemán. Pero me estoy desviando del tema.

Este proceso lo voy a hacer desde mi servidor principal, ya no desde el del tutorial. Para que ya quede de una vez. Mi servidor está en un sistema Raspberry Pi OS (basado en Debian), pero igual proveeré instrucciones para Arch.

Primero, yo recomiendo crear una carpeta al lado de la carpeta principal de WriteFreely. En mi caso, sería en /var/www/bbs, y poner ahí tus archivos del sitio adicional. Por ahora, sólo tengo la página de prueba.

Una vez creada la carpeta y puestos los archivos, vamos a habilitar un nuevo puerto y un nuevo host de proxy inverso para nuestro subdominio.

Para lo primero, vamos a modificar la configuración de Apache para pasar tráfico por más puertos.

Desde Arch modificaremos el archivo principal.

sudo nano /etc/httpd/conf/httpd.conf 

Desde Debian, será el archivo de puertos.

sudo nano /etc/apache2/ports.conf

Vamos a buscar la linea que dice Listen 80, y justo debajo pondremos una nueva linea con un nuevo puerto. En mi caso, utilicé el puerto 8084.

Listen 80
Listen 8084

Guardamos nuestro archivo, y ahora modificaremos el archivo de hosts virtuales para el proxy inverso.

Desde Arch:

sudo nano /etc/httpd/conf/extra/httpd-vhosts.conf 

Desde Debian:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Y debajo del contenido que habíamos agregado al inicio, pondríamos el siguiente contenido:

<Directory /ruta/al/directorio/creado>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

<VirtualHost *:8084>
	DocumentRoot /ruta/al/directorio/creado
</VirtualHost>

Una vez habiendo creado el host virtual, reiniciamos el servicio de Apache.

Desde Arch:

sudo systemctl restart httpd

Desde Debian:

sudo systemctl restart apache2

Ahora, vamos a movernos al panel de control de Zero Trust de Cloudflare a crear el subdominio.

Una vez ahí, vamos a la sección de Redes en la parte de la izquierda, y una vez ahí, al centro, vamos a ver nuestro túnel.

Le damos a nuestro túnel, y en el panel de la derecha, al botón de Editar. En el panel que aparece, le damos a la segunda pestaña de Nombre de host público. Debemos estar en este panel.

Si presionamos el botón de Agregar un nombre de host público, avanzamos a esta pantalla. Que convenientemente ya llené con los datos de mi subdominio como demostración. Es importante que en Tipo de servicio, seleccionemos HTTP, y no HTTPS.

Y cuando le damos al botón de Guardar nombre de host, ya aparecerá de forma automática en nuestro túnel.

Y podremos ver el sitio separado también.

Comentarios finales

Finalmente hemos terminado con este viaje de configurar todo nuestro servidor desde cero hasta tener una instancia de WriteFreely para poder tener nuestro blog completamente funcional, y potencialmente extender las capacidades de nuestro servidor para ofrecer más servicios.

Fue una experiencia con la que aprendí mucho, tanto al configurar el servidor como tal como incluso escribiendo este tutorial. Sé que es una publicación demasiado extensa, pero pienso que, al cubrir todos los puntos de forma bastante detallada, puede ayudar a muchas personas a no tener qué realizar el proceso buscando tutoriales separados para poder lograr este propósito. Porque, seamos honestos. El tutorial que se encuentra disponible en la página oficial de WriteFreely no detalla muchas cosas sobre la configuración de manera detallada, e incluso esta publicación podría generar algo de preguntas.

Por lo que me pongo a su total disposición para ayudar en lo que pueda. Tanto desde mi perfil en Mastodon como por mensaje a Signal.

¡Nos vemos en la próxima publicación!

 
Leer más...

from Val 🏳️‍⚧️ (En)

This post, rather than being a tutorial, is more a Storytime about what I lived while wanting to mount my own blog in my own equipment instead of renting a VPS.

That said, while I will try to do this from a general point of view, I will still focus on making this process exclusive for Linux, because, in my humble opinion, is more versatile, and more on point with the equipment I chose, besides not consuming as many resources as Windows or Mac. I mean, you could. But I don't really see the point. :P

It's important to clarify that you do require a monetary spending. Assuming you already have your own equipment and a stable internet connection, you'd require to pay for the domain for your server. It would really be the only extra spending required, and I will cover that in further detail in its corresponding section.

And for the purposes of this tutorial-storytime, I'll do the process on another equipment, with an estimated timeframe of five hours. It seems like a lot of time, but it'll be ready on the same day, if you dedicate the time to it.

Contents

  1. Choosing the equipment
  2. Preparing the server
    1. Apache: The web server per se
    2. MariaDB: Server stored database
  3. Reverse proxy vs Standalone server: What's more convenient?
  4. Get your own address for your instance
  5. Dynamic DNS vs Cloudflare Tunnel
    1. Registration on Cloudflare for Teams
    2. Install and configure Cloudflared
    3. Create and setup access tunnel
    4. Create the DNS records to point to your equipment
  6. Let's create the WriteFreely blog!
    1. Download and install WriteFreely
    2. Database initialization and WriteFreely setup
    3. Write your first post
    4. Configuring your blog options
    5. Translating (most of) the User Interface
    6. Enable email subscriptions
  7. Additional web applications
  8. Final notes

Choosing the equipment

Let's start from two perspectives. The first one is that you have an old computer you don't use very often, but still works, and has a 64 bits processor. You can install a minimalist or web server-oriented operating system like Arch Linux or Ubuntu Server to your computer, that although those are command-line systems, it really is all you need to setup a web server.

And the second one, is that you don't really have an extra equipment you can use, and the one you have is not that viable to use as a server because you use it to play games or you use it for work, or to translate webcomics (guilty of that last one :P). So, you'd need to acquire a new equipment. Although there are options for cheap devices. For example, second-hand or pawn shop computers, or the option I chose, a single board computer, like the Raspberry Pi. I picked the Raspberry Pi 5 4GB of RAM, and a 64GB MicroSD card, although based on my experience, even the Raspberry Pi Zero 2 W would work really well. Besides, you can buy kits on eBay and Amazon.

If you pick a second-hand computer, same thing. Arch or Ubuntu Server and y'all good. And if you pick a Raspberry Pi, you can format the MicroSD card to boot up using Raspberry Pi Imager. Super recommended, because it allows you to install the lite version of Raspberry Pi OS (and other systems) and apply preset configurations, like username and password, WiFi network, and enable SSH access by default.

If you use the Raspberry Pi, to know the IP address it has, you can connect a keyboard and display to your equipment, and run the ifconfig command, which will give you an output similar to this one:

Output of the ifconfig program, highlighting the wireless adapter section

If this is not an option, you can enter the router configuration (usually going to 192.168.100.1 on your browser, but it varies between different routers), and look up for the connected devices, either via Ethernet or WiFi, and you can also locate its address.

Cutout screenshot of the configuration of a router, showing a device IP address

With this info, you can connect through any SSH client (even the command line of Windows 10 and 11) using the command ssh [user]@[IP address], to be able to keep setting up your equipment from another place, and even access to the files using SFTP. I'll show Thunar (one of Linux file managers) as an example, which works directly.

Screenshot ofSSH login via Thunar file manager

By entering the user and the address, we're asked the password.

Screenshot of Thunar, showing the root of a SFTP remote computer

And once inside, we're shown the initial directory of the equipment.

Although, there's not a direct access from the integrated file manager in Windows, on its time I used WinSCP, and it really worked well for me, so I fully recommend it. (No screenshots this time, because I don't use WinSCP anymore... nor Windows xd)

Preparing the server

Once we have the computer ready to interact with it, let's install the web server and database software.

On Arch and derivates (Manjaro, Endeavour, Garuda):

sudo pacman -Syu apache mariadb

On Debian and derivates (Ubuntu, Linux Mint, Raspberry Pi OS, Pop! OS, MX Linux):

sudo apt update
sudo apt upgrade
sudo apt install apache2 mariadb-server

This will only install the programs, but it doesn't help us set up anything as is. Let's get into that.

Apache: The web server per se

Before activating the server, the ideal is that we have a basic test web page just to see if the server works. Copying and pasting this code in a text editor should be more than enough.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test web page</title>
</head>
<body>
    <p>Website under construction.</p>
</body>
</html>

Remember saving this code in a text file named index.html

The next part is a little bit confusing depending on if we're making this process on systems based on Arch or Debian, because both the configuration files and the web page location will vary on each case. For example, on Arch, the configuration file is located on /etc/httpd/conf/httpd.conf, and you must place the web files (the index.html file, for example) on /srv/http. But in Debian, things change. Here, the configuration files are saved on /etc/apache2/apache2.conf, and the web files are saven on /var/www/html.

Let's copy our HTML file to the web folder in our system, and enable the Apache service to check if it works.

From Arch:

sudo systemctl enable --now httpd

From Debian:

sudo systemctl enable --now apache2

This command starts the service on demand, and also it schedules the automatic start with each system boot (for example, after a reboot for an update), and that's why you only need to introduce this command once.

And to check if it works, let's open the web page http://localhost. It should look like this.

If you see this, congrats! We have begun with this little project. Which is barely the beginning of this journey. Let's configure a little of the things we don't see.

MariaDB: Server stored database

Before enabling the database service, let's run the next command only on Arch.

sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

Now, we will enable the service. The command is the same for both systems.

sudo systemctl enable --now mariadb

It's also convenient to improve the initial security of MariaDB. Conveniently, we have a command to do that.

sudo mariadb-secure-installation

This command is interactive, and it consists of seven questions. It's really pretty direct and easy to setup, but just in case, let's go in order.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

We're asked the MariaDB root password. We haven't configured it yet, so we'll just press [Enter], and let's go to the next step.

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n]

Here we're asked if we want to use Unix Socket authentication or its standard authentication. Honestly, I don't know the implications of that, and besides, the configuration suggests that, so we'll answer no by pressing [n].

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n]

Here we're suggested to change MariaDB's root password. Tis time, we're gonna answer 'yes', by pressing [Enter].

Immediately we're asked to enter a password we want to use, preferably a different one from any other you might use, but it's up to you. Although if I may do a suggestion, I use a password generator to not think too much about it, and still have a good password. Besides, it's so versatile.

Once you have your password (I suggest saving it on a safe place) you must enter it twice on the window we're running the command. Let's go to the next question.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]

here we're asked if we want to remove guest users. For security, we will say yes, by pressing [Enter].

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]

Obviously we would want the databases to only be accessible from the server itself. So, we will disable remote access on this question, by pressing [Enter].

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]

MariaDB has a test database that we won't need in a production environment. So we will delete it by pressing [Enter] again.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]

Here we simply will reload the database privileges for the changes to be applied immediately, just by pressing [Enter].

And now we have our database clean and ready to continue.

Now, we're gonna get into the MariaDB command line by running sudo mariadb -u root -p. Once you run it, you'll be asked the password we set up a few moments ago. If you did it well, at the end of the command line should appear this indicator, which means we're in.

MariaDB [(none)]>

Once there, let's run these next commands, one by one.

CREATE USER 'writefreely'@'localhost' IDENTIFIED BY '[MariaDB password]';

CREATE DATABASE writefreely CHARACTER SET latin1 COLLATE latin1_swedish_ci;

GRANT ALL PRIVILEGES on writefreely.* to 'writefreely'@'localhost';

FLUSH PRIVILEGES;

exit

The first command creates a specific user for writeFreely on MariaDB, to not interact with it using the root account, which can be dangerous. We also set up the password.

The second one creates the database that WriteFreely will use.

The third command gives permission to the WriteFreely user only to its database, so it won't be able to modify anything else.

The fourth one applies the changes on demand.

And the fifth one closes the MariaDB command line.

For now, we won't cover MariaDB anymore, so let's go to the next part.

Reverse proxy vs Standalone server: What's more convenient?

There are two ways to setup any web server. When it's an only web server, and this one is not too complex, it's recommended to do a standalone server, where that site, and only that site can exist in that server. Which makes the requests to be processed more efficiently, but evidently limits the server scalability, in case you want to host more than one project, like a personal website or even a Mastodon instance. In such cases the reverse proxy is more convenient, where you can host several websites on the same computer, even with different domains, with the disadvantage of the requests to be processed more slowly.

In theory, WriteFreely supports both server types, but as much as I tried, I couldn't make it work on standalone, and I don't want to think too much to make it work like that, so we will do it on reverse proxy.

For that, let's enable the proxy functionality on Apache.

On Arch, it's done by modifying the main configuration file.

sudo nano /etc/httpd/conf/httpd.conf

Search the next lines, one by one, and remove the # symbol at the beginning.

#Include conf/extra/httpd-vhosts.conf

#LoadModule proxy_module modules/mod_proxy.so

#LoadModule proxy_connect_module modules/mod_proxy_connect.so

#LoadModule proxy_http_module modules/mod_proxy_http.so

#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

#LoadModule proxy_http2_module modules/mod_proxy_http2.so

Save with [Control] + [S] and exit with [Control] + [X].

And on Debian, it's done by running two commands.

sudo a2enmod proxy
sudo a2enmod proxy_http

After that, let's restart the Apache service.

On Arch:

sudo systemctl restart httpd

On Debian:

sudo systemctl restart apache2

There's one more thing we can do with the reverse prosy, but for that, we'll need the domain, or the web address we will use for our blog, and set up WriteFreely. Let's go with the first one.

Get your own address for your instance

The websites you visit have an address behind a domain name for you to remember it easily. And register a domain name is not always easy. The most accessible way to obtain a domain name is through a site offering the service. Although you can try to get a free domain through Freenom, I personally don't recommend it that much, because your preferred domain might not be available for registration, and you're limited to just a few Top Level Domains (TLD, the ending part of an address, usually .com or .tk). If you don't have an inconvenient on looking up for a free domain, even if it's not the one you have in mind, it might be a good option.

So, following the recommendation someone made to me before, I now recommend Porkbun because it also offers bomains to pretty accessible prices, costing from USD$1 for first year sale, and annual renewal from $USD5, besides offering varied and funny TLD options, like .lol, .wtf, .pizza, among others.

The registration process is going to the login page and fill the registration form on the right.

The usual. Username, password (or physical access key), email address, personal information, and accept terms and conditions. By completing the registration, you must validate your account with a code you receive in the email, and once your account is validated, you can look up for domains to purchase. And I will purchase one I want for a personal project I plan to do later, but I still don't want to spill the beans.

And here we can see several of the available TLDs to choose. For this domain, I chose .cc because it's not expensive, and that project will be more general. But's let not distract from the topic. Once we select our domain, and we add it to the cart, we can proceed to see it.

From here, we can select for how many years we want to purchase the domain. For now, we will limit to choose one year, and we will click on the [Continue to Billing] button, to introduce our card information. And once the payment goes through, we can see our domain on our list.

Now that we have our domain, let's make it to point to our equipment.

Dynamic DNS vs Cloudflare Tunnel

There are two ways to make the web address to point to our site. The first one is an old reliable for many people, and it's Dynamic DNS. Where we ask our router or our computer to periodically request the server to make the change automatically, and to always point to the public address of our router. And the second one is one I didn't know about until recently, but it's very interesting, and is Cloudflare Tunnel, which makes more or less the same as Dynamic DNS. The difference between them is that the Dynamic DNS works with your real IP address, which might expose you to attacks really easily, and Cloudflare Tunnel does it by routing your IP address through their infrastructure, which adds an additional protection layer.

Actually, when I just started to mount this, I didn't know Cloudflare Tunnel at all, and I wanted to complete the process only with Dynamic DNS.

I won't lie. I was about to give up on this part, because there are internet providers that make the routers to connect to the internet using subnetworks, which is known as NAT. Basically, an IP address is shared among several devices, which makes Dynamic DNS difficult. And with the tunnel you can skip all those network restrictions, and also the Cloudflare infrastructure can help a little.

A very dear friend suggested me to try with Cloudflare Tunnel, and he even sent me a tutorial. And as it was really useful for me, but it's not very detailed, I'll put it here, going into greater detail.

Registration on Cloudflare for Teams

All you must do here is go to the registration page, put your email and password, and verify your email. Once you do all that, you'll be presented with the screen to add the domain we just purchased.

Once we put the domain, and press the Continue button, we'll go to the configuration assistant.

Con la primera opción seleccionada y presionando en Continuar, avanzamos a la siguiente pantalla.

Here we are presented with several plans to select. We don't want to spend another cent, so we'll choose the free one. And by pressing the Continue button, we'll go to the next screen to set up the DNS records

As we will do this process later, we'll click on Continue to activation, and then the Confirm button. We'll go to the Nameserver configuration guide.

Let's follow these instructions. The first point is already covered by logging into Porkbun, so we just have to go to the domain control page on your Porkbun account.

The second point is also covered by default, expanding our domain details, and seeing the Registry DNSSEC section at zero.

And we're going to cover the third point by pressing the edit button located next to the Nameservers section, and at the pop-up window, we put on separated lines the servers shown on Cloudflare.

By pressing the Continue button. it says that the servers will be ready within the next 24 hours, but refreshing the page after five minutes, it shows it's all done.

With the servers ready, and even while they're getting ready, we can proceed with the next step.

Install and configure Cloudflared

Before proceeding with the Cloudflare service installation, we must know what type of architecture our system has. On any Linux system you can do that by running the uname -a command. I'll leave a screenshot with the output of this command on my daily use computer (and the one that will be the test instance), and from my Raspberry Pi (the one for this blog).

Screenshot of two windows showing the output of the command uname. One on a 64 bits PC, and the other on an ARM device

Depending on that last part (highlighted on my screenshot above), is the version we're going to install. If the output of uname contains x86_64, and you're on Arch (or derivates), you got it easy. You can install it with the next command:

sudo pacman -Syu cloudflared

For other configurations, things get complicated. First, it's worth mentioning that, for some reason, the output results of uname and the software version we will download will differ a little. So I'll leave this table with the equivalencies.

Results of uname Architecture
x86_64 amd64
x86 386
arm7l armhf
aarch64 arm64

Based on this, to install it on Debian (and other Linux systems), we're going to run these commands:

sudo wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-{architecture}
sudo mv cloudflared /usr/local/bin
sudo chmod +x /usr/local/bin/cloudflared

It's worth noting that, with this, the way you update Cloudflared (by the way, updates come out at least once a month) will vary, depending on if you install on Arch x86_64 or not. If yes, you just need to run the command to update the whole system.

sudo pacman -Syu

But for everyone else, the command changes a little, by not being tied to the system package manager

cloudflared update

Now that the service is installed, let's configure the tunnel to, finally, making it to pint to our equipment.

Create and setup access tunnel

First, let's create the tunnel, logging in from cloudflared.

cloudflared login

And on the command line, we should get something like this:

A browser window should have opened at the following URL:

https://dash.cloudflare.com/argotunnel?aud=[Private access ID I won't share for security xd]

If the browser failed to open, please visit the URL above directly in your browser.

And it's also possible that a browser opened directly on that address. But in case it didn't open for some reason, copy and paste it on your browser. Which should open something like this.

And once we select the domain we created a few moments ago, this window will pop up.

Once we click the Authorize button, we can close the browser. And now we can create the tunnel to make it an automatic service. For that, we will run the next command:

cloudflared tunnel create [Name you want to give the tunnel]

And it should give you an output similar to this one.

Tunnel credentials written to /home/vo/.cloudflared/[Long UUID].json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel [Tunnel name] with id [Long UUID]

Now, let's create the configuration file for Cloudflared with the tunnel information.

sudo nano ~/.cloudflared/config.yml

And we're going to put this text on that file:

tunnel: [Long UUID]
credentials-file: /home/[your user]/.cloudflared/[Long UUID].json

ingress:
  - hostname: [Porkbun domain]
    service: http://localhost:80
  - service: http_status:404

Once we have created this text file, now let's create the DNS records. We're almost there.

Create the DNS records to point to your equipment

There are two ways to create them. By hand and directly from Cloudflared. I honestly don't know how to do it by hand, so let's let Cloudflare do the job for us with the next command:

cloudflared tunnel route dns [Long UUID] [Domain]

And just like that, on our Cloudflare control center, the DNS records already appear for them to point to our equipment.

Now, on the top left on the screen, next to our email address, is the 'back' arrow. We click on it, and then, on that same side, more in the middle, the Zero Trust option is located.

On this new screen, let's go to the Networks menu. We should see this.

If it appears the tunnel we just created a few moments ago, we're going a good way. We click on that, and we will be starting the migration to a new control panel specific for Zero Trust. You just need to follow the presented instructions (you know, next, next, finish), taking in account you can only do this process once. And this screen must appear.

The highlighted command is the one we're most interested in, to install the service once and for all. The full command is not shown, so you have to click it to copy it, and paste it directly on the command line. Once we run the command, the service will be installed and running. Which will allow us to access our test page. Which in my case, I modified it a little.

Now we can forget entirely about Cloudflare and domains. Let's go to the next part of the process.

Let's create the WriteFreely blog!

With all things ready, finally, for everything y'all came for. How to download and setup WriteFreely. Let's start with the download.

Download and install WriteFreely

Do you remember the uname output? Now it's going to be useful to download the appropriate WriteFreely version.

If your architecture is amd64:

wget "https://github.com/writeas/writefreely/releases/latest/download/writefreely_0.15.1_linux_amd64.tar.gz"
tar -xvzf writefreely_0.15.1_linux_amd64.tar.gz
rm writefreely_0.15.1_linux_amd64.tar.gz

If your architecture is arm64:

wget "https://github.com/writeas/writefreely/releases/latest/download/writefreely_0.15.1_linux_arm64.tar.gz"
tar -xvzf writefreely_0.15.1_linux_arm64.tar.gz
rm writefreely_0..15.1_linux_arm64.tar.gz

If your architecture is armhf:

wget "https://github.com/writeas/writefreely/releases/latest/download/writefreely_0.15.1_linux_arm7.tar.gz"
tar -xvzf writefreely_0..15.1_linux_arm7.tar.gz
rm writefreely_0..15.1_linux_arm7.tar.gz

Now, let's configure permissions for the server folders, and move the WriteFreely installation files to the server folder.

On Arch:

sudo chmod 755 -R /srv/http/
sudo mv writefreely/ /srv/http/
cd /srv/http/writefreely/
chmod +x writefreely

On Debian:

sudo chmod 755 -R /var/www/html/
sudo mv writefreely/ /var/www/html/
cd /var/www/html/writefreely/
chmod +x writefreely

Done. WriteFreely is now installed on our server. But it's not configured yet.

Database initialization and WriteFreely setup

First, let's fo through the WriteFreely initial setup.

./writefreely --config

This command is interactive, so let's go step by step through the configurations.

On Server setup, with the [↑] and [↓] let's select Production, behind reverse Proxy, and let's press [Enter]– It will ask us for a port, and we can use whichever we want, although for purposes of this tutorial, I will use 8080.

On Database Setup, let's select MySQL. It will immediately ask u for the database user, where we will put writefreely, and the password we chose when we created the database when se set up MariaDB. Then, we will put the database name, which is also writefreely. We'll leave Host and Port as they are.

For App setup it's completely up to you. Whether you want a glog just for you, you want to create two or more blogs, or you want to create a small writer community. For purposes of this tutorial, I'll leave it on Single User Blog. If that's the case, you'll be asked to create the username, password and the name of the blog. In a few moments I'll also cover the configuration for multiple users.

Next, you'll be asked the public address, which is the domain we acquiredm preceded by https://.

The next question is important, because it ask us if we want to enable federation, for our posts to be propagated on the fediverse. I already talked about it on another post, so I think it would be worth it. I'm gonna enable it for this tutorial.

The next questions are about public usage stats. This doesn't affect the blog functionality per se, but allows services that monitor fediverse activity to access to them. I'll leave that to you.

After finishing this step, we finished the initial setup for a single blog instance, and part of the general configuration.

If we set up the instance for multiple users, there are a few additional steps we must follow. Let's run the next two commands:

./writefreely --init-db
./writefreely --create-admin [Blog username]:[Blog password]

And now, eeryone will run the next command to generate the certificate keys.

./writefreely --gen-keys

Before creating the WriteFreely service, let's finish the reverse proxy setup for the Apache server.

On Arch:

sudo nano /etc/httpd/conf/extra/httpd-vhosts.conf 

On Debian:

sudo nano /etc/apache2/sites-enabled/000-default.conf

The files already there really are preview files we can modify, so let's erase all of the content on these files, and we'll paste the next content.

On Arch:

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        ServerName [Acquired domain]
        ServerAdmin [Personal email, opcional]
        DocumentRoot /srv/http
        ErrorLog /var/log/httpd/error.log
        CustomLog /var/log/httpd/access.log combined
</VirtualHost>

On Debian:

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        ServerName [Acquired domain]
        ServerAdmin [Personal email, opcional]
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Let's save the file, and restart the Apache service.

On Arch:

sudo systemctl restart httpd

On Debian:

sudo systemctl restart apache2

Now, let's create the WriteFreely service for it to run all the time. We'll do it with this command.

sudo nano /etc/systemd/system/writefreely.service

Now, it should show an empty file. Let's fill it out, depending on the system.

On Debian:

[Unit]
Description=WriteFreely Instance
After=syslog.target network.target mariadb.service

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/var/www/html/writefreely
ExecStart=/var/www/html/writefreely/writefreely
Restart=always

[Install]
WantedBy=multi-user.target

On Arch:

[Unit]
Description=WriteFreely Instance
After=syslog.target network.target mariadb.service

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/srv/http/writefreely
ExecStart=/srv/http/writefreely/writefreely
Restart=always

[Install]
WantedBy=multi-user.target

Now, we just have to enable the WriteFreely service.

sudo systemctl enable --now writefreely

And if everything went perfect, we should get something like this when we go to our domain.

Now, let's login with our blog username, which will immeditely take us to the writing screen.

Write your first post

The edition screen is rather simple.

As is, there are not many edition options. So let's explain how it works.

The first line is always the title line. So to give a name to our post, just write something, and press [Enter] twice.

For the post body, we have several text format options. We can write using HTML and Markdown, even interchangeabily. I'll leave a comparative table for what you can do with the different available codes.

HTML Markdown
Headers

<h1>Header</h1>
<h2>Header</h2>
<h3>Header</h3>
<h4>Header</h4>
<h5>Header</h5>
<h6>Header</h6>


# Header
## Header
### Header
#### Header
##### Header
###### Header

Text formatting

<strong>Bold</strong>
<b>Bold</b>
<em>Italics</em>
<i>Italics</i>


**Bold**
__Bold__
*Italics*
_Italics_

Lists

<ul>
<li>Simple list</li>
<li>Simple list</li>
<ul>
<li>Sub-element</li>
</ul>
</ul>
 
<ol>
<li>Numbered list</li>
<li>Numbered list</li>
<ol>
<li>Numbered lit</li>
</ol>
</ol>


* Simple list
* Simple list
  * Sub-element

1. Numbered list
2. Numbered list
  1. Numbered list

Links

<a href="https://val-vgms.gay/vo">World's best blog</a>
<a href="mailto:[email protected]">Send an email</a>


[World's best blog](https://val-vgms.gay/vo)
[Send an email](mailto:[email protected])

Images

<img src="https://i.snap.as/T05UTpx.jpg" alt="Cosmic radiation" />


![Cosmic radiation](https://i.snap.as/T05UTpx.jpg)

Quoted text

<blockquote>The quick brown fox
jumps over the lazy dog.

<i>Microsoft on its font face viewer software</i>
</blockquote>


> The quick brown fox
> jumps over the lazy dog.
> 
> _Microsoft on its font face viewer software_

Code blocks

<pre>
<code class="language-ini hljs">
[Section]
; Comment
Key = Value 1
Another_key = Value 2
</code>
</pre>


```ini
[Section]
; Comment
Key = Value 1
Another_key = Value 2
```

There are also things you can't do with Markdown, but you can do with HTML. More specifically, the tags <iframe>, <audio> and <video>.

And once you have entered some text, and clicked the Publish button...

...it will appear to share it with the world.

Once we have made our first post, let's customize our blog.

Configuring your blog options

We have several options for our blog. For that, let's go to the menu on the top left on the screen.

Now, on this new screen, we're going to see several options. Let's explain them all.

The first two text fields are the blog name and description. Completely personal, so I can't guide you on that.

On the URL section, we can see the public address, and if we enabled federation, we will alsoo see our fediverse handle. Useful if we want to be followed on Mastodon, Friendica, Pixelfed, and other fediverse platforms.

On the Visibility section, you can say if you want your posts to be visible for anyone, people with the link, only you when you login, or anyone with a password you define.

For the updates, The RSS feed and federation through activityPub are active, so people can follow your blog from their favourite RSS reader, or even from their Mastodon account, to say something.

The display format allows three options. The traditional blog format shows the most resent posts first, and also displays dates. The novel format hides dates and shows the oldest posts first, so you can read them by chronological order. And the notebook format hides the dates, but shows the most recent posts first.

The text render allows us to enable Mathjax to parse mathematic formulas so these can be correctly visualized. Markdown is enabled by default.

The Custom CSS section allows you to change your blog appearance. There are diverse themes on write.as so you can study how they are made, and even copy them in full. And actually, I just changed a little this blog's CSS for it to use more the screen width, without really changing the appearance (I'll do that later). I'll leave you the CSS:

body#post article{
    max-width: 75rem;
}

article img{
    display: block;
    margin-left: auto;
    margin-right: auto;
}

On the Post signature section, you can enter any text you want to be added to the ending on all of your posts.

And finally, on the Verification section, you can put the address of another website you interact with on the open web or the fediverse. Like your Mastodon profile.

But those are not all of the options we can modify. Because if we go to the submenu on the name of our instance, we're ginna find several more links.

For now, we're gonna focus on the Admin options.

On this first screen we don't see much information, besides post stats. But precisely where we see the submenu for this screen, there are three tabs, and the one we're really interested in is the second one, Configurations.

The Host tells us our WriteFreely instance address. Not editable.

The Community mode allows you to know if the instance is set up for single user, or vaious. As we set up on the WriteFreely initialization.

If we setup our instance for ultiple users, we have five more options.

The first option is the landing page for not registered visitors. By hosting several blogs, there might be several pages, and even a general feed for all of the registered blogs (in fact, that's how this instance is configured, by having one user for the English blog and another one for the Spanish blog, and the landing page is that feed).

The option for Open registrations allows you to decide if you want to allow external people to register to your instance.

The Allow account deletion option let's you decide if you want users to delete their account (and blogs) whenever they wish, or if only the administration can delete users.

the allow invites option is useful when the registration is closed, because it allows you to decide ig the registered users can invite people, if only the admins can invite, or if invites are locked.

And finishing with the multiuser instance options, the Reader allows you to enable or disable the blog feed for the instance.

Going back to the general options, the Private instance option limits access to the blogs to people who has an account within the instance. This may be useful for, let's say, private communities like reporters for a local newspaper.

The federation option allows your blog to be searched from the fediverse. For example, I coould search the profile for the instance for this tutorial from my Mastodon profile.

The Public stats options allows the instance stats to be monitored by services like Fediverse Observer.

The Web monetization option allows you to receive micropayments from visitors to your blog. But I haven't explored this option in depth because I donestly don't care about receiving earnings for this blog. But if you're an independent reporter, exploring this feature may be useful for you.

And finally, the username length allows you to configure how short can be a username. You can set username as short as one character, or as long as you wish.

These are the basic but most importan options you can configure from your browser interface. But there are more options you can modify on the WriteFreely configuration file, located next to the executable (/srv/http/writefreely/config.ini on Arch, and /var/www/html/writefreely/config.ini on Debian). And the WriteFreely project has a page dedicated to explain the editable options in further detail.

Translating (most of) the User Interface

So far, we have seen the WriteFreely interface in English. But can we really change the blog interface to Spanish (or any other language)? Honestly, no. There are things that must be changes from the source code to acomplish a fully translated interface. And I don't know enough about the go language (to not say I don't know a thing) to modify the WriteFreely source code. What I do know is enough HTML to modify the template files the software uses for the interface in Spanish.

In fact, I already modified the templates for this instance. I'll leave a comparison for how would look the Customize page for both the tutorial instance without modifications, and this instance already modified.

And if you want to download the Spanish modified templates (for some reason lol), I conveniently have a zip file you can download by clicking here. Once you have this file, you just have to extract them and replace the folders in the server.

You must take in account these files are for version 0.15.1, which at the time of this writing, is the latest version. I might update the files for every new release, but knowing myself, I'm gonna forget at some point.

Enable email subscriptions

Really nice for people to be able to follow you on the Fediverse, and all. But what about people without an account around these parts? Well, besides the RSS feed, we have the option to enable email subscriptions and password recovery. However, it's not integrated into WriteFreely per se, but we have to rely on Mailgun, an external free service, but with additional paid features. Let's review the account setup to add it to WriteFreely.

The registration page for Mailgun is really easy and direct, even more than the one from Porkbun.

And once we fill the form, the account is created, but not active yet. It must be verified first, as indicated in the panel on the top.

To validate our account, we must enter our phone number, selecting the country.

Once you enter your number, you'll receive a text message to complete the validation. We introduce it, and our account will be verified.

Now, we'll fo to the Get Started tab to start the configuration.

We will even have our next step highlighted on this control center. Which will the Mailgun configuration easier for us. Let's go with the API key creation.

We will just give a name we just created. It must not be something elaborated. And once we have our name, the key will be created.

Copy and save it in a safe place.

For the next step, which is sending a test email, we have two options. Via API, or with a SMTP client.

For API, we have codes for different languages to integrate in the projects.

And with SMTP is more on the line on what we have always used with any email app. Login and all that.

But for now, we will ignore the test email. :P

What interests us is the next part, which is adding a custom domain.

On the Domain name field, we will enter the domain, and click the blue button. Which will take us to the next screen.

This information will be useful to enter into our Cloudflare control panel into the DNS records for our domain. To enter it, let's go to the account home, let's click into our domain, and on the left panel, we click on the DNS option. We should be here.

And to add the Mailgun records to Cloudflare, we just press the Add record button, which will open these fields.

Now, we select the type given by Mailgun, and copy the Mailgun host and paste it on the Name on Cloudflare, and the Value in Mailgun goes into Content in cloudflare. Let's do this on each Mailgun providedentry, and in the CNAME entry, we will disable the Proxy switch.

Optionally, we can write into the Cloudflare comment to indicate these are the Mailgun records. I did it for organization, but it's not necessary.

Once we have finished to add every entry, on Mailgun we will press the Verify button located at the top. If we did it right, we will even receive an email indicating the setup was successful.

Now, on Mailgun, let's generate the new email send API for our domain going to the Sending keys tab.

By pressing the Add sending key button, we will set up a new API key, this one for profuction for our blog. We will give a new name, and we will be given a new generated key only once. It's important to copy it, because we will use it later.

Now, let's configure the keys directly on WriteFreely. For that, let's open the configuration file.

On Arch:

nano /srv/http/writefreely/config.ini

On Debian:

nano /var/www/html/writefreely/config.ini

And on this file, let's sear these lines.

[email]
domain          = 
mailgun_private = 

On domain let's write our domain, and on mailgun_private the key we just generated.

Save the file, and restart the WriteFreely service.

sudo systemctl restart writefreely

And now, if we go to the Customize options on our blog, on the Updates section, we will see a new option to enable email subscription.

Once enabled, on the main page for your blog, right at the bottom, external users will be able to enter their email to begin the subscription.

Once they enter it, they will need to confirm their subscription from their inbox.

The confirmation message looks something like this.

And once our subscribers confirm their subscription, and we send a post, our subscribers will receive the posts via email 15 minutes after posting them. For example, I'm going the copy the text of a Lorem Ipsum text generator just for email demonstration purposes. And after a while, we will have it available both in the Fediverse and sent via email.

We finally have completed the WriteFreely installation and configuration, and now we can share our thoughts over the internet! However, it's not everything we can do with the server, taking advantage of the reverse proxy.

Additional web applications

If at some point you decide you want to make another website apart of WriteFreely, you can create another directory to point to a subdomain you can create, without the need to purchase another one. and actually, I already did a subdomain for another project I want to do. This one is less important than the one for the domain purchased for this tutorial, so for this one I can say I plan to do a dynamic guide for commands, abilities, combat styles and finish commands for Kingdom Hearts Birth by Sleep Final Mix. I'm aware there's already a similar website (very good, by the way), but it's not complete with what I want to integrate, besides lacking option to visualize the commands on different languages. For example, change freely between English, Spanish, Japanese, Italian, French and German. But I'm deviating from the topic.

I will do this process from my main server, and not from the tutorial server anymore. For it to be ready from now. My server is on a Raspberry Pi OS system (based on Debian), but I will still provide instructions for Arch.

First, I recommend creating a folder next to the main WriteFreely folder. In my case, it would be on /var/www/bbs, and place there your files for the additional site. For now, I just have the test page.

Once created the folder and placed the files, let's enable a new port and reverse proxy host for our subdomain.

For the first part, we're gonna modify the Apache configuration files to pass the traffic through more ports.

On Arch we will modify the main configuration file.

sudo nano /etc/httpd/conf/httpd.conf 

On Debian, the port file.

sudo nano /etc/apache2/ports.conf

Let's sear for the line Listen 80, and just below it, we will put a new line with a new port. In my case, I used the port 8084.

Listen 80
Listen 8084

Save the file, and now let's modify the virtual host file for the reverse proxy.

On Arch:

sudo nano /etc/httpd/conf/extra/httpd-vhosts.conf 

On Debian:

sudo nano /etc/apache2/sites-enabled/000-default.conf

And below the content we added before, we would put the next content:

<Directory /path/to/the/created/folder>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

<VirtualHost *:8084>
	DocumentRoot /path/to/the/created/folder
</VirtualHost>

Once the virtual host has been created, let's restart the Apache service.

On Arch:

sudo systemctl restart httpd

On Debian:

sudo systemctl restart apache2

Now, let's go to the Cloudflare Zero Trust control panel to create the subdomain.

Once there, let's go to the Networks link on the left panel, and once there, in the middle, we're gonna see our tunnel.

We click on our tunnel, and on the panel on the right, click on the Edit button. On this new panel, we click on the second tab, Public host name. We should be on this panel.

If we click on the Add a public host name button, we will advance to this screen. Which I conveniently I already filled with my subdomain data as a demonstration. It's important that on Service type, we select HTTP, and not HTTPS.

And when we click on the Save hostname button, it will appear automatically on our tunnel.

And we can also see our separate site as well.

Final notes

We have finally finished with this journey to configure our whole new server from scratch to have a WriteFreely instance to have a fully functioning blog, and potentially extend the capacities of our server to offer more services.

It was an experience on which I learned a lot, both to configure this server and even writing this tutorial. I know it's a really extended post, but I think that, by covering every point in great detail, it can help a lot of people to not have to do this process by looking separate tutorials to be able to fulfil this task. Because, let's be honest. The tutorial found in the WriteFreely official page doesn't explain a lot of things in depth, and even this post may generate a few questions.

That's why I make myself available to assist you in every way I can. Both on my Mastodon profile and via Signal messaging.

See ya on the next post!

 
Read more...

from Val 🏳️‍⚧️ (En)

In my previous post, I talked a bit about the existence of alternative social networks, giving special emphasis on the Fediverse, but I didn't really get into detail about which are those. So, in this kind of sequel, I'll mention some of the platforms I know, both the ones I have personally tried, and the ones I've been interested, but have not tried yet.

Contents

  1. The ones I've had the pleasure of try
    1. Diaspora, alternative to Facebook
    2. Mastodon, alternative to X
    3. Bluesky, (another) alternative to X
    4. Pixelfed, alternative to Instagram
    5. WriteFreely, alternative to Tumblr?
    6. Bonus: Signal, alternative to WhatsApp and Telegram
  2. The ones I've been interested in
    1. PeerTube, alternative to YouTube and Dailymotion
    2. Friendica, (another) alternative to Facebook
    3. Lemmy, alternative to Reddit
  3. And so much more

The ones I've had the pleasure of try

Obviously I wouldn't have done any of these two posts if I weren't already in this world. I have even formed communities in some of these platforms. Let's start with the platforms on which I have already had an account, and listen first hand from me what I think of these platforms.

Diaspora, alternative to Facebook

To say the truth, I tried this project back in 2018, and it really didn't convince me, and I abandoned my account.

The idea of decentralization seemed really good to me back then, however, I thought the idea of having to choose who the posts were directed to without a completely defined friend/follower system was pretty incomplete to me. Although this really precise focus for privacy may be okay for people really looking to protect their data from organizations or other malicious people, so it's an option to consider. Also, as I said, several years have passed, so things may have really evolved, so don't just take my word, and better try it yourself.

Link to the project: The Diaspora* Project

Mastodon, alternative to X

I dare to say that, from this list, this one is the most known one, to the point of becoming a representative of the Fediverse.

This microblogging platform is powered with enhanced options for content warnings, custom emojis by instance, different visualization options on PC, adding extra info to your profile (I use it for links, but I have seen other people use it to add their pronouns or skills, to say something), and verification options for content you write on the rest of the internet, among several others. Also, the options for different types of timelines (followers, instance and federated) give more freedom for what you see. And speaking purely from my personal experience, it's easier to form communities once you settle in your instance. And in case you decide the instance you chose is not your place, account migration is relatively easy, although posts (for now) stay on the instance of origin.

Also, the different apps available to interact with this network are wonderful, or at least the ones I've tried on Android and on PC. Sadly, I haven't tried on iOS, and I don't plan to do it soon, so you'll have to live with that doubt... unless you have an Apple device.

Link to the project: Mastodon – Decentralized Social Media

Bluesky, (another) alternative to X

Basically Twitter 2.0, although (for now) without all the toxicity, and what personally hurts me the most, without the option to receive notifications from a specific profile.

Born at first as an internal Twitter project in 2019, wanting to experiment with decentralization and open source, I really consider it a good platform if you're really used to Twitter (or X). Recently, it has evolved pretty much in their moderation politics, and although it technically is a decentralized project, I haven't really heard of another server beyond the main one. However, you can male your username to be your own domain, but honestly, I haven't tinkered that much with that. Although the documentation for mounting your own server is pretty well explained, that's more oriented towards small communities.

It also has its official apps for Android and iOS, and, as they say, they also want to launch image sharing and short videos services.

Link to the project: Bluesky

Pixelfed, alternative to Instagram

Image and video sharing platform simple and to the point.

From my humble point of view, this platform doesn't really offer something new, which in fact is not a negative point, because it allows you to adapt really quickly to the platform. It also has functions for posting stories, post collections (that work as albums), edition filters inside the service itself, and something I do consider interesting, the option to add descriptive texts to pictures. Particularly useful for its interconnection with the Fediverse.

It has official apps for iOS and Android, although they are in beta phase and not all functions are available. Although there are more complete third-party apps. And I do really consider it's worth it.

Link to the project: Pixelfed – Decentralized social media

WriteFreely, alternative to Tumblr?

This is a very simplistic blog platform, and it allows text formatting using Markdown and HTML interchangeably, besides in blog configurations you can customize your blog theme using CSS, which makes it somewhat complex to modify, butt the default appearance is really nice to the eye (although I maybe should work in a gray or dark theme so it doesn't hurt the eyes so much xd).

The default editor doesn't really provide the option to upload pictures to the server, so in theory you should host your pictures in an external server , and link them to your blog with the image tags. But here, yours truly hosts her own instance (in fact, this blog is powered by WriteFreely, and I will soon post a storytime about how I prepared my own server for that), and I'm hosting the pictures directly on the image folder on the server.

Still, there are several good options out there if you can't or don't want to host your own server.

Link to the project: WriteFreely

Bonus: Signal, alternative to WhatsApp and Telegram

This is not a decentralized social network per se, but a private messaging open source app, which means, besides not being under a corporate organization, it can be studied, improved and distributed if you have the knowledge for it.

It has practically everything you'd want from a messaging app. End-to-end encryption, groups, stories, message formatting, pictures, videos, voice messages, and hide a text until you tap on it (spoiler alert, anyone?). As for message backup, you have to manually do it, and these backups are not stored automatically in a server. They are stored on your device as an option to recover it on another one later.

It's worth mentioning that you must first install the app on your phone, with apps for Android and iOS, and then you can sync it with a PC, with clients for Windows, Mac OS and Linux.

And although you do require a phone number to register, this is protected for other people through a username that you share with a link to your profile. Another really good project... if you have more than one contact.

Link to the project: Signal >> Home

The ones I've been interested in

Obviously this is just the tip of the iceberg. There are plenty of platforms to explore, with different purposes, that I've also been interested in, but I haven't tried yet. Let's mention some of them and their main features without going too much into detail.

PeerTube, alternative to YouTube and Dailymotion

Platform to play and share video and streaming. Videos can easily be downloaded, and playback uses P2P protocols so the workload of small servers is reduced, and to improve the experience for everyone in general.

Link to the project: What is PeerTube? | JoinPeerTube

Friendica, (another) alternative to Facebook

Besides the common functions of macroblogging platforms, you can also follow profiles on Diaspora, ActivityPub and Bluesky, directly from your Friendica account. You can also post directly to WordPress and Tumblr.

Link to the project: Friendica – A Decentralized Social Network

Lemmy, alternative to Reddit

It has the capability to post threads with images and links, besides upvote and downvote comments. Although the communities you can create are limited to the instance you join to, you can always comment and follow communities and people in other instances.

Link to the project: Lemmy – A link aggregator for the fediverse

And so much more

Evidently, by being an open space on the internet, there are so many platforms that have been born and perished, and many others still standing. Precisely there's a Wikipedia article listing the existing platforms and protocols for decentralized networks, so we have several options. But I consider the ones on my list to be the most common we can find, making it easier to find communities.

But I insist, not all of these spaces are for everyone, for diverse reasons. So if you decide to stay on the traditional networks, it's okay. Here we don't judge anyone. :P

Officially, I have overexplained this topic, so I better say goodbye, hoping you like these posts. See ya later!

 
Read more...

from Val 🏳️‍⚧️

En mi publicación anterior, mencionaba un poco acerca de la existencia de redes sociales alternativas, haciendo especial énfasis en el Fediverso, pero realmente no entro mucho en detalles acerca de cuáles son. Así que, en esta especie de segunda parte, les menciono algunas de las plataformas que conozco, tanto las que personalmente he probado, como las que me han llamado la atención, pero no las he probado.

Índice

  1. Las que ya tuve el placer de probar
    1. Diaspora, alternativa a Facebook
    2. Mastodon, alternativa a X
    3. Bluesky, (otra) alternativa a X
    4. Pixelfed, alternativa a Instagram
    5. WriteFreely, ¿alternativa a Tumblr?
    6. Bonus: Signal, alternativa a WhatsApp y Telegram
  2. Las que me llaman la atención
    1. PeerTube, alternativa a YouTube y Dailymotion
    2. Friendica, (otra) alternativa a Facebook
    3. Lemmy, alternativa a Reddit
  3. Y las que faltan

Las que ya tuve el placer de probar

Obviamente no habría hecho ninguna de estas dos publicaciones si no hubiera entrado a este mundo ya. Incluso he formado comunidades en algunas de estas plataformas. Comencemos con las plataformas en las que he tenido una cuenta, y escuchen de primera voz lo que opino de estas plataformas.

Diaspora, alternativa a Facebook

A decir verdad, probé este proyecto en 2018, y realmente no me convenció, y abandoné mi cuenta.

Si bien, la idea de la descentralización me pareció demasiado buena en ese entonces, la idea de tener qué elegir a quién estaban dirigidas las publicaciones sin un sistema completamente definido de amigos/seguidores me pareció bastante incompleta. Aunque ese enfoque realmente preciso para la privacidad puede ser acorde para la gente que realmente busca proteger sus datos frente a organizaciones u otras personas malintencionadas, así que es una opción a tomar en cuenta. Además, como dije, han pasado ya varios años, así que las cosas pudieron haber evolucionado, así que no sólo tomes mi palabra, y mejor pruébalo por tu cuenta.

Enlace del proyecto: The Diaspora* Project

Mastodon, alternativa a X

Me atrevo a decir que de esta lista es como que la más conocida, al punto de convertirse en representante del Fediverso.

Esta plataforma de microblogging está potenciada con opciones mejoradas de advertencias de contenido, emojis personalizados por instancia, diferentes opciones de visibilidad en PC, agregar información extra a tu perfil (yo lo uso para enlaces, pero he visto que otra gente agrega sus pronombres o habilidades, por decir algo), y opciones extras de verificación de contenido que escribes en el resto de internet, entre varias otras. Además, las opciones para diferentes tipos de lineas de tiempo (seguidores, instancia y federada) dan mayor libertad de lo que quieras ver. Y hablando estrictamente desde mi experiencia personal, es más fácil establecer comunidades una vez logras aclimatarte a tu instancia. Y en caso de que decidas que la instancia que habías elegido no es el lugar para ti, la migración de cuentas es relativamente sencilla, aunque las publicaciones (por ahora) se quedan en la instancia de origen.

Además, las diferentes aplicaciones disponibles para interactuar en esta red social son una maravilla, al menos las que he probado en Android y en PC. Lamentablemente no he probado en iOS, y no planeo hacerlo pronto, así que se quedan con la duda en ese aspecto... a menos que tú tengas un dispositivo de Apple.

Enlace del proyecto: Mastodon – Red social descentralizada

Bluesky, (otra) alternativa a X

Básicamente Twitter 2.0, aunque (todavía) sin toda la toxicidad, y personalmente lo que más me duele, sin la opción de recibir notificaciones de perfiles específicos.

Surgida en principio como proyecto interno de Twitter en 2019, queriendo experimentar con la descentralización y el código abierto, realmente la considero una buena alternativa si te acostumbraste demasiado a Twitter (o X). Recientemente ha evolucionado bastante en sus políticas de moderación, y aunque técnicamente es un proyecto descentralizado, realmente no he escuchado más allá del servidor principal. Aunque puedes hacer que tu nombre de usuario pueda ser tu propio dominio, pero honestamente no me he metido mucho con esto. Aunque la parte de montar tu propio servidor está bastante bien explicado, eso es más bien orientado a pequeñas comunidades.

También cuenta con sus apps oficiales para Android y iOS, y según dicen, también quieren lanzar sus servicios de compartición de imágenes y vídeos cortos.

Enlace del proyecto: Bluesky

Pixelfed, alternativa a Instagram

Plataforma de publicación de imágenes y vídeos directa y al grano.

Desde mi muy humilde punto de vista, esta plataforma realmente no aporta nada novedoso, lo que de hecho no es un punto negativo, ya que permite adaptarse realmente rápido a la plataforma. Tiene también funciones para publicar historias, colecciones de publicaciones (que funcionan como álbumes), filtros de edición dentro del propio servicio, y algo que sí considero interesante, la opción de agregar texto descriptivo a las imágenes. Particularmente útil por su interconexión con el Fediverso.

Tiene apps oficiales para iOS y para Android, aunque se encuentran en fase beta y no todas las funciones están disponibles. Aunque también existen aplicaciones no oficiales más completas. Y realmente sí considero que vale la pena.

Enlace del proyecto: Pixelfed – Decentralized social media

WriteFreely, ¿alternativa a Tumblr?

Esta es una plataforma de blogs demasiado simplista, pero que justo evita las distracciones en lo posible sin nada de elementos vistosos a la hora de escribir.

Tiene varias opciones para escribir los blogs, y permite el formateo de textos utilizando Markdown y HTML de forma intercambiada, además de que en las configuraciones del blog puedes configurar el tema de tu blog utilizando CSS, lo que lo hace algo complejo de modificar, pero la apariencia por defecto realmente es muy agradable a la vista (aunque tal vez deba trabajar en un tema gris u oscuro para que no lastime tanto a los ojos xd).

En el editor realmente no da la opción de subir imágenes al servidor, por lo que en teoría deberías alojar tus imágenes en un servidor externo, y vincularlas a tu blog con las etiquetas de imágenes. Pero aquí su servidora se montó su instancia (de hecho, este blog está potenciado por WriteFreely, y pronto se viene storytime de cómo monté mi servidor para ello), y estoy alojando las imágenes directamente en las carpetas de imágenes del servidor.

Aún así, también hay muy buenas opciones ahí afuera por si no quieres o no puedes montar el servidor.

Enlace al proyecto: WriteFreely

Bonus: Signal, alternativa a WhatsApp y Telegram

Esta no es propiamente una red social descentralizada, sino una aplicación de mensajería privada de código abierto, lo que significa que, además de no estar bajo ninguna organización corporativa, puede ser estudiada, mejorada y distribuida si tienes los conocimientos para ello.

Tiene prácticamente todo lo que esperarías de una app de mensajes. Encriptación de punto a punto, grupos, historias, formato de mensajes, imágenes, vídeos, mensajes de voz, y ocultar un texto hasta que lo pulses (¿alerta de spoiler, alguien?). En cuanto a los respaldos de mensajes, sí debes hacerlos tú a mano, y estos no se almacenan en un servidor automáticamente. Se almacenan en tu dispositivo como opción para recuperar en otro más adelante.

No está demás mencionar que primero se debe instalar en el teléfono, con aplicaciones para Android y iOS, y después se puede sincronizar con la computadora, con clientes para Windows, Mac OS y Linux.

Y aunque sí requieres un número telefónico para registrarte, este está protegido para terceros a través de un nombre de usuario que compartes a través de un enlace a tu perfil. Otro proyecto que vale la pena... si tienes a más de un contacto.

Enlace al proyecto: Signal >> Inicio

Las que me llaman la atención

Obviamente esto es sólo la punta del iceberg. Hay bastantes más plataformas qué explorar, con diferentes propósitos, que también me han llamado la atención, pero que no he probado. Vamos a mencionar algunas de ellas y sus características generales sin entrar tanto en detalles.

PeerTube, alternativa a YouTube y Dailymotion

Plataforma para reproducir y compartir vídeos y streaming. Los vídeos se pueden descargar fácilmente, aunque la reproducción web utiliza protocolos P2P para que la carga de los servidores pequeños se aligere, y mejorar la experiencia para todos en general.

Enlace al proyecto: ¿Qué es PeerTube? | JoinPeerTube

Friendica, (otra) alternativa a Facebook

Además de las funciones comunes de las plataformas de macroblogging, puedes seguir perfiles de Diaspora, ActivityPub y BlueSky directamente desde tu cuenta en Friendica, además de poder publicar directamente a WordPress y Tumblr.

Enlace del proyecto: Friendica – A Decentralized Social Network

Lemmy, alternativa a Reddit

Cuenta con la capacidad de publicar hilos con imágenes y enlaces, además de poder votar comentarios hacia arriba y hacia abajo. Aunque las comunidades que puedes crear están limitadas a la instancia a la que te unes, siempre puedes comentar y seguir comunidades y personas en otras instancias.

Enlace al proyecto: Lemmy – Un agregador de enlaces para el fediverso

Y las que faltan

Evidentemente al ser un espacio abierto en internet, existen muchas plataformas que han nacido y perecido, y muchas otras que siguen en pie. Justamente en Wikipedia existe un artículo listando las plataformas y protocolos existentes para redes descentralizadas, así que por opciones no paramos. Pero considero que las de esta lista son las más comunes que podríamos encontrar, por lo que sería más sencillo encontrar comunidades.

Pero insisto, no todos estos espacios son para todos, por diversos motivos. Así que si deseas permanecer en las redes tradicionales, pues, está bien. Aquí no se juzga a nadie. :P

Oficialmente ya me extendí demasiado en este tema, así que mejor me despido, esperando que estas publicaciones hayan sido de su agrado. ¡Seguimos leyéndonos!

 
Leer más...

from Val 🏳️‍⚧️ (En)

Let's face the reality. The changes in social politics in United States has caused that social networks adopt guidelines that further seek to affect the rights of vulnerable people, like women, people of color, migrants in USA, and LGBTIQPA+ people. And that's why a lot of people search alternatives in other networks. But what are our options? Well, I'll share some of my experience.

Contents

  1. A little bit of background
  2. How do alternative networks work
  3. Troubles in the paradise: Not everything is so perfect
  4. Blocking the big corporations
  5. Personal comments: What are my plans?
  6. Final comments: What can I suggest you to do?

A little bit of background

It's not that everything went downhill overnight. In fact, one of the first times I saw a migration from a social network was when Elon Musk bought what used to be Twitter back then in the now distant year of 2022, and a lot of people decided to look for alternatives. The ones that resonated the most were Tumblr and Mastodon.

And now, recently, in mid-January 2025, Meta (owners of Facebook, Instagram, Threads and WhatsApp) changed their moderation guidelines “in favor of a greater freedom of speech”, but that now they allow certain dehumanization to the vulnerable groups mentioned above, distorting the rules of such speech. And this time, several movements have organized to migrate to these alternative networks, such #VámonosJuntas and #GlobalSwitchDay to migrate to Mastodon. But not everyone is aware of this platform, or others like BlueSky, Pixelfed, Friendica or the ones you can think about.

But these networks have something special that separates them from networks managed by corporations like Meta, X corp, Microsoft and others. Most of them are managed by individuals like you and me. But how do they do it?

How do alternative networks work

Now, the good stuff on this matter. The interesting point is that most of the networks mentioned on this post is that they don't rely only on one server, but on several servers speaking the same language, interconnected between them, located in several places all around the world. This is known as decentralization. Because, unlike these networks, traditional networks have their servers on one central location, and they depend on only one organization.

And platforms like Mastodon, Pixelfed, or even BlueSky don't rely only on a single person. Anyone with the knowledge and will can create a server to extend the platform of their preference, or register on the server of anyone else. There are several ways to make the decentralized networks grow.

The first one that I knew was based on this principle was Diaspora, and this one uses its own protocol, called Diaspora protocol (yeah, they didn't want to think too much with this) to communicate with all of the servers of this network.

BlueSky also uses its own protocol, this time called Authenticated Transfer Protocol. This one basically does the same thing as the Diaspora one, but this seems to be exclusive (at the moment) for BlueSky. Although I don't doubt that it will soon be available to interact with the apps they will create.

And Mastodon, Pixelfed and WriteFreely, among others, use the ActivityPub protocol to interact between them. This protocol was created by the W3C, or the consortium that defines the used standards around all of the internet back then in 2018, however, the concept of Fediverse was created, as they say, in 2016. Which is based, as the name says, in the federation between servers.

What do I mean with federation? Simple. Each server, or instance, can decide to federate (or share and receive content) with another instance. For example, let's say that Emily, Rain and Chiaki are good friends, and they all chat between them. Chiaki also befriends Nagisa and Theo. Eventually, Theo befriends Emily and Rain, too. At some point, Emily decides she doesn't want to be friends with Theo, but still wants to talk to Chiaki and Nagisa, and Theo still talks to Nagisa, Chiaki and Rain. Theo cannot communicate with Emily anymore.

Illustrated, it would be more or less like this, with the colored lines indicating who can communicate with who.

This was the first rough example that I could think of, but I hope it can serve as an illustrative point of what the federation is.

Going back to the topic of servers, we can see that each person here acts as an instance of one of these platforms.

And all of these networks are part of this magical world of The Fediverse. I'll leave this illustration of some of the platforms that are part of it.

As you can see, there are platforms speaking more than one protocol, and that's why even networks not speaking the ActivityPub protocol do form part of the Fediverse. As a person that you may know that speaks two or even three languages (yours truly, for example, also has the Spanish version of this blog, but that's not the point :P).

Speaking a little bit more in depth about instances, there are obviously all kinds of instances. Both for general purposes like the ones we're used to, and for specific purposes or for certain communities. For example, my current Mastodon profile is in an geek-themed instance, more focused in videogames, comics and tech (and it's a coincidence that I fill the profile, although I also share my personal drama), my Pixelfed profile is in a general purpose instance, but with preference for the Spanish language, and obviously my WriteFreely instance is completely closed to, well, basically being a monument to my ego. Also, there are instances dedicated to Train fans, or to be feminist transinclusive spaces, or why not? Furry communities for the Fediverse.

I'm generally well settled with my presence in the Fediverse, but of course there are not so pretty stuff in there. Allow me to explain myself.

Troubles in the paradise: Not everything is so perfect

By being an open space where every kind of people can enter, and all kinds of communities can exist, obviously there are undesirable communities. From far-right communities to entire instances dedicated to sharing adult content (sadly, not necessarily with adults. I don't want to explicitly say it, but you get me). And even decent communities can have troubles, more likely related with content moderation. For example, on really big instances, moderators can't handle too many people, and a lot of shady things end up seeing the light. And on really small instances, you can have issues with the people over there. In fact, a few days ago I migrated from a small Mastodon instance to a somewhat bigger but well administered one, due to personal issues I had with someone over there. I won't spill my personal life (that much xd), but I do say I don't feel like walking on eggshells anymore.

With that said, several people whom I have interacted with say they're really well in the Fediverse, and don't tend to find that kind of inappropriate content. However, we must thank moderators and administrators of the instances for that, who are in charge of overseeing the content and defederate (or stop communication) and blocking those kinds of instances. That's why it's important to go to an instance with a good moderation team that it's present and interacts with the instance.

Furthermore, there have been efforts by corporations, wanting to integrate with the Fediverse, like Meta with Threads and Automattic with Tumblr. Honestly, at first I thought it could be a good idea so more people could know this world. But as you may know, these corporations like to collect data and sell it to announcers, besides being able to be used for politic manipulation (as, some people say, it happened with X in the 2024 USA elections). That's why they represent big threats to the privacy of people in the Fediverse that precisely seek to escape those networks.

Blocking the big corporations

With this, there are some initiatives to stop communicating with the servers of these corporations. The most important ones, the FediPact for Meta, and the FediPact 2 for Automattic, both initiatives organized by Vanta Rainbow Black. These initiatives show a great feeling of anger and fighting against corporations so they don't contaminate these spaces with their toxicity. Or at least, that's how I see it.

These are initiatives that instance administrators sign to compromise to block these corporations, and accessing the links of these FediPacts, you can see the instances that have already signed them. Although I'll be honest. These sites are very fuck my eyes, so I recommend that, if you're able to, reduce your screen brightness before entering. ^^;

Fun fact: As creator of this space connected with the Fediverse, I also wanted to sign these pacts and block these servers. But it seems that, as WriteFreely doesn't have a federated timeline, I think the software developers didn't think of adding the option to defederate from WriteFreely, so, in the meantime, I have my hands tied.

With that said, there are sites like Fediverse Observer and Fedi Garden that can help you locate an instance of the type of platform of your preference, under certain parameters. Like language, location, size, platform, and topics. And in the particular case of Fedi Garden, it only shows instances that have signed the FediPact.

Personal comments: What are my plans?

Obviously I'm writing this post mentioning these alternative networks for a particular reason. As user of social media and free software enthusiast, my plan is to slowly move to these alternative networks. Actually, this process has already started. My main social network where I publish advances of my translations and interact with people is Mastodon, and my X profile has already been deleted since December 2024. Even my Instagram profile and my public Facebook page are being discontinued, and eventually I'm gonna end up deleting those profiles too, keeping only my personal Facebook profile only to keep communicating with my family and friends who don't want to switch to the Fediverse. Because it's also valid not wanting to do it. It's not an obligation, but a recommendation from the bottom of my heart

Final comments: What can I suggest you to do?

Short answer: Nothing xd.

This post is actually more informative to make known this digital world with more freedom. Although I'd personally like that more people were interested in this, I know it's not for everyone. And if you try some of the projects of the Fediverse, and decide it's not for you, it's okay. I'd simply like to see this as a way to expand people's horizons, and if this may sound too idealist, well, maybe I am. In the end, this is merely my personal opinion.

And if you decide to stay, well, please follow me on Mastodon and Pixelfed.


This post is kind of long on its own, and I haven't covered in detail the existing platforms. That's why, I have a second part, dedicated only and exclusively to mention in more detail the existing Fediverse platforms and their main features.

And if you got here, thanks a lot for reading. See ya! :D

 
Read more...

from Val 🏳️‍⚧️

Afrontemos la realidad. Los cambios en la política social en Estados Unidos ha ocasionado que las redes sociales adopten políticas que cada vez buscan afectar más los derechos de las poblaciones vulnerables, como las mujeres, las personas de color, los migrantes en EEUU, y las personas LGBTIQPA+. Y por eso muchas personas buscan alternativas a otras redes. Pero ¿cuáles son nuestras alternativas? Bueno, les comparto un poco de mi experiencia.

Índice

  1. Un poco de trasfondo
  2. ¿Cómo funcionan las redes sociales alternativas?
  3. Problemas en el paraíso: No todo es tan perfecto
  4. Bloqueando a las corporaciones
  5. Comentarios personales: ¿Cuáles son mis planes?
  6. Comentarios finales: ¿Qué te recomiendo a ti?

Un poco de trasfondo

No es que todo haya ido a peor de la noche a la mañana. De hecho, una de las primeras veces que vi una migración de una red social fue cuando Elon Musk compró lo que entonces era Twitter allá por el ya lejano 2022, y mucha gente decidió buscar alternativas. Las que más sonaron fueron Tumblr y Mastodon.

Y ahora, recientemente, a mediados de enero de 2025, Meta (dueños de Facebook, Instagram, Threads y WhatsApp) cambiaron sus políticas de moderación “en favor de mayor libertad de expresión”, pero que ahora permite cierta deshumanización a los grupos vulnerables mencionados arriba, tergiversando las reglas de tales discursos. Y esta vez, se han organizado demasiados movimientos para migrar a estas redes alternativas, como, #VámonosJuntas y #GlobalSwitchDay para hacer la migración hacia Mastodon. Pero no todos conocen esta red, u otras como BlueSky, Pixelfed, Friendica o las que se les ocurran.

Pero estas redes tienen algo especial que las separa de las redes gestionadas por corporaciones como Meta, X corp, Microsoft y demás. La mayoría son gestionadas por usuarios como tú y como yo. Pero ¿cómo lo hacen?

¿Cómo funcionan las redes sociales alternativas?

Ahora sí, lo mero bueno del asunto. El punto interesante de la mayoría de las redes mencionadas en esta publicación es que no dependen de un sólo servidor, sino de varios servidores que hablan el mismo idioma, interconectados entre sí, ubicados en muchos lugares alrededor del mundo. A esto se le conoce como descentralización. Porque a diferencia de estas, las redes tradicionales tienen sus servidores en una ubicación central y dependen de una única organización.

Y plataformas como Mastodon, Pixelfed o incluso BlueSky no dependen solamente de una única persona. Cualquiera con los conocimientos y la disposición puede crear un servidor para extender la plataforma de su preferencia, o registrarse en el servidor de alguien más. Hay varias formas de hacer crecer las redes descentralizadas.

La primera que supe que se basaba en este principio fue Diaspora, y esta utiliza su propio protocolo, llamado Diaspora protocol (sí, no se quisieron quebrar mucho la cabeza con eso) para comunicarse con los distintos servidores de esta red.

BlueSky también utiliza su propio protocolo, esta vez llamado Authenticated Transfer Protocol. Este protocolo, básicamente hace lo mismo que el de Diaspora, pero este parece ser exclusivo (por el momento) para Bluesky. Aunque no dudo que pronto esté disponible para interactuar con las aplicaciones que van a crear.

Y Mastodon, Pixelfed y WriteFreely, entre otras, utilizan el protocolo ActivityPub para interactuar entre sí. Este protocolo fue creado por la W3C, o el consorcio que define los estándares usados alrededor de todo internet allá por el 2018, aunque el concepto de Fediverso fue creado, según dicen, en 2016. Que justamente se basa, como su nombre lo dice, en la federación entre servidores.

¿A qué me refiero con federación? Simple. A que cada servidor, o instancia, puede decidir federar (o compartir y recibir contenido) con otra instancia. Por ejemplo, digamos que Emily, Rain y Chiaki se llevan entre sí, y tienen conversaciones entre ellas. Chiaki también se hace amiga de Nagisa y de Theo. Eventualmente, Theo se hace amigo también de Emily y Rain. En algún punto, Emily decide que no quiere juntarse con Theo, pero sí con Chiaki y Nagisa. Emily ya no platica con Theo, pero sí con Chiaki y Nagisa, y Theo sigue platicando con Nagisa, Chiaki y Rain. Theo ya no se puede comunicar con Emily.

Ilustrado, quedaría más o menos así, con las lineas de colores ilustrando quién puede comunicarse con quién.

Fue el primer ejemplo burdo que se me ocurrió, pero espero que sirva como punto ilustrativo de lo que es la federación.

Volviendo al tema de servidores, podríamos ver que cada persona aquí actúa como una instancia de alguna de estas plataformas.

Y todas estas redes forman parte de este mágico mundo del Fediverso. Les dejo esta imagen ilustrativa de algunas de las plataformas que forman parte de él.

Como pueden ver, hay plataformas que hablan más de un protocolo, y es por esto que incluso las redes que no hablan el protocolo de ActivityPub forman parte del Fediverso. Como una persona que puedas conocer que habla dos o hasta tres idiomas (su servidora, por ejemplo, también tiene la versión en inglés de este mismo blog, pero no es el punto :P).

Hablando un poco más a fondo de las instancias, obviamente hay instancias de todo tipo. Tanto las de propósito general a las que estamos acostumbrados, como las de propósitos específicos o para determinadas comunidades. Por ejemplo, mi perfil actual de Mastodon está en una instancia de temática geek, más enfocada en videojuegos, cómics y tecnología (y casualmente cumplo con el perfil, aunque también meto mis dramas personales), mi perfil en Pixelfed está en una instancia de propósito general, pero con preferencia por el idioma Español, y obviamente mi instancia de WriteFreely está completamente cerrada para, bueno, básicamente ser un monumento a mi ego. Así, hay instancias dedicadas para los amantes de los ferrocarriles, otras pensadas para ser espacios feministas transincluyentes, y ¿por qué no? Comunidades furras para el Fediverso.

Generalmente estoy bien aclimatada con mi presencia en el Fediverso, pero por supuesto que hay cuestiones que no son tan bonitas. Déjenme explicarme.

Problemas en el paraíso: No todo es tan perfecto

Al ser un espacio abierto donde todo tipo de gente puede entrar, y pueden existir todo tipo de comunidades, obviamente iban a existir comunidades indeseables. Desde comunidades de ultraderecha, hasta instancias enteras dedicadas a compartir contenido para adultos (no necesariamente con adultos, tristemente. No lo quiero mencionar explícitamente, pero saben para dónde voy). E incluso en las comunidades decentes puede haber problemas, más bien relacionados con la moderación de contenido. Por ejemplo, en las instancias demasiado grandes, los moderadores no pueden con tanta gente, y hay cosas muy turbias que terminan saliendo a la luz. Y en las instancias demasiado pequeñas, puedes tener problemas con las personas ahí. De hecho, hace poco hice migración de una instancia de Mastodon pequeña a una más o menos grande pero bien administrada, por problemas personales que tuve con alguien ahí. No voy a ventilar mi vida personal (demasiado xd), pero sí diré que ya no me siento como si tuviera qué caminar de puntitas todo el tiempo.

Habiendo dicho esto, muchas personas con las que he interactuado comentan que están muy bien en el fediverso, y no suelen encontrarse con esa clase de contenido inapropiado. Sin embargo, este trabajo debemos agradecérselo a los moderadores y administradores de las instancias, quienes se encargan de vigilar el contenido y defederar (o dejar de comunicarse) y agregar bloqueos a esa clase de instancias. Por eso es importante dirigirse a una instancia con un buen equipo de moderación que esté presente e interactúe en la instancia.

Además, se han visto esfuerzos de las corporaciones de querer integrarse al Fediverso, como Meta con Threads y Automattic con Tumblr. Honestamente, al inicio pensé que podría ser una buena idea para que las demás personas puedan conocer este mundo. Pero como saben, a estas corporaciones les gusta recolectar datos y vendérselos a los anunciantes, además de poder ser usados para manipulación política (como, dicen las malas lenguas, pasó con X en las elecciones de EEUU del 2024). Por lo que suponen grandes amenazas para la privacidad de la gente dentro del Fediverso que precisamente busca escapar de estas redes.

Bloqueando a las corporaciones

Con esto, existen iniciativas para dejar de comunicarse con los servidores de estas corporaciones. La más importante, el FediPact para Meta, y el FediPact 2 para Automattic, ambas iniciativas organizadas por Vanta Rainbow Black. Estas iniciativas muestran un gran sentimiento de enojo y de lucha contra las corporaciones para que no contaminen estos espacios con su toxicidad, y también para protección de nuestros datos. O al menos, así lo veo yo.

Esta es una iniciativa que los administradores de las instancias firman para comprometerse a bloquear a estas corporaciones, y accediendo a los enlaces de estos FediPacts, puedes ver qué instancias ya firmaron. Aunque les seré honesta. Esos sitios están muy chíngame los ojos, así que te recomiendo que, si puedes, reduzcas el brillo de tu pantalla antes de entrar. ^^;

Fun fact: Como creadora de este espacio conectado con el Fediverso, también quise firmar estos acuerdos y bloquear esos servidores. Pero parece que, como WriteFreely no tiene una linea de tiempo Federada, creo que los desarrolladores del programa no pensaron en añadir la opción de defederar desde WriteFreely, así que, de mientras, me quedo con las ganas.

Habiendo dicho todo esto, existen sitios como Fediverse Observer y Fedi Garden que te pueden ayudar a buscar una instancia del tipo de plataforma de tu preferencia, bajo ciertos parámetros. Como idioma, ubicación, tamaño, plataforma, y temáticas. Y en el caso particular de Fedi Garden, muestra sólo instancias que han firmado el FediPact.

Comentarios personales: ¿Cuáles son mis planes?

Obviamente estoy haciendo esta publicación mencionando estas redes alternativas por un motivo en particular. Como usuaria de redes sociales y partidaria del software libre, además de estar cansada de la toxicidad de las redes sociales tradicionales, mi plan es irme moviendo lentamente a este tipo de redes alternativas. De hecho, este proceso ya comenzó. Mi red social principal donde publico avances de mis traducciones e interactúo con gente es Mastodon, y mi perfil de X ya fue eliminado desde diciembre de 2024. Incluso mi perfil de Instagram y mi página pública de Facebook ya están en desuso, y eventualmente terminaré eliminando esos perfiles también, quedándome sólo con mi perfil personal de Facebook únicamente para comunicarme con mi familia y amigos que no quieran hacer el cambio al Fediverso. Porque también es válido no querer hacerlo. No es una obligación, sino una recomendación desde el fondo de mi corazón.

Comentarios finales: ¿Qué te recomiendo a ti?

Respuesta corta: Nada xd.

Esta publicación es más bien informativa para dar a conocer un poco más de un mundo digital más libre. Aunque personalmente me gustaría que más gente estuviera interesada en esto, sé que no es para todos. Y si pruebas alguno de los proyectos del Fediverso, y decides que no es para ti, está bien. Simplemente me gustaría que veamos esto como una forma de expandir los horizontes de la gente, y si tal vez esto suena muy idealista, pues, tal vez sí lo soy. Al fin y al cabo, esto es simplemente mi opinión personal.

Y si decides quedarte, pues por favor sígueme en Mastodon y Pixelfed.


Esta publicación ya es algo extensa por sí sola, y no hemos visto a detalle las plataformas que existen. Por eso, tengo una segunda parte, dedicada única y exclusivamente a mencionar más a detalle las plataformas del Fediverso que existen y sus características principales.

Y si llegaste hasta aquí, gracias por leer. ¡Nos vemos! :D

 
Leer más...

from Val 🏳️‍⚧️

¡Bravo! Realmente estoy impresionada contigo por tu gran habilidad para perder a tus últimas tres mejores amigas, cada año consecutivo sin fallar. Y más aún porque las tres las has perdido por cuestiones que claramente fueron tu culpa y al querer arreglar las cosas, sólo pudiste empeorar todo. No sé para qué te sigues esforzando en querer mantener una relación con la gente cuando obviamente no eres capaz. Siempre tienes miedo de hacer mal las cosas con la gente, y realmente no logras crecer como tanto pregonas por ahí. Por supuesto que mereces quedarte sola. No sé cómo sigues teniendo ese ápice de esperanza de que algún día las cosas cambien y puedas tener relaciones interpersonales más estables. Es evidente que tienes demasiados problemas, y seguramente no los vas a poder cambiar. Por mucho que quieras, esa es tu naturaleza. Ríndete. Será menos agotador para ti, y más sencillo para los demás no tener qué rechazarte a la cara. Aunque tal vez ni siquiera lo hacen tan discretamente como crees. ¿Porqué crees que nadie nunca te invita a ninguna salida? ¿Porqué crees que nunca encajas en ningún grupo de gente? Incluso tu familia apenas te tolera, aunque no quieras darte cuenta. Puedes poner la cara de ser más fuerte, pero tú sabes que eres débil. Y ya es demasiado para ti.

Atentamente, tus demonios internos.

 
Leer más...

from Val 🏳️‍⚧️ (En)

Bravo! I’m really impressed with you for your great ability to lose your last three best friends, every consecutive year without failing. And even more because you have lost the three of them for issues that were clearly your fault and by wanting to fix things, you just were able to make everything worse. I don’t know why you keep making an effort in wanting to keep relationships with people when obviously you can not. You’re always scared of being wrong with people, and you just don’t grow up as much as you tell people. Of course you deserve to be alone. I don’t know how you still have that spark of hope of things changing one day and you can have more stable interpersonal relationships. It’s evident you have way too many troubles, and you surely won’t be able to fix them. As much as you want to, that’s your nature. Just give up. It will be less tiring for you, and easier for everyone else to not reject you in the face. Although maybe they don’t even do it as discretely as you think. Why do you think nobody ever invites you to meet up? Why do you think you don’t fit in any group of people? Even your family barely tolerates you, even if you don’t realize it. You can put up the face of being stronger, but you know you’re weak. And this is too much for you.

Sincerely, your inner demons.

 
Read more...