Val 🏳️‍⚧️

Publicaciones

Últimas publicaciones de Val

de Val 🏳️‍⚧️

A la fecha de la publicación de este artículo, queda poco menos de una semana para que finalice el soporte oficial de Windows 10, y hay qué explorar opciones para poder seguir utilizando nuestros equipos que no podrían actualizar a la relativamente nueva versión del sistema operativo, u opciones para utilizarlo con los menos problemas posibles, siempre y cuando las actualizaciones de Windows funcionen correctamente.

Tal vez llego un poco demasiado tarde a la fiesta, teniendo en mente la cantidad de artículos de medios más profesionales dedicados al tema, y el poco tiempo que queda para el apocalipsis, pero aún así, quiero poner mi granito de arena, y dejar mi opinión enteramente personal sobre lo que pienso sobre el tema.

Índice

  1. La opción más fácil: No hacer nada

  2. Soltando billete: Pagar por soporte extendido

  3. Modo serio: Instalando Windows 10 empresarial

  4. Porque lo digo yo: Forzar la instalación de Windows 11

  5. Actualizando todo: Adquirir un nuevo equipo

  6. Que viva el reciclaje: Instalar sistemas operativos alternativos

    1. La opción sencilla: Chrome OS

    2. Si te gusta trastear: Linux

  7. Conclusión

La opción más fácil: No hacer nada

Seamos honestos. El que Windows 10 finalice su soporte el día 14 de octubre de 2025 no significa que tu computadora vaya a explotar en mil pedazos (aunque si me lo preguntan, debería). Así que, a corto y posiblemente mediano plazo, podrás seguir utilizando tu computadora y tu sistema actual. Aunque al dejar de recibir actualizaciones de seguridad, eventualmente podrías exponerte a virus y ataques si tu equipo permanece conectado a internet.

Pros

  • Puedes seguir utilizando tu equipo como hasta ahora
  • Al ya no recibir actualizaciones, tu sistema no podría romperse tan fácilmente

Contras

  • A largo plazo, los programas dejarán de ser compatibles
  • Podrías exponerte a vulnerabilidades que no serán reparadas

Soltando billete: Pagar por soporte extendido

Lo cierto es que el soporte de Windows 10 tampoco finalizará de buenas a primeras. Y en las etapas de fin de soporte de versiones anteriores de Windows, también se había ofrecido la opción de pagar para poder extender el soporte. Aunque con Windows 10 esto es diferente, porque antes, este servicio estaba reservado únicamente para empresas. Y en esta ocasión, se abre también para el público general. La gente común y corriente como tú y como yo.

Y hay varias formas de acceder al soporte de actualizaciones de seguridad extendidas, según se detalla en su página oficial, que incluye una opción gratuita a cambio de sincronizar las configuraciones de tu computadora. Y si eliges no sincronizar tus datos, se te da la opción de pagar USD$30 para un año de actualizaciones de seguridad o utilizar tus Microsoft Rewards (¿alguien utiliza esas cosas?) para redimirlo.

Pros

  • Accedes a actualizaciones de seguridad de forma totalmente legal, sin modificaciones de características
  • Si no quieres (o no puedes) pagar con dinero, no es estrictamente obligatorio

Contras

  • Dependiendo de los programas que utilices, la compatibilidad podría no estar garantizada
  • Si no pagas con tu dinero, pagas con tus datos

Modo serio: Instalando Windows 10 empresarial

Y tampoco es como que la única versión de Windows 10 sea la versión comercial para el usuario final. También hay una versión específica para empresas medianas y fabricantes de equipos. No es para todos, pero como he enlistado con otros ejemplos, tiene sus ventajas y desventajas. Lo más importante es que es una versión recortada del sistema que no requiere una cuenta de Microsoft para instalarla, y que tendrá soporte de seguridad hasta 2032. Y aunque para utilizarla de forma legal debes adquirir una licencia, estas son realmente baratas. La única pega es que Microsoft no ofrece las licencias directamente en su sitio web, así que toca buscar revendedores.

Pros

  • Sistema sin aplicaciones precargadas, lo que podría mejorar el rendimiento y el tiempo de arranque
  • Actualizaciones más estables durante siete años más después del soporte oficial comercial
  • Incluye características que normalmente no se presentan al usuario final, pero a las que podrías sacarles provecho

