Logiciels Helpdesk – Trudesk (Raspberry PI – Rock64 )

Logiciels Helpdesk – Trudesk (Raspberry PI – Rock64 )

11 janvier 2019 Helpdesk Support 0

Les logiciels de helpdesk, et pour en avoir utilisé plusieurs, sont généralement des usines à gaz…
Il me faut une suite qui tourne sur des processeurs ARM, dotée d’une interface API, permettant la création de tickets automatisée, l’envoi de mails, et qui permet surtout de créer des tickets, d’une manière simple, afin de capitaliser l’information relative à ce projet.

Le soft que j’ai choisi se nomme : “Trudesk” [ http://trudesk.io/ ]. Une solution entièrement Opensource développée par Chris Brame, disponible, réactif, et très attentif aux suggestions.
Cette solution nécessite l’installation de la version 3.6 de mongodb, non disponible sur Raspberry, mais j’ai réussi à la compiler sur un Rock64. De part les spécifications de cette version, je ne pense pas qu’elle puisse tourner sur un Raspberry PI3 (pas assez de mémoire).

Vous pouvez tester l’application directement sur ce site : http://docker.trudesk.io/. (Login : demo.user / Password : password)

Installation

Je dispose d’un serveur Raspberry PI3, équipé de nodejs version v10.15.3 et d’un serveur de base de données Mongodb v3.6 sur un rock64 (pour les raisons évoquées ci-avant).

Installation de Nodejs et dépendances Debian

Pour installer Trudesk vous devez disposer de Nodejs (version 9 minimum requis), j’ai choisi la version 10 LTS :
apt install python-dev make build-essential curl git
curl -sL https://deb.nodesource.com/setup_10.x | bash –
apt install nodejs
# installation de yarn
curl –compressed -o- -L https://yarnpkg.com/install.sh | bash

(*) L’utilisation de yarn peut nécessiter une reconnexion à la console ssh

Installation de Trudesk

Connecté “root” au Rapsberry, j’exécute la procédure décrite sur la page http://trudesk.io/v1/guide/installation.html#Linux-Install

cd /opt
git clone https://www.github.com/polonel/trudesk
cd trudesk
npm install -g yarn
yarn
yarn run build

ET ….. Je ne démarre pas le service (commande indiquée sur l’instruction du site trudesk.io : “node runner” )

http://trudesk.io/v1/guide/installation.html#Linux-Install

Paramétrage systèmes

Création de l’utilisateur “trudesk” :
useradd -d /opt/trudesk -M trudesk
Attribution des droits sur le répertoire /opt/trudesk
chown -R trudesk:trudesk /opt/trudesk

Création du service système trudesk.service (systemd)

Créer le fichier /etc/systemd/system/trudesk.service contenant :

[Unit]
Description=Trudesk – Helpdesk system
After=network.target
[Service]
User=trudesk
Group=trudesk
Type=simple
ExecStart=/usr/bin/node /opt/trudesk/app.js
Restart=on-failure
RestartSec=20
StartLimitInterval=30
StartLimitBurst=5
[Install]
WantedBy=multi-user.target

Activation du service au démarrage du serveur :
systemctl enable trudesk
et rechargement de la configuration systemd :
systemctl daemon-reload

Démarrage du service Trudesk

Démarrage du service : systemctl start trudesk
Vous pouvez contrôler le bon démarrage du service en tapant la commande : ps -ef | grep node

trudesk 16373 1 99 13:46 ? 00:00:07 /usr/bin/node /opt/trudesk/app.js

Le service est bien démarré à partir du compte utiisateur “trudesk”

Installation de Mongodb (Rock64 – arm64 – 64bits)

Je vous renvoi à mon billet situé ici : https://www.mytinydc.com/index.php/2019/02/19/installer-mongodb-3-6-x-sur-un-rock64-arm64/

Paramétrage

Connectez-vous au rock64, vous devrez utiliser l’outils client : “mongo” pour accéder au moteur Mongodb, afin de créer le rôle d’accès à la base de données trudesk.

Création du rôle trudesk

Connectez vous au service mongodb avec la commande :
mongo
Puis saisir ces instructions (dans mon cas j’ai choisi de nommer la base de données : “trudesk”)

# connexion à la nouvelle base “trudesk”
use trudesk
# Création de l’utilisateur trudesk, mot de passe trudesk avec les autorisations read et write
db.createUser(
{ user: “trudesk“, pwd: “trudesk“, roles:[{role: “readWrite” , db:”trudesk“}] } )
exit
!!!! ATTENTION au copier-coller, respectez bien les “double-quotes” !!!!
user” correspond au login d’accès
pwd” correspond au mot de passe d’accès
db” correspond au nom de la base de données a créer
Adaptez cette configuration à votre cas d’utilisation.

Firewall

Sur le raspberry (serveur NodeJS – application Trudesk)

Input : TCP/8118 [service trudesk]
Output : TCP/27017 [Accès mongodb

Sur le rock64 (serveur MongoDB – Base de données)

Input : TCP/27017 [Accès mongodb]

Accès à l’application

Utilisez maintenant votre navigateur web et entrez l’url d’accès à l’application :

http://[adresse IP ou FQDN du serveur Raspberry PI]:8118

Le premier accès va vous permettre de créer la configuration de l’application, au travers de formulaires.
Un des formulaire, permet de vérifier l’accès à la base de données.
Concernant ce dernier, reportez les informations de rôle Mongodb, précédemment saisies (login, mot de passe, nom de la base).

Paramétrage de l’application

Le service est accessible de votre navigateur, le processus de paramétrage démarre :

Cliquez sur le bouton LETS START pour démarre
Indiquez les paramètres d’accès à la base de données mongodb
Il s’agit d’une nouvelle base de données, cliquez sur le bouton NEW DATABASE
Il s’agit du paramétrage de l’accès administrateur, je préconise le username : admin, et indiquez un mot de passe. Ce compte vous permettra d’administrer l’application.
Patientez encore un petit peu…
****** ATTENTION, ici ne cliquez pas sur le bouton RESTART ME!
Ouvrir une console root et tapez la commande : systemctl restart trudesk
(Chris à effectuer les mofications qui seront disponibles dès la prochaine version)

Puis Rafraîchir la page du navigateur, en pressant la touche F5

Appuyer sur le bouton RESTART ME! entraîne une erreur visible dans le fichier /var/log/syslog :
#033[31merror#033[39m: message=process name not found, stack=Error: process name not found

Ceci est dû au fait que je n’utilise pas le “runner.js” de l’application (node runner.js) mais un service système (systemd), qui permet de gérer de manière standard l’exécutin de l’application : “systemclt start|stop|restart“. L’avantage majeur de passer par un service de type “systemd”, est de pouvoir paramétrer le comportement de l’application en cas de crash (évènement “failure”)

Saisir dans la zone Username : admin puis indiquez le mot précédemment enregistré dans la zone password

Création d’un compte type support

Ne travaillez pas avec le compte “admin” mais créez un premier compte utilisateur de type “support”. Ce type de compte permet de gérer l’intégralité des tickets, l’accès au statistiques,…

Conclusion

Hyper simple à mettre en œuvre et à utiliser, vous serez surpris de sa vitesse d’exécution sur un Raspberry. Je n’ai rencontré aucun problème majeur durant l’installation (moins de 20mn).

Aller plus loin

  • Création automatisée de tickets : à partir de la fonctionnalité Mailer (lecture d’un compte de messagerie – protocole IMAP, ou bien paramétrer une gateway Prometheus qui fera appel à l’API de création de ticket Trudesk.
  • Installé la traduction française

Problème rencontré en production

Suite à une défaillance du service mongodb, je devais systématiquement redémarrer le service trudesk, après redémarrage du service mongodb. L’application trudesk reste active mais présente des erreurs dans le fichier /var/log/syslog. Ce cas n’a pas été reproduit chez Trudesk.io. Le logiciel tente la reconnexion toutes les 10 secondes, ce qui n’est pas le cas sur un raspberry PI3. J’ai donc trouvé une solution système :

Modifiez le fichier /etc/systemd/system/trudesk.service comme suit :
[Unit]
Description=Trudesk – Helpdesk system
After=network.target
[Service]
User=trudesk
Group=trudesk
Type=simple
ExecStart=/usr/bin/node /opt/trudesk/app.js
Restart=on-failure
RestartSec=20
StartLimitInterval=30
StartLimitBurst=5
[Install]
WantedBy=multi-user.target

Puis pour l’application :

Ajoutez au fichier /opt/trudesk/src/middleware/index.js
après la ligne 56, l’instuction process.exit(1)


app.use(function (req, res, next) {
if (mongoose.connection.readyState !== 1) {
process.exit(1)
var err = new Error(‘MongoDb Error’)
err.status = 503
return next(err)
}


voir le ticket relatif à cette discussion chez trudesk.io (https://forum.trudesk.io/t/mongodb-crash-trudesk-should-be-restarted/146/8)