LiberaForms es un proyecto maravilloso que nace en el Barri de Sants de Barcelona a raíz de una lucha social por preservar el Hortet de la Farga, donde se utilizó un Formulario de Google para recoger firmas. En ese instante se dieron cuenta de que no solo estaban recogiendo firmas si no que además las estaban regalando a Google.

LiberaForms hace fácil la creación, personalización y gestión de los formularios, es respetuoso con los datos de las personas y cumple con la ley de protección de datos europea. ¡Usemos LiberaForms para construir una sociedad más libre, más ética y más soberana! 🙂

Vamos a montar un servidor de LiberaForms para autogestionar nuestros formularios, ya sean para recoger firmas o ya sea para usar los formularios como contacto de un blog.

Requisitos previos

Vamos a proceder a instalar LiberaForms Server en un Debian 10 donde tendremos que tener instalado MongoDB para que funcione correctamente.

Por lo que primero deberéis de instalar MongoDB siguiendo estas instrucciones:

https://voidnull.es/instalacion-de-mongodb-en-gnu-linux/

También deberemos de tener un dominio para configurarlo luego con Nginx. Para este tutorial, usaremos form.dominio.com como ejemplo de subdominio.

Instalación y configuración de LiberaForm

Lo primero que haremos será configurar el sistema para usar LiberaForm con Nginx como proxy. Así que lo primero que haremos será instalar Nginx:

apt install nginx

Y luego crearemos el siguiente directorio donde alojaremos LiberaForm:

mkdir -p /var/www/html/vhosts/form.dominio.com/{logs,www}

Y nos descargamos el repo de GitLab de LiberaForm:

git clone https://gitlab.com/liberaforms/liberaforms.git /var/www/html/vhosts/form.dominio.com/www/

Ahora tendremos que crear un entorno virtual de Python, por lo que necesitaremos primero tener instalado estos paquetes:

apt-get install python3-venv python3-pip virtualenv

Y creamos el entorno virtual:

python3 -m venv /var/www/html/vhosts/form.dominio.com/www/venv

Lo siguiente será instalar los paquetes necesarios:

source /var/www/html/vhosts/form.dominio.com/www/venv/bin/activate
pip install --upgrade setuptools
pip install wheel
pip install -r /var/www/html/vhosts/form.dominio.com/www/requirements.txt
pip install gunicorn

Configuraremos para que se guarden la sesión directamente en el sistema de ficheros, también lo podéis hacer en memoria y podéis revisar la documentación.

mkdir /var/www/html/vhosts/form.dominio.com/www/liberaforms/flask_session
chown www-data /var/www/html/vhosts/form.dominio.com/www/liberaforms/flask_session

Tras esto, creamos el fichero de configuración y le configuraremos los permisos:

cp /var/www/html/vhosts/form.dominio.com/www/config.example.cfg /var/www/html/vhosts/form.dominio.com/www/config.cfg
chown www-data /var/www/html/vhosts/form.dominio.com/www/config.cfg
chmod go-rw /var/www/html/vhosts/form.dominio.com/www/config.cfg

Creamos el SECRET_KEY para configurarlo en el fichero config.cfg:

openssl rand -base64 32

Con el resultado que nos de este comando, deberemos de añadirlo al fichero config.cfg, también añadiremos un e-mail para crear el primer usuario.

SECRET_KEY = 'XXXXXXXXXXX'
ROOT_USERS = ['form@dominio.com']

Ya tenemos casi lista la configuración pero nos falta crear una base de datos en MongoDB. Para ello entraremos en la shell de MongoDB y crearemos la base de datos.

mongo
> use LiberaForms
switched to db LiberaForms
> db.movie.insert({"name":"tutorials point"})
WriteResult({ "nInserted" : 1 })
> show dbs
LiberaForms  0.000GB
admin        0.000GB
config       0.000GB
local        0.000GB
> 

Con la base de datos creada ya podemos iniciar la aplicación:

cd /var/www/html/vhosts/form.dominio.com/www/
gunicorn -c /var/www/html/vhosts/form.dominio.com/www/gunicorn.py liberaforms:app

La salida de esto nos mostrará lo siguiente:

[2020-12-07 14:48:56 +0100] [29945] [INFO] Starting gunicorn 20.0.4
[2020-12-07 14:48:56 +0100] [29945] [INFO] Listening at: http://127.0.0.1:5000 (29945)
[2020-12-07 14:48:56 +0100] [29945] [INFO] Using worker: sync
[2020-12-07 14:48:56 +0100] [29948] [INFO] Booting worker with pid: 29948
[2020-12-07 14:48:56 +0100] [29949] [INFO] Booting worker with pid: 29949
[2020-12-07 14:48:56 +0100] [29953] [INFO] Booting worker with pid: 29953
[2020-12-07 14:49:07 +0100] [29945] [INFO] Handling signal: winch

Esto significa que nos ha funcionado correctamente y ahora deberemos de configurar el Proxy Inverso para que funcione bajo dominio.

Configuración de Proxy Inverso con Nginx

Para la configuración de Nginx tenéis que crear la siguiente configuración:

server {
    listen         80;
    server_name    form.dominio.com;
    return         301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name form.dominio.com;

    location / {
        proxy_pass          http://localhost:5000;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_pass_header   server;
    }
    access_log /var/www/html/vhosts/form.dominio.com/logs/liberaforms.access.log;
    error_log /var/www/html/vhosts/form.dominio.com/logs/liberaforms.error.log notice;
}

Creamos el enlace simbolico y creamos certificado con Let’s Encrypt:

ln -s /etc/nginx/sites-available/form.conf /etc/nginx/sites-enabled/form.conf

Comprobamos que la configuración sea correcta:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Y ahora el certificado:

certbot

Instalación de Supervisor para controlar el proceso

Instalamos Supervisor para que controle el proceso de LiberaForm:

apt-get install supervisor

Editamos el fichero /etc/supervisor/conf.d/LiberaForms.conf y añadimos esta configuración:

[program:LiberaForms]
command = /var/www/html/vhosts/form.dominio.com/www/venv/bin/gunicorn -c /var/www/html/vhosts/form.dominio.com/www/gunicorn.py liberaforms:app
directory = /var/www/html/vhosts/form.dominio.com/www
user = www-data

Reiniciamos supervisor:

systemctl restart supervisor

Crear el primer usuario root

Para crear el primer usuario administrador o root de Liberaform, tenemos que acceder por el subdominio y ir al apartado de Entrar > Has olvidado la contraseña? e introducir la cuenta de correo que hemos configurado en el fichero de configuración anteriormente:

Recuperando la contraseña

Tras hacer clic sobre Recuperar podremos crear nuestro primer usuario:

Creando nuevo usuario
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