[TUTO] Application web dynamique

Proposer ou rechercher un tutoriel concernant le Raspberry Pi

Modérateur : Francois

Répondre
guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Message par guillaume9344 » ven. 30 déc. 2016 20:19

Ca y est , le petit serveur tourne rond , fait bien se qu'on lui demande , répond rapidement. Passé les premiers temps de l’expérimentation et des redémarrages toutes les 3 minutes pour voir si les changements sont bien pris en compte, viens le temps de laisser tourner le serveur 24/24 , d'avoir un démarrage automatique en cas de reboot du pi ,de vérifier l’empreinte cpu et ram enfin de passer d'un petit code pour apprendre à un truc qui tourne bien tous le temps , avec des logs, un vrais programme en fait.
avez vous quelques pistes à nous soumettre ?
Par exemple, j'ai des crashs en lançant node avec rc.local , j'ai des augmentation de ram au fur et a mesure .........
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » sam. 31 déc. 2016 11:51

Il existe une multitude d'outils pour daemoniser et superviser du nodejs (ou autres chose ...), mais ma préférence va vers pm2 (https://github.com/Unitech/pm2).

Exemple simple :
installation de pm2 : $ sudo install pm2 -g
demarrage d'un .js avec pm 2 (depuis le dir du .js, sinon ajouter le chemin) : $ pm2 start monweb.js -n "monweb"

a partir de la tu peux tester les commandes suivante pour voir ce que ca donne :
$ pm2 list // affiche list des process pm2
$ pm2 show monweb ou pm2 show idduprocess // affiche le status du process (tu trouves idduproces avec la commande list précédente)
$ pm2 log monweb //affiche les log du process
$ pm2 monit //affiche les ressources utilisé par les process

la listes des commandes pm2 est dispo avec la simple commande $ pm2

pour daemoniser, c'est très simple. Tu lances tes différents process avec la commande $ pm2 start ...
Ensuite tu sauvegardes la lists des process avec la commande $ sudo pm2 save
puis tu inscrit pm2 pour démarrage auto avec la commande (exemple) :
$ sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u pi --hp /home/pi

Perso, je n'ais pas de soucis de mémoire ou quoi que ce soit avec nodejs. J'ai une grosse appli qui gère une domotique très complexe ( > 400 points de terminaisons sur différents type de bus terrain) dans une entreprise et qui tourne depuis plus 6 mois h24 (sous une vm Windows, mais c'est pareil) et je ne m'en occupe jamais, ca fait le boulot. Avec un pi, j'ai aussi une appli perso qui est sur un site distant (maison de campage) qui me sert à gérer en automatique le 'hors gel', qui s'occupe de la mise à jour d'une ip dynamique sur un nom de domaine (dynhost ovh) et qui me permet de démarrer et arrêter à distance différents appareils, et même chose, ca tourne depuis des mois sans soucis.

Un petit conseil à 2 balles : Les versions nodejs et npm des dépôts raspbian fonctionnent bien, mais sont un peut ancienne. Si vraiment tu veux aller plus loin avec ces technologies, installes des versions plus récentes.

ps : pour pm2, c'est du tuto à l'arrache de tête et sans test, mais on doit pas être loin du compte.

Je viens de m'apercevoir que c'est mon 100 eme message. Me voila donc Raspinaute :)
100.jpg
100.jpg (24.99 Kio) Vu 8121 fois
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Message par guillaume9344 » sam. 31 déc. 2016 12:31

Merci , j'ai déjà vu pm2 et il faut que j'explore encore un peu plus.
Pour le démarrage au boot , j'avais rajouté le lancement d'un .js dans le fichier rc.local mais bizarrement au bout de 2h environ, j'ai un message d’erreur et une fermeture du process , le message d'erreur fait référence à la lecture impossible du fichier /cpuinfo je pense généré par wiringpi . mais je n'est pas ce comportement quand je lance le programme manuellement , je vais tester avec pm2 , il y a peut etre un problème d’environnement ou autre ......je vais également supprimer les messages consoles pour les diriger ver un fichier.

pour info mon programme utilise wiringpi , ds18b20, dht22, et fs, il est basé sur la leçon 6 et le tout tourne sur une orangepi pc+ sous armbian (donc quelque diff avec un raspberry).
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » sam. 31 déc. 2016 20:03