Contras

  • Tendrías qué reinstalar tu sistema desde cero, lo que implica posible pérdida de configuraciones y personalizaciones de tu sistema (se recomienda realizar respaldo)
  • No incluye la tienda de Microsoft para descargar aplicaciones de forma sencilla
  • Instalar características como la mencionada tienda, Cortana o aplicaciones de medios no es tan sencillo, y requiere de comandos en PowerShell
  • Encontrar una licencia a precio razonable no es tan sencillo, ya que no hay un lugar centralizado para adquirir una

Porque lo digo yo: Forzar la instalación de Windows 11

El que no puedas actualizar a Windows 11 porque Windows 10 no lo permite desde Windows Update no significa que no puedas realizar una instalación limpia de Windows 11. Hay programas para crear medios de instalación completos que evitan que se verifiquen los requisitos de sistema durante la instalación, como Rufus, o incluso yendo más allá, usar Tiny11 Builder para crear una versión recortada de Windows 11 que le quita casi todo el bloatware.

Pros

  • Tendrías las últimas características al momento en que realices tu instalación
  • Podrías actualizar a las últimas versiones de tus programas, como por ejemplo, Office
  • En el caso de Tiny11, tienes un sistema ligero, pero funcional

Contras

  • Al no ser métodos oficiales de instalación, podrías no ser elegible a actualizar automáticamente a las nuevas versiones semestrales. Lo que te obligaría a realizar el proceso manualmente
  • Podrías presentar problemas de rendimiento si tu equipo no es tan moderno

Actualizando todo: Adquirir un nuevo equipo

Si has pensado en comprar una nueva computadora (como es mi caso), tal vez este sea el momento perfecto para hacerlo, si es que tienes el presupuesto. Ya que casi cualquier computadora vendida por cualquier tienda comercial, y gran parte de las computadoras reacondicionadas podrían venir con Windows 11 preinstalado, o con posibilidad de actualización. Así que, si tienes el presupuesto, ¿por qué no? Hay diversidad de equipos con rangos variados de precio que podrían tener el sistema, con diferentes especificaciones técnicas que podrían adaptarse a tus actividades.

Pros

  • Al tener un nuevo equipo, podría durarte muchos años con el debido cuidado y mantenimiento
  • Si viene con Windows 11 preinstalado, ni siquiera tienes qué hacer nada de esfuerzo

Contras

  • Podrías contribuir a la generación de basura tecnológica, que daña el medio ambiente
  • Económicamente hablando, es la opción más dañina para tu billetera si no planeas tu presupuesto

Que viva el reciclaje: Instalar sistemas operativos alternativos

Todo este artículo hasta este punto ha sido escrito como si Windows fuera la única alternativa, pero ¿qué tal y no lo es? Pues… de hecho no. Hay varios sistemas operativos muy aparte de Windows que pueden ser instalados de forma gratuita, y en el mejor de los casos, hasta podrían darle una segunda vida a tu equipo antiguo que tengas guardado por ahí.

Pros

  • Evitas la generación de basura tecnológica
  • No necesitas adquirir un nuevo equipo

Contras

  • Posibles conocimientos técnicos requeridos para instalar uno de estos sistemas
  • Interfaces diferentes a lo que has podido usar, por lo que podría haber curva de aprendizaje
  • La disponibilidad de software podría estar limitada o ser diferente, por lo que tus programas favoritos podrían necesitar alternativas, o no estar disponibles

Hay diferentes sistemas operativos ahí afuera, con diferentes propósitos, tamaños, colores y sabores. Como FreeBSD, Hurd, Kolibri, ReactOS, TempleOS o Haiku. Pero por simplicidad para este artículo (y porque estos son más bien desconocidos y/o inestables), me voy a centrar en dos sistemas operativos más conocidos y relativamente sencillos: Chrome OS y Linux.

La opción sencilla: Chrome OS

Chrome OS es un sistema operativo ligero y orientado a la nube que utiliza Google Chrome como su interfaz principal. En su momento tuve oportunidad de trabajar con él en uno de mis empleos anteriores, y la verdad es que funciona bastante bien, así que ahora que Google está soportando una variante para poder instalarse fuera de Chromebooks llamada Chrome OS Flex, valdría la pena para instalarla en tu computadora actual.

Pros

  • Sistema ligero
  • Fácil instalación y configuración
  • Compatibilidad con aplicaciones Linux
  • Realmente no requieres muchos conocimientos técnicos para usarla

Contras

  • Al ser orientada en la nube, muchas aplicaciones podrían depender de internet
  • Algo complejo crear el medio de instalación
  • A diferencia de la versión para Chromebooks, la versión Flex no permite instalar apps de la Play Store

Si te gusta trastear: Linux

