Serveur Lamp sur Rasberry Pi | Capacités

Bonjour à tous,

Je souhaite développer une application de suivi des ventes minimalistes en serveur local Lamp. Je me demande si un Rasberry Pi peut répondre à cette application. Le site sera développé en PHP (variable, formulaire) avec une base de donnée MySQL.

Pensez-vous que le matériel pourra supporter plusieurs utilisateurs simultanés en optimisant les requêtes SQL ? La base client sera composée de 1k à 5k lignes et le catalogue sera restreint à une petite centaine de références.

J’aime beaucoup de Pi Zero pour sa taille, que je pourrais connecter juste à côté du modem de mon client (TPE-PME). Il est tout à fait imaginable que je propose plusieurs « formules », donc par exemple le Pi Zero si mon client n’a qu’un ou deux postes, et un Rasberry Pi 3/4 pour d’autres configurations.

Merci de votre patience et de vos retours !

Oublie immédiatement l’idée du RPi Zero v1, il est mono CPU, très limité en ressources et très lent. Moi aussi j’aime le FormFactor et j’en ai commandé plusieurs, mais je regrette car vraiment 'est limité, c’est comme rouler avec un Pentium 133MHz.

Pour un usage Web optimal il faut un environnement avec;

  • Charge CPU équilibré
  • Mémoire vive disponible
  • Accès au disque dur rapide

Si tu veux rouler un site Web Apache + PHP + SQL’ il faudra de 512Mo à 1Go de mémoire vive au MINIMUM. Vu que les données sont surtout en SQL, il faudra lui donner une bonne quantité de mémoire, encore la le minimum serait 256Mo, mais je conseil le 512Mo voir 1Go, selon la grosseur de ta base de donnée.

Je connais pas mal cette partie, je gère des serveurs depuis une dizaine d’année, des VPS comme des Dédiés. J’ai conçu un projet qui avait une base de donnée cloné de Steam, j’avais alors pas mal d’entrées dans la Database, je faisait aussi pas mal de syncro en background sans compter l’usage de mon site avec pas mal d’appels (api, client, etc…) Et le minimum que j’ai réussi a tourner sans trop de « lag » était avec un dual CPU et 1Go, mais c’est vraiment limite, le latency (causé par la génération PHP et requête SQL) de génération de page a passé de 0.75s a 1.5s (double), avec 2Go de ram, je retrouvais une valeur en dessous du 1s (passé de 512Mo SQL à 1Go SQL dédié).

J’utilise Virtualmin pour gérer mes services et serveur, offre tout les outils requis pour une gestion Web optimal (et gratuit) ainsi qu’une gestion du serveur (le RPi dans ton cas) sans devoir passer via le SSH et avoir des connaissances trop poussés (j’ai c’est connaissances, mais pourquoi se casser la tête si un système install tout pour toi en plus d’offrir une gestion ?). Si tu passe avec Virtualmin, tu pourras créer des certificat SSL avec Let’s Encrypt en quelques cliques.

Bref, pense à un RPi 3 ou 4, avec 1Go minimum, 2Go et + conseillé. Les RPi 3/4 sont multi-coeurs.
Vu que tu utilise une carte SD pour économiser de l’espace et éviter des bugs de démarrage possible. Il faudra penser à remplacer la carte SD (et avoir un Backup) assez souvent, pour éviter des troubles vu leur limitation de R/W, privilégie les cartes SanDisk de qualité. Tu peux faire une backup intégrale de la carte SD par exemple une fois semaine, (quand tu balance tes comptes par exemple) pour avoir toujours sous la main une version la plus actuel possible, un Backup de base de donnée externe aussi par exemple la nuit, pour avoir une sauvegarde encore plus a jour.

Tu es dans un contexte d’entreprise, malgré que les RPi sont solide et fiable, il peu arriver des problème, faudra t’assurer que tu puisse avoir une solution de secours en cas de bris logiciel. De la l’importance de ta sauvegarde. Si tu est en mesure d’avoir un clone (RPi+SD) à l’identique, tu pourrais alors avoir la solution parfaite en cas de bris. (déconnecte le RPi en problème, connecte le second et continue ta business)

Pense aussi a une méthode pour fermer le RPi proprement (Virtualmin peu t’offrir une option pour ça). SI le RPi ferme d’une mauvaise manière, tu peux rendre ta base SQL inutilisable. Et j’ai déjà eu ce problème, pour simplifier, il garde des données en cache sur le disque (SD), si le cache es corrompu, il peut arriver que le serveur SQL ne puisse plus démarrer. Il existe des moyens de régler ça, mais c’est pas mal de lignes de commandes, et peut causer des pertes de données. Une fermeture propre (sudo poweroff) permet alors aux services de fermer proprement, et aisni éviter des troubles au redémarrage.

