Tutoriales, noticias y soluciones informáticas

PiServer con Docker – Parte 13: Despliegue y ajustes de Vikunja

Logotipo de Vikunja

En esta serie de artículos hemos ido subiendo el nivel poco a poco. Cada vez estamos desplegando Dockers más y más complicados (con un subidón de adrenalina incluído con Nextcloud).

Ahora nos toca descansar un poco y planificar cómo abordar el resto de tutoriales, y qué mejor cosa para planificarlos que con un excelente gestor de tareas de código abierto, así que vamos a instalar en este artículo un servidor de Vikunja.

¿Vikunja? ¿Vikunja en inglés no es el bicho ese parecido a una llama con el que se hacen los kebabs? ¿O era una alpaca? En todo caso: Mmmm... ¡qué rico!
Foto de una alpaca

No tienes remedio Usuario Anónimo. Volviendo a lo que nos interesa, este Docker es muy sencillo de usar. El problema es que es un software bastante nuevo y aún no se ha desarrollado una gestión de usuarios completa. Precisamente por eso quiero ponerlo. Nos va a obligar a ser creativos para crear usuarios nuevos y gestionar los existentes. Seguro que cuando menos os va a parecer curiosa mi propuesta al final del artículo y posiblemente alguien acabe aprendiendo más cosas sobre Docker, que para eso estamos aquí.

En fin… dejémonos de introducciones y vamos al turrón, que tenemos que instalar un servidor de Vikunja.

1- Creamos la estructura en la carpeta docker.

En los anteriores tutoriales hemos seguido siempre el mismo procedimiento. Hemos creado en su momento una carpeta llamada docker dentro de la carpeta de nuestro usuario, y ahí hemos creado todos los servicios que nos hacían falta.

Así que nos vamos a situar en esa carpeta con este comando:

cd /home/<tu_usuario>/docker

Ahí vamos a crear la carpeta dónde almacenaremos todo lo relativo a Vikunja. Dentro de esa carpeta vamos a crear dos carpetas más: una llamada db en la que estará la base de datos y otra llamada files con otro tipo de ficheros. Creamos esta estructura con la siguiente secuencia de comandos:

mkdir vikunja
cd vikunja
mkdir db && mkdir files

2- Creamos el archivo de configuración de Docker compose.

Vamos a crear el archivo con el comando sudo nano docker-compose.yml y le pondremos el siguiente contenido:

version: '3'

services:
  mariadb:
    image: mariadb:10
    container_name: vikunja_db
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: $MYSQLROOTPWD
      MYSQL_USER: $VIKDBUSR
      MYSQL_PASSWORD: $VIKDBPWD
      MYSQL_DATABASE: $VIKDBNAME
    volumes:
      - $DOCKERDIR/vikunja/db:/var/lib/mysql
    restart: unless-stopped

  api:
    image: vikunja/vikunja
    container_name: vikunja_api
    environment:
      VIKUNJA_DATABASE_HOST: vikunja_db
      VIKUNJA_DATABASE_PASSWORD: $VIKDBPWD
      VIKUNJA_DATABASE_TYPE: mysql
      VIKUNJA_DATABASE_USER: $VIKDBUSR
      VIKUNJA_DATABASE_DATABASE: $VIKDBNAME
      VIKUNJA_SERVICE_PUBLICURL: $VIKDOMAIN
      VIKUNJA_SERVICE_ENABLEREGISTRATION: 0
      VIKUNJA_MIGRATION_WUNDERLIST_ENABLE: 1
      VIKUNJA_MIGRATION_TODOIST_ENABLE: 1
      VIKUNJA_SERVICE_ENABLEEMAILREMINDERS: 1
      VIKUNJA_MAILER_ENABLED: 1
      VIKUNJA_MAILER_HOST: $MAILHOST
      VIKUNJA_MAILER_PORT: $MAILPORT
      VIKUNJA_MAILER_USERNAME: $MAILUSER
      VIKUNJA_MAILER_PASSWORD: $MAILPASS
      VIKUNJA_MAILER_FROMEMAIL: $MAILFROM
      VIKUNJA_MAILER_FORCESSL: 0
    ports:
      - 3456:3456
    volumes:
      - $DOCKERDIR/vikunja/files:/app/vikunja/files
    depends_on:
      - mariadb
    restart: unless-stopped
    