No es secreto para nadie que me lea por aquí o me siga en mis redes sociales que Linux ha sido mi sistema preferido desde hace muchos años, y particularmente yo lo llevo usando desde 2011, y lo he recomendado ampliamente desde entonces a mucha gente. Y desde entonces, el uso de este sistema se ha vuelto aún más amigable de lo que ya era en ese entonces. Pero la verdad es que no es para todos, porque sí requiere de más conocimiento técnico para poder solucionar problemas potenciales con programas o componentes de hardware.

Una de las ventajas principales es que hay distintas variantes, conocidas como distribuciones, que pueden adaptarse a tus gustos y necesidades. Desde las orientadas a usuarios principiantes que incluso imitan la apariencia de Windows o MacOS, como las minimalistas que puedes construir desde cero, como Arch o Gentoo. Aunque para comenzar, yo personalmente recomendaría Linux Mint XFCE para probar, ver si te gusta, o buscar otras distribuciones con otros entornos, como KDE Neon, Elementary o Zorin.

Además de que con la aplicación de Wine, puedes añadir una capa de compatibilidad para aplicaciones de Windows que funciona con varias aplicaciones sencillas. aunque podría no funcionar con todos los programas. Dicho esto, Steam utiliza una variante de Wine para la compatibilidad con algunos de sus juegos, llamada Proton.

Pros

  • Variedad de distribuciones que pueden adaptarse a ti
  • Podrías darle una segunda vida de por lo menos tres años más a tu equipo, e incluso sacarle más potencia a tu equipo reciente
  • Nivel muy alto de personalización

Contras

  • La cantidad masiva de distribuciones podría ser abrumadora
  • No todas las aplicaciones de Windows son compatibles con Wine (particularmente Microsoft Office y Adobe Creative Cloud)
  • Se requieren conocimientos técnicos (o la disposición para aprender) para poder solucionar problemas
  • Podría no haber alternativas lo suficientemente convincentes para sustituir tus programas habituales
  • Equipos demasiado nuevos podrían no tener soporte adecuado por unos meses

Conclusión

El fin del soporte oficial de Windows 10 no necesariamente significa el fin del mundo. Hay formas de seguir usando tus equipos actuales o modernizar tu equipo para seguir teniendo un equipo funcional. Así que por opciones no paramos. Así que ya que tienes estas opciones un poco detalladas, ¿qué camino vas a seguir?

 
Leer más...

de Val 🏳️‍⚧️ (En)

At the time of posting this article, There’s less than a week left for the official Windows 10 support, and we have to explore options to keep using our computers that won’t be able to upgrade to the relatively new version of the operating system, or options to use it with the least issues possible, as long as Windows updates keep working correctly.

Maybe I came a little too late to the party, keeping in mind the amount of articles by more professional media dedicated to the topic, and the little time remaining for the apocalypse, but still, I want to put my part, and leave my entirely personal opinion about what I think about the topic.

Contents

  1. The simplest option: Do nothing

  2. Dropping cash: Pay for extended support

  3. Serious mode: Installing Windows 10 Enterprise

  4. Because I say so: Forcing Windows 11 installation

  5. Upgrading everything: Getting a new PC

  6. Long life recycling: Installing alternative operating systems

    1. The easiest option: Chrome OS

    2. If you like to tinker: Linux

  7. Conclusion

The simplest option: Do nothing

Let’s be honest. The fact that Windows 10 is ending its support on October 14th 2025 doesn’t mean your computer is gonna explode in a million pieces (although if you ask me, it should). So, on the short and possible medium term, you will be able to keep using your current PC and system. Although by stopping receiving security updates, you will eventually expose yourself to viruses and attacks if your computer keeps being connected to the internet.

Pros

  • You can keep using your computer as you have until now
  • By not receiving updates, your system will not break so easily

Cons

  • On the long run, some programs will not be compatible anymore
  • You might be exposed to vulnerabilities that won’t be fixed

Dropping cash: Paying for extended support

The truth is that Windows 10 support won’t end its support just like that. And by the final stages of the end of support for previous Windows versions, the option to pay for extended support was also available. Although with Windows 10 this is different, because previously, this service was only available only for enterprises. And this time, is now open for the general public. Common people like you and me.

And there are various ways to access to the extended security updates, as detailed on its official page, which includes a free option in exchange of syncing your computer configurations. And if you chose not to sync your data, you’re given the option to pay USD$30 for a year of security updates or use your Microsoft Rewards (Do someone use those things?) to redeem it.

