WriteFreely es una plataforma de publicación minimalista hecha para escritores. Inicia un blog, comparte conocimientos dentro de tu organización o crea una comunidad en torno al acto compartido de escribir.

Pasos previos

Para poder instalar una instancia de WriteFreely necesitaremos un servidor -o lo que tengas a mano, como una Raspberry Pi- con Ubuntu 22.04. Además deberemos de tener acceso SSH y permisos de súper administrador.

¡Al lío!

Preparación del servidor

Tendremos que crear un usuario especifico que será quien ejecuta el Software, para ello:

useradd -r -m -d /srv/writefreely -s /bin/bash writefreely 

Añadimos el usuario a www-data:

usermod -a -G www-data writefreely

Iniciamos sesión con el usuario recién creado:

su - writefreely

Descargar WriteFreely

Con la sesión de writefreely abierta, procedemos a descargar la última versión en su página de Github:

wget https://github.com/writefreely/writefreely/releases/download/v0.13.2/writefreely_0.13.2_linux_amd64.tar.gz

Descomprimimos y cambiamos el nombre del directorio:

tar xvzf writefreely_0.13.2_linux_amd64.tar.gz
mv writefreely nuestrodominio.com

Finalmente, salimos de la sesión de writefreely:

exit

Modificamos los permisos del directorio donde instalamos WriteFreely para que tenga acceso www-data:

chown writefreely.www-data -R /srv/writefreely/

Instalamos y configuramos MariaDB

A continuación tendremos que crear un usuario y una base de datos para posteriormente configurarlo en WriteFreely, para ello primero instalamos MariaDB:

apt install mariadb-server

Y deberemos de crear un usuario y base de datos como indica este otro tutorial:

Crear base de datos y usuario con privilegios en MySQL/MariaDB
En el siguiente tutorial vamos ha explicar como crear una base de datos y un usuario para asignar permisos totales a esa base de datos. Acceder a MySQL/MariaDB Para gestionar bases de datos o usuarios, deberemos de acceder a la shell de MySQL/MariaDB. Existen programas como phpMyAdmin de
CREATE DATABASE writefreely;
GRANT ALL PRIVILEGES ON writefreely.* TO 'writefreelyuser'@'localhost' IDENTIFIED BY 'supercontrasenyaseguramuymuysecreta';

Generamos la configuración

Volvemos a iniciar sesión con el usuario del sistema writefreely y generamos la configuración:

su - writefreely
cd nuestrodominio.com
./writefreely --create-config

Con el último comando se habrá generado un fichero, donde deberemos de modificar los siguientes valores:

username = writefreelyuser
password = supercontrasenyaseguramuymuysecreta
database = writefreely
site_name          = WriteFreely de voidnull!
site_description   = Tutorial de como instalar WriteFreely
host               = https://nuestrodominio
default_visibility = unlisted

Una vez hemos configurado todo, inicializamos la base de datos con:

./writefreely db init

Generamos las llaves de cifrado:

./writefreely keys generate

Creamos un usuario admin:

$ ./writefreely --create-admin nuestrousuario:supercontrasenya 

Creamos un servicio para SystemD

Para poder gestionar la aplicación usando SystemD, crearemos el siguiente fichero:

nano /etc/systemd/system/writefreely.service

Con el siguiente contenido:

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

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
User=writefreely
Group=writefreely
WorkingDirectory=/srv/writefreely/nuestrodominio.com
ExecStart=/srv/writefreely/nuestrodominio.com/writefreely
Restart=always

[Install]
WantedBy=multi-user.target
Recuerda de poner correctamente el dominio en los parámetros WorkingDirectory y ExecStart! 

Y ejecutamos el servicio para que esté en segundo plano:

systemctl daemon-reload
systemctl start writefreely
systemctl enable writefreely

Y verificamos que se ha lanzado correctamente con un status:

# systemctl status writefreely
● writefreely.service - WriteFreely Instance
     Loaded: loaded (/etc/systemd/system/writefreely.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-11-14 17:14:55 UTC; 3s ago
   Main PID: 19346 (writefreely)
      Tasks: 5 (limit: 2288)
     Memory: 11.6M
        CPU: 118ms
     CGroup: /system.slice/writefreely.service
             └─19346 /srv/writefreely/nuestrodminio.com/writefreely

Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Loading config.ini configuration...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Loading templates...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Loading pages...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Loading user pages...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Loading encryption keys...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Connecting to mysql database...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Adding {domain} routes (single user)...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Going to serve...
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 Serving on http://localhost:8080
Nov 14 17:14:56 writefreely writefreely[19346]: 2022/11/14 17:14:56 ---

Instalación y configuración de Nginx Proxy

Lo primero como siempre será configurar Nginx para ello instalaremos los paquetes necesarios:

apt install nginx certbot python3-certbot-nginx

Y crearemos la configuración para que funcione con un Nginx Proxy:

nano /etc/nginx/sites-available/writefreely.conf

server {
    listen 80;
    listen [::]:80;

    server_name nuestrodominio.com;

    gzip on;
    gzip_types
      application/javascript
      application/x-javascript
      application/json
      application/rss+xml
      application/xml
      image/svg+xml
      image/x-icon
      application/vnd.ms-fontobject
      application/font-sfnt
      text/css
      text/plain;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_vary on;

    location ~ ^/.well-known/(webfinger|nodeinfo|host-meta) {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }

    location ~ ^/(css|img|js|fonts)/ {
        root /srv/writefreely/nuestrodominio.com/static;
        # Optionally cache these files in the browser:
        # expires 12M;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }
}
Recuerda de modificar el parámetro server_name y root (dentro del location) con el nombre de tu dominio! 

Habilitamos el servidor en Nginx:

cd /etc/nginx/sites-enabled/
ln -s ../sites-available/writefreely.conf
nginx -t
systemctl reload nginx

Creamos certificado SSL con Let's Encrypt

Para generar el certificado, lo haremos siguiendo este otro tutorial:

Cómo utilizar Certbot para configurar un SSL de Let’s Encrypt en GNU/Linux
Certbot es una maravillosa herramienta que puedes utilizar para generar un certificado SSL con Let’s Encrypt e instalarlo y configurar automáticamente en tu servidor web.

Conclusión

Tras instalar el certificado SSL, podremos acceder a nuestro WriteFreely con el usuario admin que hemos creado durante el tutorial y podremos iniciar sesión:

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