Si os fijáis este archivo de configuración tiene las siguientes características:

  • Despliega un servicio llamado «mariadb» que es una base de datos y otro servicio llamado «vikunja» que es la página web. Al igual de Nextcloud usa más de un servicio (Esto es muy habitual en software que crea algún tipo de página web).
  • La página web quedará disponible inicialmente en el puerto 3456
  • Este archivo de configuración de Docker Compose usa un montón de variables de entorno. Así que a estas alturas deberíais estar esperando un archivo «.env» más largo de lo habitual.

3- Creamos el archivo oculto de variables de entorno.

Como siempre, lo creamos en la carpeta donde está el Docker Compose con el comando sudo nano .env y le pondremos el siguiente contenido.

MYSQLROOTPWD=Contraseñasegura
VIKDBUSR=vikunjausr
VIKDBPWD=clavedelabasededatos
VIKDBNAME=vikunjadb
VIKDOMAIN=https://vikunja.midominio.com/
DOCKERDIR=/home/<tu_usuario>/docker
MAILHOST=elhostdemicorreo.com
MAILPORT=587
MAILUSER=usuarioqueenvia@elhostdemicorreo.com
MAILPASS=supercontraseñasupersegura
MAILFROM=noresponder@elhostedmicorreo.com

¿Qué líneas debemos modificar? Pues así resumiendo: Todas.

Los cuatro primeros campos hacen referencia a usuarios y contraseñas de la base de datos MariaDB. Yo os recomiendo que pongáis usuarios raros y contraseñas altamente aleatorias (aporread el teclado) porque si todo va bien son contraseñas y usuarios que no vais a volver a tocar nunca más (no son para entrar en Vikunja ni mucho menos).

Aseguraos de poner la dirección correcta del dominio en el que va a alojarse (en la parte 9 de los tutoriales hemos visto todo lo relativo a cómo tenéis que preparar el dominio) y la ruta correcta hacia la carpeta de dockers. Las 5 últimas líneas tenéis que completarlas con los datos de una cuenta de correo para que Vikunja os pueda mandar «cosas», como recordatorios de tareas o solicitudes para recuperar la contraseña de vuestro usuario de Vikunja por si se os pierde (Lo crearemos más adelante).

Acordaos que cuando terminéis de crear este archivo de variables tenemos que securizarlo con el comando sudo chmod 600 .env.

4- Despliegue de Vikunja.

Ya tenemos todo preparado. Desde la carpeta dónde vive el archivo docker-compose.yml, vamos a ejecutar el siguiente comando:

sudo docker-compose -p "vikunja" up -d

Después de un ratillo el proceso terminará y ya tendremos casi todo funcionando. Podemos comprobar que se ha generado la web correctamente entrando en esta dirección:

http://<tu.dirección.ip.local>:3456

Evidentemente, sustituid la parte de dentro por la ip local de la Raspberry. Debería apareceros una web similar a ésta:

Login de Vikunja
Oye... pero no me puedo logar ahí. Estoy probando con los usuarios y las contraseñas que hemos puesto en el .env y nada.

No adelantes acontecimientos, usuario Anónimo. Antes de logarnos debemos convertir esa dirección con la ip local en una dirección accesible desde internet.

5- Configuramos nuestro Proxy y asignamos la dirección web.

Esta parte va a volverse muy aburrida porque siempre es igual, y se repetirá en todos los dockers que despleguemos y nos creen una página web.