Pros

  • You get security updates legally, without feature modifications
  • If you don’t want (or can’t) pay with money, is not strictly obligatory

Cons

  • Depending the software you use, the compatibility is still not guaranteed
  • If you don’t pay with money, you pay with your data

Serious mode: Installing Windows 10 Enterprise

And besides, it’s not that the only version of Windows 10 is the commercial version for the end user. There’s also a specific version for medium enterprises and PC manufacturers. It’s not for everyone, but as I have listed with another examples, it has its advantages and disadvantages. The most important thing is that is a trimmed down version of the system that doesn’t require a Microsoft account to install it, and it will have security support until 2032. And although to use it legally you must acquire a license, these are really cheap. The only but is that Microsoft doesn’t offer the licenses directly on its website, so you’ll have to find resellers

Pros

  • System without preinstalled applications, which might improve performance and boot time
  • More stable updates during seven more years after the official commercial support
  • Includes features normally not offered to the end user, but that you might take advantage of

Cons

  • You will have to reinstall your system from scratch, which implies a possible loss of settings and customizations (data backup suggested)
  • Doesn’t include Microsoft Store to download apps easily
  • Installing features such as the mentioned store, Cortana or media apps is not as easy, and requires PowerShell commands
  • Finding a license for a reasonable price is not as easy, because there’s not a centralized place to find one

Because I say so: Forcing Windows 11 installation

The fact that you can’t upgrade to Windows 11 because Windows 10 is not allowing it from Windows Update doesn’t mean you can’t make a clean Windows 11 install. There are programs to make full installation media that avoid the system requirement verification during installation, such as Rufus, or even going further, using Tiny11 Builder to create a trimmed down version of Windows 11 that removes almost all the bloatware.

Pros

  • You’ll have the latest features at the moment you install the system
  • You might be able to update your programs to the latest version, for example, Office
  • In the case of Tiny11, you’ll have a light but functional system

Cons

  • By not being official installation methods, you may not be eligible to automatically update to the latest biannual versions. Which forces you to do the process manually
  • You may encounter performance issues if your computer is not that modern.

Upgrading everything: Getting a new PC

If you have thought about getting a new PC (like I have), this may be the perfect time to do it, if you have the funds. That’s because almost any PC sold by any commercial retailer, and most of the refurbished PCs might come with Windows 11 preinstalled, or with the option to upgrade. So, if you have the funds, why not? There are lots of devices with varied prices and technical specs that may come with the system, which may adapt to your needs.

Pros

  • By having a new device, it can last several years with the proper care and maintenance
  • If it comes with Windows 11 preinstalled, you won’t even have to put any effort

Cons

  • You might contribute to technologic trash generation, which damages the environment
  • Speaking money-wise, this is the most damaging choice for your wallet if you don’t plan your spending

Long life recycling: Installing alternative operating systems

This whole article up to this point has been written as if Windows was the only alternative, but what if it isn’t? Well… actually is not. There are several operating systems really different from Windows that can be installed for free, and in the best case scenario, they can even give a second life to your old device you have stored somewhere.

Pros

  • You avoid technologic trash generation
  • You don’t have to get a new device

Cons

  • You might need technical knowledge to install one of these systems
  • Different interfaces to what you’re used to use, which may present a learning curve
  • Software availability may be limited or be different, so, some of your preferred software might need alternatives, or not be available at all

There are different operating systems out there, with different purposes, sizes, colors and flavors. Like FreeBSD, Hurd, Kolibri, ReactOS, TempleOS or Haiku. But for simplicity purposes for this article (and because these are rather unknown and/or unstable), I’m going to center on two operating systems more known and relatively easy: Chrome OS and Linux.

The easiest option: Chrome OS

Chrome OS is a light and cloud-oriented operating system which uses Google Chrome as its main interface. I had the opportunity to work with it in one of my previous jobs, and honestly, it works pretty well, so now that Google is giving support to a variant to be installed outside of Chromebooks called Chrome OS Flex, it might be worth it to install on your current PC.

Pros

  • Lightweight system
  • Easy installation and setup
  • Compatibility with Linux apps
  • You don’t really need much technical knowledge to use it

Cons

  • By being cloud-oriented, many of its apps may depend on an Internet connection
  • Creating the installation media may be somewhat complex
  • Differently from the version for Chromebooks, the Flex version doesn’t allow you to install apps from the Play Store

If you like to tinker: Linux

