Ce docker est fait à partir des repo Git https://github.com/ptx-tech/fnm-webui-docker et https://github.com/pirmins/fnm-fsgui et corrige certains bugs à l'installation. Le but est de mettre en place différentes interfaces opensources existantes à FastNetMon (https://github.com/pavel-odintsov/fastnetmon).
This docker is made from the Git repo https://github.com/ptx-tech/fnm-webui-docker and https://github.com/pirmins/fnm-fsgui and it fixes some bugs on installation. The aim is to implement some interfaces at FastNetMon (https://github.com/pavel-odintsov/fastnetmon).
Comme dit plutôt, j'ai effectué des changements sur le repo Git WebUI de base, voici les différents changements.
As I said earlier, I've made some changes to the basic Git repo, here are the various changes.
- modifier le fichier examples/compose/fnmwebui.env et retirer :
CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_HOST=redis
- modifier le fichier examples/compose/docker-compose.yml port la section "port" de la partie fnmwebui comme suit :
ports:
- "0.0.0.0:8000:8000"
Comme dit plutôt, j'ai effectué des changements sur le repo Git fnm-fsgui de base, voici les différents changements.
As I said earlier, I've made some changes to the basic fnm-fsgui Git repo, here are the various changes.
-
Ce n'est pas une correxion mais j'ai redesigné pour que ça se lance directement toutes les interfaces avec un même docker-compose. J'ai donc un peu changé le dockerfile de base et ajouté un volume partagé pour avoir accès facilement à la base de données et au code.
-
J'ai enlevé la librairie "django-bulma-widget==1.2" des requirements et réarrangé le code en conséquence car elle empéchait le fonctionnement de l'interface, je n'arrivais pas à la charger, elle n'existe peut-être plus.
-
J'ai réaffecté quelques changements visuels car le rendu de l'interface était mal arrangé étant donné que j'ai enlevé l'utilisation de la librairié "django-bulma-widget==1.2" et que c'était une librairie visuelle.
Voici les différentes étapes à suivre pour mettre en place l'infrastructure FastNetMon, Grafana et la WebUI.
Here's how to set up the FastNetMon infrastructure, Grafana and WebUI.
Faire une machine ubuntu (en production c'est conseillé 16Gb de RAM et 8 coeurs)
Commencez par cloner ce repository
git clone https://github.com/ShonenNoSeishin/DockerFastNetMon.git
cd DockerFastNetMon
Souscrire à une version d'essais sous https://fastnetmon.com/trial/ pour recevoir un coupon d'activation par mail.
wget https://install.fastnetmon.com/installer -Oinstaller
sudo chmod +x installer
sudo ./installer -activation_coupon <coupon_d’activation>
vous devriez maintenant avoir accès au fcli avec la commande :
sudo fcli
Il est ensuite possible de faire tourner une couche graphique Grafana.
sudo ./installer -install_graphic_stack
Si vous en avez, changer les certificats par défaut sous « /etc/nginx/sites-enabled/grafana.conf » : o ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; o ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# redémarrage du service nginx
sudo systemctl restart nginx
Changer de mot de passe :
sudo ./installer -reset_visual_passwords -visual_login admin
# Récupérer le mdp renvoyé
configurer le fichier « /etc/grafana/provisioning/datasources/fastnetmon.yaml :
apiVersion: 1
providers:
- name: dashboards
type: file
updateIntervalSeconds: 30
editable: true
options:
path: /var/lib/grafana/fastnetmon_dashboards
foldersFromFilesStructure: true
Maintenant, on sait joindre l’interface Grafana via 127.0.0.1 avec le login « admin » et le mot de passe reçu plus tôt.
Pour la partie WebUI et fsgui, il faudra suivre les instructions suivantes :
# Créer un login API
sudo fcli set main web_api_login admin
# Créer un password API
sudo fcli set main web_api_password <password>
# Spécifier le port API
sudo fcli set main web_api_port 10007 # ou un autre port
# Spécifier l'hôte
sudo fcli set main web_api_host <votre_ip>
# Commit les changements dans la DB Mongo (créée à l'installation)
sudo fcli commit
# Relancer le service API
sudo systemctl restart fastnetmon_web_api
attention, si vous mettez 127.0.0.1 au lieu de votre IP, vous risquez de ne pas savoir joindre l'API via docker et donc ne pas savoir interagir via la WebUI
Il faudrait maintenant bien avoir accès à l'API, vérifiez comme ceci :
curl -X GET -u admin:<API_PASSWD> http://<votre_IP>:10007/license
# Vous devirez recevoir un success
note : vous devriez également savoir la joindre depuis le docker ("docker exec -it /bin/bash")
En cas de problème avec l'api, n'hésitez pas à débugger avec les tips donné sur cette page https://fastnetmon.com/docs-fnm-advanced/advanced-api/ (vérifier que le service est up ...)
Créer votre fichier .env à partir de celui dans l'example :
# Aller dans le bon dossier
cd fnm-fsgui
# Créer le fichier .env à partir de celui d'exemple
cp example.env .env
# --> modifier les valeurs pour que ça corresponde avec les vôtres
Pour la suite il faut avoir installé docker :
sudo apt install docker docker.io -y
mais aussi "docker compose" (sans tirets), testez si vous l'avez avec :
docker compose version
Si vous ne l'avez pas, suivre la section "install plugin manually de ce repo git https://docs.docker.com/compose/install/linux/
Une fois que vous avez la version de docker compose (ne pas oublier d'ajouter l'utilisateur dans le groupe docker et de démarrer une nouvelle session si vous ne voulez pas utiliser sudo) :
# ajouter l'user au groupe docker
sudo usermod -aG docker user
# ouvrir une nouvelle session pour prendre en compte
su user
cd ../examples/compose
# compiler l'image docker de fsgui
docker build ../../fnm-fsgui/.
# Lancer les conteneurs en mode détaché
docker compose up -d
Avant d'accéder à l'interface graphique, il faut faire une migration (pour mettre à jour la DB de Django), Pour se faire, il faut entrer dans le conteneur en interractif :
# Entrer dans le conteneur (note : fsgui-django est le nom du conteneur)
docker exec -it fsgui-django /bin/bash
# préparer la migration
python manage.py makemigrations
# faire la migration
python manage.py migrate
Ainsi, la base de donnée du serveur Django est bien à jour. Cependant, il faut aussi mettre à jour avec les classes créées dans le projet spécifique du serveur Django comme suit :
# Entrer dans le conteneur (note : fsgui-django est le nom du conteneur)
docker exec -it fsgui-django /bin/bash
# préparer la migration (note : fsgui est le nom du projet Django initialisé)
python manage.py makemigrations fsgui
# faire la migration
python manage.py migrate fsgui
On peut maintenant accéder à l’interface WebUI via http://localhost:8024. Il faut créer un compte admin django pour accéder à l'interface. Pour se faire, il faut également entrer dans le conteneur en interractif :
# Entrer dans le conteneur (note : fsgui-django est le nom du conteneur)
docker exec -it fsgui-django /bin/bash
# Créer le compte admin
python manage.py createsuperuser
On peut maintenant accéder à l’interface WebUI via http://localhost:8000 et les credentials par défaut sont :
- username: admin@localhost
- password: password
à la création du DC via la WebUI, on reçoit une erreur 500 : De base la table de la base de données de WebUI n’accepte pas assez de caractères pour le mot de passe API ce qui fait que le mot de passe configuré pour l’API ne passe pas auprès de la WebUI, donc au lancement du docker, il augmenter la taille du champ directement dans le docker :
# lancer le conteneur en interactif
docker exec -it fnmwebui_db /bin/bash
# entrer dans la db fnmui
mariadb fnmwebui
# regarder les tables existantes
show tables ;
# voir la configuration de la table dc
desc dc ;
# modifier le champ qui pose problème
alter table dc modify api_password VARCHAR(255) ;
Il reste une dernière erreur à régler. C'est probablement dû au fait que dans l'image docker utilisée, le code laravel à été mis à jour alors que la version de laravel dans docker est restée la même (ce n'est qu'une hypothèse). l'erreur fait que lorsque l'on clique sur certains boutons, il y a des erreur 500 qui apparaissent. Après avoir debug le code qui posait problème, j'ai mit le code corrigé dans ce repo Git sous CodeToChange/show.blade.php. Il faudra donc entrer dans le conteneur docker et changer le fichier en question comme suit :
# ouvrir le conteneur en interactif
docker exec -it fnmwebui /bin/bash
# déplacer le fichier problématique et le mettre en backup
mv resources/views/dc/show.blade.php resources/views/dc/show.blade.php.bak
# recréer le fichier
vi resources/views/dc/show.blade.php
# --> copier le contenu du fichier CodeToChange/show.blade.php (dans ce Git) dans le nouveau fichier créé
# --> note : sur vi, il faut appuyer sur "i" pour entrer en insert mode, puis coller avec ctrl-shit-V puis sortir de l'insert mode en faisant "esc" puis faire ":wq" pour quitter et sauvegarder
Au niveau de ce que j'ai corrigé en tant que tel dans le code, c'était pour les 3 erreurs lors d'un accès à un tableau, l'accès se faisait trop vite avant que l'entrée recherchée ne soit correctement initialisée, donc ça crachait. J'ai donc simplement ajouté des vérification pour ces entrées et donc maintenant, ça se lance une foit prêt. il a également fallu que je change "\Carbon\Carbon::now()" par "time()" lors d'une conditon pour éviter un problème de comparaison entre des données de types différentes.
Maintenant, tout devrait fonctionner correctement.
Dans le cadre de ce docker, j'ai laissé le debugging activé pour corriger certaines erreurs. Dans le cas ou vous voulez le désactiver, il faudra retirer APP_DEBUG=true des variables d'environnement dans "examples/compose/fnmwebui.env". Ensuite, il faudra entrer dans le conteneur en interactif pour changer le fichier env directement au sein du conteneur pour que ça prenne effet :
docker exec -it fnmwebui /bin/bash
echo "APP_DEBUG=true" >> .env
# sortir de l'interactif
exit
# redémarrer le docker pour que ça prenne effet
docker compose down
docker compose up
De cette manière, vous verrez les erreurs directement dans la page web et ce sera plus facile à debug.
Il peut arriver pour la WebUI qu'une erreur 500 se produise, j'en ai déjà eu, mais c'est tellement peu fréquent que je n'ai pas su réellement la débugger ... Si cela arrive, c'est uniquement dans l'affichage, si vous rechargez la page, votre action sera à priori bel et bien prise en compte.