pour wiringpi, je n'ais pas beaucoup de retour du fait que je ne l'utilise pas (Pour les GPIO, j'avais développé mon propre wrapper pour la lib bcm2835 (http://www.airspayce.com/mikem/bcm2835/)), donc je ne peux pas t'aider. Je l'avais mis juste pour le tuto histoire de satisfaire un max de personne vu que c'est très populaire. Essais quand même pm2 à l'occase. Il se charge lui même de stocker les sorties console en log et perso, sur le PI, je n'ais jamais eus de soucis.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » dim. 15 janv. 2017 11:54

Hé bhé, ca faisait longtemps que je n’étais pas venu :?

La petite astuce du jour histoire de dire que l’on fait un pas de plus. Vous avez fait votre site avec NodeJS en vous inspirant des leçons précédentes mais vous voulez le protéger pour éviter que n’importe qui puisse y accéder.

Ajouter donc le package basic-auth-connect à votre projet :
npm install basic-auth-connect

Charger le package dans les varibales du début de votre programme :
var basicAuth = require (‘basic-auth-connect');

Puis ajouter cette ligne dans l’initialisation de app.
app.use(basicAuth(‘monusername’,’monpassowrd’)) ;

Voilà c’est tout. Quand vous vous connectez à votre site, il vous est demandé le nom d’utilisateur et le mot de passe :D



Si vous ne voulez pas mettre le username et le password en dur dans le code, vous pouvez le mettre dans un fichier JSon externe.

Ajoutez un petit fichier auth.json à la racine du projet

Code : Tout sélectionner

{
	"user": "monusername",
	"password": "monpassword"
}
Si vous ne l’utilisez pas déjà, ajoutez la variable fs pour lire les fichiers :
var fs = require(‘fs’) ;

chargez votre fichier json dans une varibale auth
var auth = JSON.parse(fs.readFileSync(‘auth.json’)) ;

et initialisez app avec la ligne suivante :
app.use(basicAuth(auth.user,auth.password) ;

voila ce que ca donne en image :
authjs.png
authjs.png (23.01 Kio) Vu 8062 fois
Voila, c’est tout pour aujourd'hui :)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

drean
Messages : 20
Enregistré le : lun. 1 févr. 2016 19:17

Re: [TUTO] Application web dynamique

Message par drean » lun. 20 févr. 2017 13:46

bonjour
c'est le tuto qu'il me faut, merci
j'ai un pb avec la leçon 6
avec les fichiers joints à la leçon, j'ai l'affichage incomplet, il manque toute la partie qui concerne les commandes gpio ( lampes moteurs .....)
de plus j'ai contrôlé sur la framboise les ports gpio qui ont été activés suite au lancement de myweb, seul les ports IN ont été activés.

j'ai cherché à comprendre pourquoi mais je sèche, j'aurais besoin d'un petit ( grand ) coup de pouce.

merci d'avance

André

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » lun. 20 févr. 2017 20:50

J'ai joué au Noobs pour voir. J'ai donc recréer une arborescence type conforme au tuto, téléchargé et recopié les fichier de la leçon 6 dans les bons dir, installé les packages requis avec npm et j'ai démarré le serveur sans soucis ni erreur de compil. Par contre, quand je me suis connecté avec mon browser, j'ai effectivement constaté le même problème que toi. Je me suis dit : je vais laisser un message a ce vieux Bud Spencer pour voir ce qu'il en pense ... Pas de bol, le message m'est revenu (forcement :mrgreen: ), donc j'ai du me débrouiller tout seul :lol:

Vu que le serveur compil sans alerte, regardons si il y en a coté client. Pour ca, il suffit de lancer le débogueur du browser (Perso MS Edge, donc touche F12) et voila ce qu'il dit :
debug.png
debug.png (118.63 Kio) Vu 7939 fois
Le message est clair, le client ne trouve pas la ressource sockeitio/sokeit.io.js. Donc forcement, impossible de se connecter avec un truc qui n'existe pas

Retournons dans le code serveur et voyons ou devrait se trouver cette ressource. C'est a la ligne :
app.use('/socketio',express.static(__dirname + '/node_modules/socket.io/node_modules/socket.io-client/'));

Si je regarde dans mes fichiers, effectivement ..../myweb/node_modules/socket.io/node_modules/socket.io-client/socket.io.js n'existe pas (plus)

Par contre je vois qu'il y a un sous répertoire '/dist' (ce qui signifie généralement distribution). Je regarde dedans et bingo, il y a bien le fichier sockeit.io.js à l'intérieur

En fait la version de sockeit.io est plus récente que celle de la leçon et le package à été modifié (sans doute pour em****er tout le monde, mais ca fait partie des joies de l'open source :lol: ). Il suffit donc juste de modifier le chemin du fichier dans le virtuel '/sockeitio en ajoutant le sous répertoire /dist/ et tout rentre normalement dans l'ordre.

app.use('/socketio',express.static(__dirname + '/node_modules/socket.io/node_modules/socket.io-client/dist/'));
debug2.png
debug2.png (112.32 Kio) Vu 7939 fois
@ALL : Apprenez à vous servir du débogueur de votre navigateur. C'est un outil puissant et indispensable pour développer du web ! ;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Message par guillaume9344 » lun. 20 févr. 2017 22:54

Ha ! Celle là je l'avais trouvé, mais je pensais que c'était du à une erreur de ma part....
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Message par Bud Spencer » mar. 21 févr. 2017 21:16

Arf ...! on a dépassé les 4000 vues, va falloir que j'ajoute une leçon :| :lol:
Bon ... Je réfléchi a trouver un truc bien tordu et je revient :mrgreen:
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Message par guillaume9344 » mar. 21 févr. 2017 21:55

quelques idées : bases de données , i2c , spi , 1wire, inclusion flux video (pour motion par ex), monitoring, écriture de lib (en c ;) ).....
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Répondre

Retourner vers « Tutoriels »