It’s not a secret to anybody who either reads me here or follows me on my social media that Linux has been my preferred operating system for several years, and particularly I’ve been using it since 2011, and I fully recommend it to lots of people. And since then, the usage of this system has become more friendly than what already was in that time. But the truth is that it’s not for everyone, because it does require more technical knowledge to solve potential issues with programs or some hardware.

One of the main advantages is that there are several variants, known as distributions, which can adapt to your liking and needs. From those oriented to beginners which even mimic the appearance of Windows or MacOS, to the minimalist ones which you can build from scratch, like Arch or Gentoo. Although to begin, I personally recommend Linux Mint XFCE to try and see if you like it, or check other distribution with other environments, like KDE Neon, Elementary or Zorin.

Besides, with the Wine app, you can add a compatibility layer for Windows apps that can make some easy apps work. Although it may not work with every software. That said, Steam uses a Wine variant for compatibility with some of its games, called Proton.

Pros

  • Several distributions that can be adapted to you
  • You can give a second life for at least three more years to your PC, and even get more performance to your new PC
  • Highly customizable

Cons

  • The massive amount of distributions may be overwhelming
  • Not every windows app is compatible with Wine (particularly Microsoft Office and Adobe Creative Cloud)
  • It requires technical knowledge (or willingness to learn) to be able to solve issues
  • There may not be alternatives convincing enough to replace your usual programs
  • Too recent PCs may not have proper support for a few months

Conclusion

The end of official support of Windows 10 doesn’t necessarily mean the end of the world. There are ways to keep using your current PCs or modernize your equipment to keep having a working computer. So we’re not out of options. And now that you have this options in detail, which path are you gonna take?

 
Read more...

de Val 🏳️‍⚧️ (En)

Yeah, the title is not heartwarming. And I also don’t want to cover it. It will be a very difficult reading. Content warnings: US politics, transphobia, death, mental health

I have several days with this on my mind, and honestly I still can’t correctly gather my thoughts, so this will come out as is. Because, honestly, I need to vent.

Those who follow me on social media (and even those who read me over here, if they pay attention) can notice my emotional state has been, at the very least, cuestionable. And I really hate being the type of person who only posts depressive stuff. That’s why I actually haven’t posted a lot, neither here nor other social media. But, well, that’s a lot of disclosures.

As it is, the situation on United States is horrible for everyone. The most affected, the immigrants and the trans community. Honestly this last group is the one that worries me the most, because I have friends over there, which I would have liked to be able to visit during the 2026 World Cup, which it’s supposed to be hosted in all of North America. But the current immigration policies make it impossible. But those currently living there are seeing reversed their legal name changes, and basically that government is incredibly stupid, but that’s what makes it much more dangerous, to the point I’m thankful I’m living in Latin America.

Except I’m not, because the situation over here with trans people isn’t any better. The dumb things Wendy Guevara has said just by mere misinformation and internalized transphobia have made the trans haters come out of the sewers to comment everywhere. Practically expected in general interest pages (still shameful). But the worst is precisely seeing transphobic comments on LGBTQ+ pages. I mean, really? And I’m also thorn between my friends misgendering her and calling her ‘transvestite’ or ‘dude with tits’. I mean, I understand Wendy Guevara doesn’t represent the trans community at all. But… I dunno. It confuses me.

This also has showcased transphobia in my friendship circle, as I have had to reduce it to not take further deceptions. The irony is that some of these ‘friendships’ I decided to cut off are people I already took out of my life before for similar reasons, and I let them back in because I stupidly thought they might have changed. Thinking is not my strongest point, it seems.

On a more painful note, at this point is very well known the murder of Sara Mirelley (at least in Hispanic countries). And as more details about her last moments came out… well, let’s say I cannot read a complete note anymore because I immediately feel so powerless about how shitty people can be just for being different. And this is the most known case at the moment. I know much more people who have lost someone close to them in similar ways, and I feel fortunate this is not my case. But I still have a lot of fear. Both for me and my trans and non-binary siblings.

Without forgetting the destruction the Israel government is doing in Palestine. Honestly I think every time I think we’re seeing the worst of humankind, people even take it as a challenge. I even have thought about permanently deleting all of my social media. Even the ones in the fediverse. I just can’t take seeing too many bad news all of the time. (But here I am posting a depressive note)

On a lighter note, I have also had good times, because not everything is crying to sleep. I have been really close with my mom, we went to see a movie, I’m still thriving in my transition, and the job is now currently the least of my issues, and sometimes is even enjoyable.

To say the truth, I see it to be very difficult, and not in a soon-ish timeframe. But I still have hope that eventually things stop being so crappy. I don’t want to lose hope.