Simplemente debemos entrar en el Nginx Proxy Manager que hemos instalado en el artículo 9 de esta serie y en «hosts» –> «Proxy hosts» crear un proxy con los datos que queremos. Os recuerdo:

  • Domain name: Ponemos la dirección que va a tener el Vikunja. Posiblemente sea algo como «vikunja.midominio.es».
  • Scheme: http
  • Forward Hostname / IP: poned la ip local de la raspberry
  • Forward Port: 3456

Luego en la ventana SSL debemos crear un certificado y activarlo. Os remito al punto 8 de este tutorial, en el que el proceso está muy bien explicado.

Con esto todo hecho, ya deberíamos poder entrar en nuestra web usando nuestro dominio, en lugar de la ip local de la raspberry. Deberíamos poder entrar usando una URL de este tipo.

https://vikunja.midominio.com

¡Pero sigo sin poder logarme en la web!

No seas pesado, anda, que ya lo vamos a resolver en el siguiente punto.

6- Creamos un script para poder dar de alta a usuarios.

Si nos fijamos en el archivo de configuración de docker compose que estamos usando, hay una línea que pone así.

VIKUNJA_SERVICE_ENABLEREGISTRATION: 0

Esto impide que nadie se registre en la web de Vikunja. Si el valor fuera 1, entonces cualquiera podría registrase en la web y…

Ah, entonces listo. Pongo ese valor en 1 y a otra cosa mariposa. 

¡Nooooo! A ver… si dejas ese valor en 1, efectivamente vas a poder registrarte desde la propia web de Vikunja, pero lo que nos interesa es que no pueda entrar cualquiera en nuestra instalación y crearse un usuario. Así que esa línea la dejaremos como está.

Vikunja permite crear usuarios usando la línea de comandos y lo haremos por ahí. El problema es que el comando para, por ejemplo, crear un usuario usando docker es muy largo. Viene a ser algo como ésto.

docker exec vikunja_api /app/vikunja/vikunja user create -e correo@electronico.com -p misupercontraseña -u miusuario

Por tanto vamos a automatizar un poco estas cosas con un scritp made-in-Marcos (a ver si no os revienta todo). En la carpeta dónde está el archivo docker-compose.yml, vamos a crear un script con este comando:

sudo nano usuarios.sh

En el editor de textos debemos poner lo siguiente:

#!/bin/bash

# Función para listar usuarios
listar_usuarios() {
    echo "Listado de usuarios:"
    docker exec vikunja_api /app/vikunja/vikunja user list
}

# Función para crear usuario
crear_usuario() {
    # Solicitar al usuario el nombre de usuario
    read -p "Introduce el nombre de usuario: " username

    # Solicitar al usuario la contraseña (sin mostrarla en pantalla)
    read -sp "Introduce la contraseña: " password
    echo

    # Solicitar al usuario el correo electrónico
    read -p "Introduce el correo electrónico: " email

    # Ejecutar el comando docker con los valores proporcionados por el usuario
    docker exec vikunja_api /app/vikunja/vikunja user create -e "$email" -p "$password" -u "$username"
}

# Función para borrar usuario
borrar_usuario() {
    # Listar usuarios para mostrar los IDs
    listar_usuarios

    # Solicitar al usuario el ID del usuario a eliminar
    read -p "Introduce el ID del usuario que deseas eliminar: " userID

    # Ejecutar el comando de docker para eliminar el usuario con el ID proporcionado
    docker exec vikunja_api /app/vikunja/vikunja user delete "$userID" -c -n
}

# Función principal
main() {
    while true; do
        echo "¿Qué quieres hacer?"
        echo "1. Listar usuarios"
        echo "2. Crear usuario"
        echo "3. Borrar usuario"
        echo "4. Salir"

        read -p "Introduce el número de la acción que deseas realizar: " opcion

        case $opcion in
            1)
                listar_usuarios
                ;;
            2)
                crear_usuario
                ;;
            3)
                borrar_usuario
                ;;
            4)
                echo "Saliendo del programa."
                exit 0
                ;;
            *)
                echo "Opción inválida. Por favor, selecciona una opción válida."
                ;;
        esac
    done
}