Merci de ta réponse, très complète !

Je me doutais bien qu’un Pi Zéro n’était pas viable, je me dirige plus vers un Pi4 en 4Go/8Go (mais on ne sait jamais). Pour le stockage, je compte placer le /home dans un HDD en Sata (avec une carte d’extension) et le lamp dans une partie du /home, pour améliorer les conditions de R/W. Je compte monter un Raid pour la sauvegarde des données ainsi qu’une seconde sauvegarde sur un serveur FTP moins fréquente.

Pour les postes de travail, j’aurais des Rasberry Pi sous Linux connectés au serveur local. Je cherche des solutions pour que le poids d’un produit puisse être récupéré depuis une balance connectée en USB, est-ce qu’il existe une solution dans cette configuration, pour récupérer la valeur de la balance dans une page web ?
Il y a par exemple caisse.enregistreuse.fr qui a cette fonction dans une page web, c’est donc possible mais je ne trouve pas comment cela fonctionne.

Merci :pray:

en théorie oui !

une page web pourrait lancer une requête XMLHttpRequest a un programme qui irait interroger la balance via une liaison USB;
une fois que ce programme aurait récupérer le poids, il enverait la réponse a la page web et la réponse s’afficherait !

en pratique ça se complique !
-trouver une balance qui sort le poids via usb
-avoir suffisamment de doc sur le format en sortie (type de communication, format de la transmission) pour que le programme appelé par la requête puisse lire le poids
-et on parlera pas des contraintes légales d’homologation ( si c’est pour de la vente )

source:

Comme @bof à dit, il a les solutions par le JavaScript et peut-être des extension système pour aider à ce faire, mais dépend du produit et des restrictions imposer par le système et le navigateur.

De plus, le Javascript à des limitations d’autorisations pour accéder au système hôte. La solution serait d’utiliser une extension de navigateur qui permet d’avoir plus de liberté, mais encore la, tu va avoir surement des problèmes pour communiquer avec la balance.

Si le fabriquant offre des outils pour l’exécution de la balance dans certains environnement, tu peux voir alors tes solutions. Si les balances ne sont pas encore acheté, alors magasine bien leur capacités à ce niveau.

Tu peux être chanceux et tomber sur un modèle populaire avec des libs officiels comme open source qui pourrons et permettre de communiquer de manière plus libre. Si tu peux, cherche des librairie pour ce genre de produit pour voir ce qui en ressort comme modèle, et ainsi aligner ton choix.

Attention à la compatibilité Linux. Tu as souvent des WinDevice avec le USB. Dans l’expédition, les logiciels sont souvent sous Windows. Alors vérifie bien le support Linux et le support pour le ARM. Le pilote peut être capricieux.


Si tu as accès au matériel et à l’information de lecture, moi je te suggère de te faire un moyen simple de l’inscrire avec un programme qui marchera en arrière plan, comme un service. Ce service serait configuré sur une touche ou un bouton (si tu utilise des RPi et le GPIO) pour lancer une mise en mémoire (clipboard, comme avec Copier, CTRL+C) et un collage (coller, CTRL+V).

Ceci n’est qu’un exemple de l’idée, mais le programme pourrais émuler lui-même les touche à entrer pour inscrire les numéro, comme un scanneur de code à barre physique fait.

Avec cette solution, tu peux alors l’utiliser n’importe où, par exemple, si plusieurs interfaces sont possibles (dans les transactions), et de faciliter l’utilisation. L’utilisateur n’a qu’à sélectionner la cellule ou il doit l’inscrire et appuyer sur un bouton.

En plus, si tu as divers modèles de balances compatibles mais avec des différences de lecture, tu peux ajuster le programme en conséquence. Ça évite aussi de rendre le site de transaction non fonctionnel si une erreur de code apparait, surtout si tu dois altérer tes pages du service, sans utiliser d’injecteur de javascript.

Et dernier avantage, si tu développe ce genre d’application, tu peux tester sur un seul poste et l’intégrer par la suite aux autres si c’est concluant. Tu peux par exemple pré-configurer des commandes de reset, changer le port d’écoute (multiple balance ou si d’un poste à l’autre le port USB change de nom)


En extra…
Si ton système de transaction à un API, tu pourrais également programmer une interface optimisé en Python. Un affichage par un script Python est beaucoup plus léger que d’utiliser un navigateur Web. À la limite, sauf si tu exploite à gros débit, tu pourrais avoir des caisses avec des RPi Zero. De mon expérience, les navigateurs Web sur RPi, ce n’est pas « top », surtout Chrome(ium). Alors ce serait une option à envisager, car tu pourras faire ton intégration de balance et même plus.

Et bien pour ce qui est de la balance, il y a balance.lu qui donne des détails pour les balances Ohaux fonctionnant en Ethernet.

La balance fonctionne comme un serveur TCP. Pour la transmission des données, l’ordinateur (client TCP) se connecte au port 9761 de la balance.

Le site annonce même une solution pour les sites web.

Transférer le poids d’un colis dans un champ de saisie d’un site Web

Elle n’est disponible que dans sa version allemande Waagen.lu (lien Google Traduction), ils utilisent visiblement un logiciel Windows 232key.

Je souhaite éditer le tout dans un navigateur grâce à la versatilités de la solution (hors problème de connexion avec le matériel). Le site serait accessible avec tous les types d’appareils (ordinateur, tablette, smartphone), quelque soit le système.

Il y aussi la simplicité, tout le monde sait maintenant visiter un site web et il sera peut-être plus simple d’avoir une interface graphique plus sympathique, plus humaine, plus « ubuntu ».

J’imagine que la config de ton projet est un serveur principal, qui offre le site de transaction. Après tu as des terminaux pour faire les transacions.

Dans une configuration idéal, tu as une balance par poste. Sinon tu peux avoir une balance partagé sur deux poste. Dans le pire des cas, tu as une balance pour tout les postes.

Si tu as une seul balance pour tout les postes, alors l’intégration est facile, vu que tu pourrais le faire sur le serveur de transaction. Mais je vois mal comment bien exploiter plusieurs postes sans causer des ajout de poids dans des transactions non concernés.

Alors arrive les deux autres solutions. Soit un partage double, ou usage unique.

Alors, ici faut voir comment tu va implanter l’ajout du poids. Je vois trois solutions;

  1. Inclure le choix de la balance réseau sur le formulaire de transaction (ou paramètre de session, si il y en as une) et ainsi gérer des imprimantes réseau. Cette méthode demande d’avoir des balances réseaux, comme dans ton pose précédent, et de modifier le site de transaction pour prendre en charge. Le problème que je vois également est la mauvaise sélection de la balance, si le paramètre n’est pas pré-défini pour le terminal, par une session par exemple. Faudra également associer des IP statiques aux balances. C’est le seul moyen pouvant être géré par le serveur, car des connections USB au serveur serait illogique.

  2. Si l’option est d’ajouter un moyen au navigateur de fournir l’information, alors il y a par USB et réseau qui est possible. En utilisant une extension comme Tampermonkey, sous Chrome/Firefox, tu peux arriver à communiquer sur un serveur et ainsi fournir l’informations. Via le USB, il peut être plus difficile, soit créer un service local pour fournir l’information en service Web (mini serveur HTTP). Il ne faudra pas utiliser de HTTPS (SSL) sinon tu va avoir des problèmes de sécurités, car les appareils local/réseau local, ne peuvent pas avoir de SSL (sauf avec des méthode assez complexe). Cette méthode permet par capture de la page de trouver le champs désiré e de coller l’information. Voir d’ajouter une bouton à côté de celui là pour le faire sur demande.

  3. La dernière options est de créer un service/app qui permet de le faire par raccourcis clavier ou un bouton spécial sur le GPIO si tu utilises des RPi. C’est comme avec l’option 2, mais dans une app, cette option est a considérer si la balance est en USB et n’offre pas de service Web, bref, un peux comme un sensor. Je crois j’ai expliqué mon idée dans un message précédent.

Alors avec ça tu a une vision des possibilités selon ce que tu as besoin et des capacité technique qui me semble possible. À toi de voir ce qui te semble le mieux.


Moi j’opterais pour des balances USB avec une standardisation des terminaux. Par exemple même écran, un RPi en mode Kiosk et une balance identique sur chaque poste. Comme ça une config que tu peux répliquer.

Qui soit avec ou sans interface Web, je me créerais un service dans une application Python. Je m’ajouterais un bouton simple pour faire l’ajout de l’information (comme expliquer avant). Pour éviter les erreurs, je pourrais le lier avec le code Javascript (option 2 offert ici), pour améliorer la position de l’information sans erreur.

Le script dans le navigateur perme de trouver le champs et d’y placer un bouton. Quand le bouton est pressé, il « focus » le curseur dans le champs du poids à insérer, et fait la tâche pour récupérer l’info (via le moyen expliqué dans mon post précédent, ou via une réponse Web de l’app interne créé). En passant par une application interne, dans ma vision, limite le besoin d’ajuster les configurations, vu que tout est unique au poste, et que chaque poste est identique, et que chaque poste est dans sont « écosystème » fermé (mis à par le lien réseau que pour le site de transacion).

Si tu utilise un service Externe, des manipulation pour la configuration sont nécessaires, mais pas dans mon idée ici présente, sauf erreur de ma part.

C’est sûrement farfelue, mais est-ce qu’il ne serait plus « simple » de penser complètement une balance sous Pi Zéro W pour que le logiciel envoie les informations comme je le souhaite, dans le format souhaité, etc. ?

  • La balance est connectée au réseau local et obtient un numéro interne qu’elle pourrait afficher via un petit écran;
  • La balance envoie à chaque changement le poids au serveur principal, qui la met dans une variable, une base de données…;
  • Au démarrage du point de vente, l’utilisateur sélectionne la balance;
  • En cliquant sur un bouton, la valeur de la balance est récupérée en AJAX/PHP et l’inscrit dans un input;

J’imagine qu’une fois développée, on pourrait l’étendre pour y connecter un lecteur à code barre… .

Au départ, elle ne sera pas normées, cette solution ne sera destinée qu’à un usage superflu.

Hors considérations légales, est-ce réaliste ?

:smiley:

Ça tu en prend que un par appareil, un lecteur de code barre est comme un « clavier » et entrera les information lu ou le lecteur est.

C’est sur que si tu peux coder l’interface de transaction, tu peux inclure toutes les config réseau. mais si tu songe a inclure des utilisateurs (caissier/ère), je te déconseille, par expérience, tu auras beau expliquer quoi faire, tu aura toujours un commis qui va sélectionner la mauvaise balance, etc…

J’ai travaillé dans un centre de distribution, et dès que tu demande a un employer plus que user/pass (qui es pas mal exigent pour certain, déjà) tu risque d’avoir des problème, de plus, centraliser les balance, quoi que intéressant, te causera un problème si tu dois travailler sur le serveur, par exemple si tu dois rebooter, tout les poste sont impacter.

En milieu de production, tu devrais penser à rendre plutot les postes indépendant et éviter de « trop » modifier le serveur de transaction. Sinon oui, c’est possible.

Dans le centre de distribution, ont utilisai un système en ligne de colis. Ce service, Shippo, permet par exemple de choisir l’imprimante pour sortir l’étiquette. Le problème qu’ont as eu est que le monde, même si ont identifiant physiquement les imprimante, les numéros de postes et ce, à l’identique dans le logiciel Web, et avec une formation et un guide dispo a côté du poste choisissait impérativement toujours la mauvaise imprimante, et la réponse qu’ont nous donnais (bah, j’pend le premier dans la liste). AU final, il a fallu retirer cette application de parage d’imprimante, de faire un compte séparé pour chaque poste pouvant faire ce travail, et de préconfigurer les comptes pour l’usage d’imprimante, car ont avait trop d’erreurs. Depuis tout marche.

Même chose avec une balance qu’ont avait, une seul en USB mis en partage sous un PC, qui devais utiliser Fed Ex et laisser les autres l’utiliser sur demande. Bref, Les applis n’aimait pas le partage, trouvant trop « long » la demande (réseau 10Gbps, connecté en 1Gbps et c’est trop lent…). Même une balance connecté directement sur le poste causait des problèmes. Et la ont était sous Windows, ce qui devrait être plus simple, avec du matériel dédié pour un centre de distribution. Il était plus simple d’expliquer aux personnes de prendre la mesure e indiquer ou l’insérer que de tenter d’automatiser le tout, car le monde, aime quand même être en contrôle des informations.

Cependant, tu pourrait faire un « overlay » indiquant le poid de la/des balances pour permettre au préposer de l’inscrire manuellement.

Bref, il y a plus d’un chemin pour aller à Rome, à toi de trouver celui que tu sera le plus simple, pratique et fiable à installer.


En théorie, tout les postes peuvent être géré par des RPi, alors ton projet est totalement réalisable en RPi. Reste plus qu’a explorer, selon tes compétences, les possibilité et la meilleur méthode pour arriver au but recherché.