On a totally unrelated note, sorry. I know this isn’t cheerful at all, and I also was doubting about even posting this for its content. I promise this will be the only depressive post in a long time.

 
Read more...

de Val 🏳️‍⚧️

Sí, el título no es alentador. Y tampoco pienso disfrazarlo. Será una lectura muy difícil. Advertencias de contenido: Política estadounidense, transfobia, muerte, salud mental.

Llevo varios días con esto revoloteándome en la mente, y honestamente sigo sin poder articular correctamente mis pensamientos, así que van a salir como salgan. Porque, honestamente, necesito sacarlo.

Quienes me siguen en mis redes sociales personales (e incluso quienes me leen por aquí, si prestan atención) pueden darse cuenta que mi estado emocional ha sido, cuando menos, cuestionable. Y realmente odio ser el tipo de persona que publica solamente cosas depresivas. Razón por la que de hecho ni he publicado tanto, ni aquí ni en otras redes. Pero bueno, ya fueron muchos avisos.

De por sí, la situación en Estados Unidos está horrible para todos. Los más afectados, los inmigrantes y la comunidad trans. Honestamente este último es el grupo que más me preocupa, porque tengo amistades trans por allá, que me hubiera gustado poder visitar durante el mundial de 2026, que se supone va a ser en todo Norteamérica. Pero las políticas de migración actuales lo hacen imposible. Pero quienes viven allá también están viendo reversado sus cambios legales de nombre, y básicamente el gobierno de allá está pero si bien imbécil, pero eso es lo que lo hace mucho más peligroso, al punto de que agradezco vivir en latinoamérica.

Excepto que no, porque la situación con las personas trans por acá tampoco está mejor. Las estupideces que ha dicho Wendy Guevara por pura desinformación y transfobia internalizada han hecho que salgan los transodiantes de las alcantarillas a comentar en todos lados. Prácticamente esperado en páginas de interés general (lamentable, aún así). Pero lo peor es precisamente ver comentarios transfóbicos en páginas LGBTQ+. O sea, ¿en serio? Y también estoy dividida entre mis amistades trans que la malgenerizan y la llaman ‘travesti’ o ‘vato con tetas’. Digo, entiendo que Wendy Guevara no representa a la comunidad trans para nada. Pero… no sé. Es confuso para mí.

Eso también me ha mostrado transfobia dentro de mi círculo de amistades, mismo que he tenido qué reducir para no llevarme más decepciones. Lo irónico es que algunas de estas ‘amistades’ que decidí cortar son personas que ya había sacado de mi vida antes por razones similares, y volví a dejar entrar en mi vida porque estúpidamente creí que ya habrían cambiado. Pensar no es mi punto fuerte, según parece.

En una nota mucho más dolorosa, ya a estas alturas, es bastante conocida la noticia del transfeminicidio de Sara Mirelley. Y conforme salían más detalles sobre sus últimos momentos… bueno, digamos que ya no puedo leer una nota completa porque inmediatamente me lleno de una impotencia de lo mierda que puede ser la gente sólo por ser diferente. Y este es el más conocido hasta ahora. Conozco a muchas personas que han perdido a alguien cercano de formas similares, y me siento afortunada de que no sea mi caso. Pero sigo sintiendo mucho miedo. Tanto por mí como por mis hermanes trans y no binaries.

Sin olvidar la destrucción que el gobierno israelí está haciendo con el pueblo palestino. Honestamente creo que cada vez que pienso que estamos viendo lo peor de la humanidad, hasta lo toman como reto. Incluso he pensado en borrar definitivamente todas mis redes. Hasta las del fediverso. No soporto llenarme de malas noticias todo el tiempo. (Pero ahí voy publicando una nota depresiva)

En algo más amable, también he pasado por buenos momentos, porque no todo es tirarse al piso. He estado conviviendo mucho con mi mamá, fuimos a ver una película, sigo prosperando con mi transición, y el trabajo ya es el menor de mis problemas, y hasta llega a ser disfrutable.

A decir verdad, lo veo muy difícil, y tampoco a muy corto plazo. Pero sigo teniendo esperanza en que eventualmente las cosas dejarán de valer pistache. No quiero perder la esperanza.

Cambiando totalmente de tema, perdón. Sé que esto no es para nada alentador, y también dudaba en siquiera escribir esta publicación por lo mismo. Les prometo que esta nota será la única deprimente en bastante tiempo.

 
Leer más...

de 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...

de 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...

de 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...

de 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...