# Llamada a la función principal
main

Evidentemente, después de editarlo debemos guardar cambios con Control + O y salimos de nano con Control + X.

No quiero pararme demasiado en este archivo. Lo único que quiero que tengáis claro es que básicamente usa los comandos que nos proporciona la gente que desarrolla vikunja para gestionar los usuarios. No hace nada raro. Y usa en casi todos ellos variables para que introducir los datos sea algo muy sencillo.

Para trabajar con él, primero lo debemos hacer ejecutable con el siguiente comando:

sudo chmod +x usuarios.sh

Para gestionar los usuarios, lo único que hay que hacer es ejecutar ese script como superusuario (con sudo delante del nombre del script). Por tanto si queremos crear nuestro primer usuario ejecutaríamos ésto.

sudo ./usuarios.sh

Ahí nos aparecerá un menú muy sencillo que simplemente debemos completar. Por ejemplo, para crear un usuario teclearíamos el número 2 y pondríamos los datos que nos pide el script. Os voy a poner una captura de pantalla a modo de ejemplo.

Creación de un usuario

Así que fijaos, hemos creado un Docker muy simple, pero podemos interactuar con él con un script que se ejecuta desde el propio host. Cada vez estamos haciendo cosas más raras con nuestros dockers.

7- Creamos otro script para actualizar el docker cuando queramos.

Como siempre, actualizar este docker a una versión superior es muy sencillo. Lo mejor es crear un script muy simple que seguro conocéis porque cada vez es más y más largo, según vamos añadiendo software a nuestro equipo. En caso de que este sea el único docker que tenemos en el equipo, crearíamos el script con el comando sudo nano /home/<tu_usuario>/actualizar.sh (cambiad lo de <tu_usuario> por vuestro usuario de la raspberry) y le pondríamos este código.

sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
cd /home/marcos/docker/vikunja
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now

Guardaríamos ese archivo y luego le daríamos privilegios de ejecución con el comando sudo chmod +x actualizar.sh . Para ejecutarlo, simplemente nos situaríamos en la carpeta dónde lo hemos dejado y ejecutaríamos un sudo ./actualizar.sh.

Y en caso de haber hecho el resto de tutoriales, entonces la cosa se alargaría bastante. Editaríamos ese archivo (que ya lo tenemos creado) y le añadiríamos el mismo código al final del todo, hasta dejarlo así.

sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
cd /home/<tu_usuario>/docker/pihole
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/wireguard
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now
cd /home/<tu_usuario>/docker/amule
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now
cd /home/<tu_usuario>/docker/transmission
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/plex
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/navidrome
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/nextcloud
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/vikunja
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now

El uso de este gestor de tareas os dejo que lo descubráis por vuestra cuenta, pero os adelanto que podéis sacarle mucho partido.

¿Os ha parecido complicada la instalación? ¿Haríais de alguna otra forma el script que nos hemos inventado para crear usuarios? Estaré atento a vuestros comentarios.

Share

2 comentarios

  1. Carlos

    Una vez mas gracias Marcos!
    Gracias a tus post he aterrizado a lo grande en Docker!! de paso te comento que, gracias a la necesidad de tener que actualizar Nagios en mi empresa, he decidido tirar por Docker y he creado mo propio fichero docker-compose y con la configuracion lista para monitorizar equipos Linux y Windows, te lo pego por aquí:
    https://github.com/txurtxil/nagios

    Un saludo!!

  2. Aglak

    Me he liado un poco con los volúmenes y el archivo .env pero ya está en marcha. Esta serie me está encantado y como dice Carlos, yo también estoy aprendiendo un motón.Gracias de nuevo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

© 2024 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies