Ir al contenido

Autoalojar nuestros formularios con LiberaForms

¿Se puede usar docker?

Si llegaste hasta acá seguramente te preguntarás si es posible levantar un contenedor. Y la respuesta es SI.

Clonar el repositorio

apt install git
git clone https://codeberg.org/LiberaForms/server.git

Crear la imagen

En primer lugar creamos la imagen Docker.

docker build -t liberaforms-app:$(cat VERSION.txt) .

Compose

El archivo docker-compose.yml instanciará dos contenedores: PostgreSQL y LiberaForms.
No configurará un servidor web, eso lo tendremos que hacer nosotros.

Editamos el .env

Asegúrate de incluir un archivo .env completo basado en el archivo de ejemplo dotenv.example. En concreto,
debe incluir todas las variables de entorno que se definen para el servicio liberaforms del archivo docker-compose.

Deberás asegurarte de definir estas variables de entorno adicionales:

POSTGRES_ROOT_USER=
POSTGRES_ROOT_PASSWORD=

DB_HOST=liberaforms-db
DB_NAME=liberaforms

GUNICORN_WORKERS=3

Tené en cuenta que el nombre del contenedor postgresql se establecerá de acuerdo al valor definido la variable de entorno DB_HOST.

docker-compose

A partir de docker-compose.yml hacemos las ediciones necesarias

cp docker-compose.yml.example docker-compose.yml
VERSION=$(cat VERSION.txt) docker-compose up -d

Crear la base de datos

La base de datos se crea automáticamente mediante el servicio db definido en el archivo docker-compose.yml,
por lo que no deberías tener que hacer nada.

Sin embargo, si no funciona, debemos ejecutar lo siguiente en el host (suponiendo que flask esté
instalado), donde liberaforms-db es el valor de la variable DB_HOST:

flask database create --docker-container liberaforms-db

Crear las tablas

docker exec liberaforms-app flask database create-tables
docker exec liberaforms-app flask db stamp

Ver más opciones en https://flask-migrate.readthedocs.io/en/latest/#api-reference

Eliminar las tablas

Si necesitás eliminar la base de datos, ejecute lo siguiente desde el host (suponiendo que flask está
instalado), donde liberaforms-db es el valor de la variable de entorno DB_HOST:

flask database drop --docker-container liberaforms-db

Encriptación de datos

LiberaForms encripta las contraseñas de forma predeterminada. Estos otros valores también se encriptan y se guardan en la base de datos.

  • Archivos adjuntos de formularios cuando se envían
  • Autenticación fediverso

Es necesario crear una clave para que estas funciones estén habilitadas.

Crear la clave

flask cryptokey create

olYyUwGT--example-key--c9AkH_HoMEWg9Q=

Importante. Guardar esta clave en un lugar seguro y ¡no pederla!

Copiar la clave generada y guardarla con un nombre reconocible. Algo como mi.dominio.edu.ar.cryptokey.

Agregar la clave a tu archivo.env

CRYPTO_KEY=olYyUwGT--example-key--c9AkH_HoMEWg9Q=

Almacenamiento

Para crear almacenamiento para un contenedor, primero necesitás un volumen

Creamos un directorio, por ejemplo

mkdir /opt/liberaforms_uploads

Asegurate de que el permiso de escritura esté configurado

Editá tu docker-compose.yml y agregá el volumen a la configuración del contenedor LiberaForms.

volumes:
- /opt/liberaforms_uploads:/app/uploads

Recordá modificar tu configuración nginx de manera acorde.

Almacenamiento remoto

Opcionalmente, es posible utilizar un servidor de almacenamiento de objetos.

El volumen local creado en el paso anterior es necesario porque se utiliza si el servidor Minio no está disponible.

Agregá estas líneas a tu docker-compose.yml

MINIO_URL: ${MINIO_URL}
MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}

Y creá los buckets Minio 

flask storage create --remote-buckets --docker-container liberaforms-app

Respaldo

Base de datos

docker exec <contenedor> /usr/local/bin/pg_dump -U <usuario_db> <nombre_bd> > respaldo.sql

Uploads

Esto va a depender de la opción que hayamos escogido, si es local o remota.

Actualización

Visitar https://blog.liberaforms.org/category/releases/ para información específica de una versión en particular.

Descargar la versión

git fetch origin tag v*.*.* --no-tags
git checkout v*.*.* -b v*.*.*
cat VERSION.txt

Crear la imagen

docker build -t liberaforms-app:$(cat VERSION.txt) ./
docker image list liberaforms-app

Editar la VERSION en tu archivo .env

Reiniciar el contenedor

docker compose down
docker compose up -d
docker exec <contenedor> flask db upgrade
Páginas: 1 2