Installation de Loxya(Robert2)
Préambule
Loxya(Robert2) est un serveur de gestion et suivis d’inventaire.
La version gratuite est open-source et comprend les fonctions suivantes:
- Gestion du stock
- Gestion des sorties
- Calendrier
- Gestion des clients et emprunteurs
- Gestion du personnel
- Edition de fiches de sorties, devis et factures
Ce qu’elle ne comprend PAS:
- Authentification LDAP (ou tout autre centralisation d’authentification)
- Demande de réservation en ligne
- Scanner de code barre
- Assistance Loxya
Installation
Installer les dépendances
Robert 2 a besoin d’un serveur Web (ici Apache2), une base de données (ici MariaDB) et de certains modules PHP (version minimum supportée: php 8.0):
sudo apt install apache2 mariadb-server zip php libapache2-mod-php php-bcmath php-curl php-php-gettext php-intl php-mbstring php-xml php-bcmath php-mysql w3m -y
Base de données
Robert2 est compatible uniquement MYSQL ou MariaDB pour stocker ses données, je vais ici utiliser MariaDB et la configurer.
Installation sécurisée de MariaDB
sudo mysql_secure_installation
Enter current password for root (enter for none): MotDePasseRoot
Switch to unix_socket authentication [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Création de la base de données
- Se connecter à MariaDB :
sudo mysql -u root -p - Créer une base de donnée:
CREATE DATABASE robert2_db; - Créer un utilisateur autre que root:
CREATE USER 'robert2'@'localhost' IDENTIFIED BY 'motdepasse'; - Donner tous les droits à l’utilisateur sur la base de données
GRANT ALL PRIVILEGES ON robert2_db.* TO 'robert2'@'localhost'; - Recharger les privilèges:
FLUSH PRIVILEGES; - Fermer la connexion:
quit;
Modifier le fichier /etc/mysql/my.cnf en ajoutant les lignes suivantes:
[client-server]
...
default-character-set=utf8mb4
[mysqld]
...
collation-server = utf8mb4_unicode_ci
Serveur Web
Robert2 nécessite un serveur Web pour fonctionner, il ne supporte que NGINX et Apache2, je vais ici utiliser ce dernier.
HTTP
Créer et modifier le fichier /etc/apache2/sites-available/robert2.mydomain.local.conf:
<VirtualHost *:80>
ServerAdmin admin@mydomain.local
ServerName robert2.mydomain.local
ServerAlias www.robert2.mydomain.local
DocumentRoot /var/www/Robert2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/Robert2>
Options +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Location "/server-status">
SetHandler server-status
Require all granted
</Location>
</VirtualHost>
HTTPS
- Mettre respectivement le certificat (ex: robert2.mydomain.local.crt) et la clé privée (ex: robert2.mydomain.local.key) du serveur dans
/etc/ssl/certset/etc/ssl/private - Activer le module php ssl:
sudo a2enmod ssl - Modifier
/etc/apache2/sites-available/robert2.mydomain.local.conf:
<VirtualHost *:80>
ServerName robert2.mydomain.local
ServerAlias www.robert2.mydomain.local
Redirect permanent / https://robert2.mydomain.local/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@mydomain.local
ServerName robert2.mydomain.local
ServerAlias www.robert2.mydomain.local
DocumentRoot /var/www/Robert2
SSLEngine On
SSLCertificateFile /etc/ssl/certs/robert2.mydomain.local.crt
SSLCertificateKeyFile /etc/ssl/private/robert2.mydomain.local.key
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/Robert2>
Options +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Location "/server-status">
SetHandler server-status
Require all granted
</Location>
</VirtualHost>
Paramétrage d’Apache2
Afin de paramétrer correctement Apache2, il faut éditer le fichier /etc/apache2/apache2.conf et rajouter la ligne ServerName 127.0.0.1 à la fin.
Sans ça, l’erreur Apache Configuration Error AH00558: Could not reliably determine the server’s fully qualified domain name va apparaître quand on va utiliser apache2ctl configtest.
On active ensuite le VHost du serveur, désactive le site par défaut et vérifie la configuration:
sudo a2ensite robert2.mydomain.local
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
AH00112: Warning: DocumentRoot [/var/www/Robert2] does not exist
Syntax OK
L’avertissement est normale car on n’a pas encore créé le répertoire.
Enfin, on active le module URLRewriting et on redémarre Apache2:
sudo a2enmod rewrite
sudo systemctl restart apache2
Robert2
Ceci est la dernière étape de l’article, l’installation de Robert2.
Téléchargement
- Télécharger le .zip à cette adresse
- Le mettre dans
/var/www/ - L’extraire et renommer le dossier Robert2
- Donner les droits sur le dossier à l’utilisateur www-data:
sudo chown -R www-data:www-data /var/www/Robert2
Finalisation de l’installation
Afin de finaliser l’installation, il faut ouvrir un navigateur et se rendre sur l’IP du serveur, normalement, voila ce qui devrait s’afficher.

On peut lancer l’assistant en cliquant sur C’est parti !.

Cette page demande l’URL d’application qui est l’URL à laquelle on va se connecter à Robert2 (ici https://robert2.mydomain.local, il manque une partie sur la capture d’écran).
Après ça, il y a deux pages nous demandant de valider des paramètres et renseigner les informations de notre société avant d’arriver au paramétrage de la BDD.

Ici, on va pouvoir renseigner les informations de la BDD créée précedemment:
- Serveur MYSQL (host): localhost
- Utilisateur MYSQL (user): Le nom de l’utilisateur (ici robert2)
- Mot de passe MYSQL (password): Le mot de passe de l’utilisateur
- Nom de la base de données: Ici robert2_db
Une fois cela fait, il n’y a plus qu’a laisser Robert2 créer la structure de la BDD, créer un utilisateur et le serveur est prêt !
Erreurs
Page blanche
Donnez l’appartenance du dossier et sous-dossiers /var/www/Robert2 à www-data (chown).
apachectl status renvoie un problème avec www-browser
Installer le paquet w3m.
Désolé, mais l’API est inaccessible…
Cela signifie que l’URL a laquelle vous vous connectez n’est pas la même que celle inscrite après baseUrl dans le fichier /var/www/Robert2/src/App/Config/settings.json.
Cela peut être au niveau du protocole (HTTPS/HTTP) ou parce que vous vous y connecter depuis l’adresse IP alors que le nom de domaine y est paramétré.