Stage 2 : Vikunja
DGA MI - PĂŽle Sup de La Salle
đ Introduction aux Scripts d'Exploitation
Afin de simplifier le déploiement et la maintenance quotidienne de l'instance Vikunja, j'ai conçu et rédigé un ensemble de 7 scripts d'automatisation Bash. Ces scripts permettent de s'affranchir de la saisie manuelle des commandes Podman.
đ 1. Automatisation de l'Installation
Le script ./install_start.sh automatise la création de l'infrastructure complÚte. Il configure l'environnement (réseaux, volumes) et provisionne les services en une seule exécution.
- Fonctionnement : Il suffit d'exécuter le script et de renseigner les variables demandées (IP, mots de passe BDD, noms des images).
- Configuration LDAP : L'authentification LDAP est pré-configurée dans le script (à adapter selon les paramÚtres du serveur Active Directory).
- Prérequis : Podman installé et images
mariadb/vikunjachargées localement.
đ Voir le code source : install_start.sh
#!/bin/bash
#!/bin/bash
set -eu
# --- CONFIGURATION ---
echo ""
echo " --- Configuration des paramĂštres de Globaux --- "
echo ""
IP_VM=`ip route get 1.2.3.4 | awk '{print $7}'` # L'adresse IP de votre machine linux hébergeur
read -p "L'ip utilisĂ© va ĂȘtre celle-ci : ${IP_VM}. Voulez vous la modifier ? (o/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Oo]$ ]]
then
read -p "Entrez l'adresse IP de votre machine linux hébergeur au format X.X.X.X : "
IP_VM=$REPLY
fi
echo ""
read -sp "Entrez le mot de passe Root de MariaDB sans espace : "
DB_ROOT_PASS=$REPLY # Mot de passe Root de MariaDB
echo ""
read -sp "Entrez le Mot de passe Utilisateur de Vikunja sans espace : "
DB_USER_PASS=$REPLY # Mot de passe Utilisateur Vikunja
echo ""
echo ""
read -p "Entrez le Nom de votre image MariaDb avec la version donnée dans podman images (ex : mariadb:11.4) : "
IMG_MARIADB=$REPLY # Nom de votre image MariaDB (A retenir afin de le réutiliser dans les autres scripts)
read -p "Entrez le Nom de votre image MariaDb avec la version donnée dans podman images (ex : vikunja:latest) : "
IMG_VIKUNJA=$REPLY # Nom de votre image MariaDB (A retenir afin de le réutiliser dans les autres scripts)
# --- Démmarage de l'application ---
echo ""
echo "--- Démarrage du déploiment de Vikunja ---"
echo ""
# 1. Création du réseau (ne fait rien s'il existe déjà )
podman network exists vikunja-net || podman network create vikunja-net
echo "Réseau vérifié."
echo ""
# 2. Création des volumes (ne fait rien s'ils existent déjà )
podman volume inspect vikunja_db_data >/dev/null 2>&1 || podman volume create vikunja_db_data
podman volume inspect vikunja_db_files >/dev/null 2>&1 || podman volume create vikunja_db_files
echo "Volumes vérifiés."
echo ""
# 3. Lancement de MariaDB
# Note : On supprime l'ancien conteneur s'il existe, meme arrĂȘtĂ©, pour Ă©viter les conflits de noms
podman rm -f vikunja_db >/dev/null 2>&1 || true
echo "Lancement de la base de données ..."
podman run --privileged -d \
--name vikunja-db \
--network vikunja-net \
-v vikunja_db_data:/var/lib/mysql:Z \
-e MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS} \
-e MYSQL_USER=vikunja \
-e MYSQL_PASSWORD=${DB_USER_PASS} \
-e MYSQL_DATABASE=vikunja \
${IMG_MARIADB}
#on attend quelques secondes que la db soit prĂȘte avant de lancer l'app
sleep 20
# 4. Lancement de Vikunja
echo ""
echo " --- Configuration des paramĂštres de Vikunja --- "
podman rm -f vikunja >/dev/null 2>&1 || true
# Valeur par défault pour la création de compte depuis la page login : false
OPT_CREATE="-e VIKUNJA_SERVICE_ENABLEREGISTRATION=false"
echo ""
read -p "Voulez-vous autoriser n'importe quelle personne à créer un compte en se rendant sur la page de login de votre vikunja ? (o/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Oo]$ ]]
then
# Valeur par défault pour la création de compte depuis la page login : true
OPT_CREATE="-e VIKUNJA_SERVICE_ENABLEREGISTRATION=true"
fi
echo ""
echo "Lancement de Vikunja ..."
podman run -d \
--name vikunja \
--network vikunja-net \
-p 3456:3456 \
-v vikunja_db_files:/app/vikunja/files:Z \
-e XDG_CACHE_HOME=/app/vikunja/files/.cache \
-e VIKUNJA_DATABASE_HOST=vikunja-db \
-e VIKUNJA_DATABASE_PASSWORD=${DB_USER_PASS} \
-e VIKUNJA_DATABASE_TYPE=mysql \
-e VIKUNJA_DATABASE_USER=vikunja \
-e VIKUNJA_SERVICE_PUBLICURL=http://${IP_VM}:3456/ \
${OPT_CREATE} \
-e VIKUNJA_AUTH_LDAP_ENABLED=false \
-e VIKUNJA_AUTH_LDAP_HOST=pc.active.directory \
-e VIKUNJA_AUTH_LDAP_PORT=389 \
-e VIKUNJA_AUTH_LDAP_USETLS=false \
-e VIKUNJA_AUTH_LDAP_VERIFYTLS=false \
-e VIKUNJA_AUTH_LDAP_BINDDN="CN=svc-compte",OU=Utilisateurs,DC=active,DC=directory" \
-e VIKUNJA_AUTH_LDAP_BINDPASSWORD=mdp_scv-compte \
-e VIKUNJA_AUTH_LDAP_BASEDN="DC=active,DC=directory" \
-e VIKUNJA_AUTH_LDAP_USERFILTER="(&(objectClass=user)(sAMAccountName=%[1]s))" \
-e VIKUNJA_AUTH_LDAP_ATTRIBUTE_USERNAME=sAMAccountName \
-e VIKUNJA_AUTH_LDAP_ATTRIBUTE_MAIL=mail \
-e VIKUNJA_AUTH_LDAP_GROUPSYNCENABLED=true \
-e VIKUNJA_AUTH_LDAP_GROUPSYNCFILTER="(objectClass=group)" \
-e VIKUNJA_SERVICE_LOGLEVEL=DEBUG \
${IMG_VIKUNJA}
echo ""
echo "Terminé ! Vikunja est accessible sur : "
echo " --- http://${IP_VM}:3456 ---"
echo ""
đ 2. Gestion de l'Ătat du Service
Ces scripts manipulent les conteneurs existants sans affecter les données. Ils se basent sur les noms de conteneurs par défaut définis lors de l'installation.
| Script | Action | Usage |
|---|---|---|
| Démarrage | Lance les conteneurs MariaDB et Vikunja. | ./start.sh |
| ArrĂȘt | Stoppe proprement les services. | ./stop.sh |
| Redémarrage | Relance les services (utile aprÚs une modif de conf). | ./restart.sh |
đ Voir le code source : start.sh
#!/bin/bash
#!/bin/bash
set -eu
echo "Démarrage des services Vikunja ..."
podman start vikunja-db
#on attend quelques secondes que la db soit prĂȘte avant de lancer l'app
sleep 20
podman start vikunja
echo "Services démmarés."
đ Voir le code source : stop.sh
#!/bin/bash
#!/bin/bash
set -eu
echo "Arret des services Vikunja ..."
podman stop vikunja
podman stop vikunja-db
echo "Services arrĂȘtĂ©s"
đ Voir le code source : restart.sh
#!/bin/bash
#!/bin/bash
set -eu
echo "Redémarrage des services ..."
podman restart vikunja-db
#on attend quelques secondes que la db soit prĂȘte avant de relancer l'app
sleep 20
podman restart vikunja
echo "Redémarrage terminé."
đ§č 3. Maintenance et Nettoyage
Deux scripts distincts permettent de nettoyer l'environnement selon le besoin :
Suppression des conteneurs
Exécution : ./remove.sh
Supprime les instances MariaDB et Vikunja (mĂȘme actives).
Sécurité : Les volumes (BDD et fichiers) et le réseau Podman sont conservés. Idéal pour appliquer une mise à jour d'image sans perte de données.
Suppression totale
Exécution : ./purge_data.sh
Réinitialise complÚtement l'environnement Podman.
â ïž Risque : Supprime le rĂ©seau, les conteneurs ET les volumes de donnĂ©es. Ă utiliser uniquement pour repartir totalement de zĂ©ro.
đ Voir le code source : remove.sh
#!/bin/bash
#!/bin/bash
set -eu
echo "Supression des conteneurs vikunja (Les données sont conservées) ..."
#ArrĂȘt forcĂ© et supression
podman rm -f vikunja
podman rm -f vikunja-db
echo "Conteneurs supprimés. Vous pouvez relancer install.sh"
â ïž Voir le code source : purge_data.sh
#!/bin/bash
#!/bin/bash
set -eu
read -p "ATTENTON: Cela va effacer toutes les données définitivement. Etes-vous sûr ? (o/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Oo]$ ]]
then
echo "Destruction Totale ..."
podman rm -f vikunja vikunja-db
podman volume rm vikunja_db_data vikunja_db_files
podman network rm vikunja-net
echo "Tout a été effacé."
fi
đ€ 4. Administration des Utilisateurs
J'ai développé un gestionnaire interactif (./manage_user.sh) en ligne de commande pour administrer les comptes directement depuis le serveur hÎte.
L'exécution de ce script ouvre un menu proposant 4 options :
- Lister : Affiche un tableau récapitulatif (ID, Username, Email) des utilisateurs enregistrés.
- Créer : Ajoute un nouvel utilisateur (demande Username, Password, Email en prompt).
- Supprimer : Affiche la liste des comptes puis demande l'ID de l'utilisateur à révoquer.
- Quitter : Sortie propre du script.
L'interface CLI permet d'interagir directement avec la base de données Vikunja via Podman sans passer par l'interface Web.
đ Voir le code source : manage_user.sh
#!/bin/bash
#!/bin/bash
set -eu
list_users() {
echo "Listes d'utilisateurs"
#Listes des utilisateurs Permet d'enlever les messages level=INFO dans le terminal
podman exec vikunja /app/vikunja/vikunja user list | grep -v "level=INFO"
}
create_user() {
# Entrer du nom d'utilisateur
read -p "Entrez un nom d'utilisateur : "
username=$REPLY
# Entrer du mot de passe de l'utilisateur (sans le voir)
read -sp "Entrez le mot de passe de l'utilisateur : "
password=$REPLY
# Entrer du mail de l'utilisateur
echo ""
read -p "Entrez le mail de l'utilisateur : "
email=$REPLY
#Execution de la commande avec les valeurs entrer. grep : Permet d'enlever les messages level=INFO dans le terminal
podman exec vikunja /app/vikunja/vikunja user create -e "$email" -p "$password" -u "$username" | grep -v "level=INFO"
}
delete_user() {
# Liste des utilisaateurs pour connaitre l'ID Permet d'enlever les messages level=INFO dans le terminal
podman exec vikunja /app/vikunja/vikunja user list | grep -v "level=INFO"
#Entrer de l'ID de l'utilisateur Ă supprimer
read -p "Entrez l'ID de l'utilisateur que vous souhaitez supprimer : "
id="$REPLY"
# Execution de la commande avec l'id entrer Permet d'enlever les messages level=INFO dans le terminal
podman exec vikunja /app/vikunja/vikunja user delete "$id" -c -n | grep -v "level=INFO"
}
#Fontion Main
main() {
while true; do
echo "Quelle actions voulez-vous effectuez ? "
echo "1. Lister les utilisateurs"
echo "2. Créer un utilisateur"
echo "3. Supprimer un utilisateur"
echo "4. Sortir"
read -p "Entrez le numéro de l'action que vous voulez effectuer : " option
case $option in
1)
list_users
;;
2)
create_user
;;
3)
delete_user
;;
4)
echo "Sorti du programme"
exit 0
;;
*)
echo "Option Invalide. Séléctionnez une option valide."
esac
done
}
#Appelle de la fonction main
main