ClubCedille / jardiniot

Système pour des buckets autonomes servant à faire pousser des plantes
GNU General Public License v3.0
13 stars 11 forks source link

Ajout de l'application React et de l'application maintenant dockerised. #78

Closed cguertin14 closed 5 years ago

cguertin14 commented 5 years ago
notarock commented 5 years ago

Je crois avoir résolu les conflits de merge. Je vais tester bientôt pour voir si tout est fonctionnel après la résolution de conflits. En attendant, si quelqu'un peut valider que j'ai rien retirer lors de la résolution de conflits, ça serait :+1: :100: :)

AXDOOMER commented 5 years ago

Nicolas semblait déjà avoir tout corrigé.

AXDOOMER commented 5 years ago

Je pense qu'on devrait delete "frontend-web-v2/public/img/jardiniot_explanations.jpg" parce que je pense pas que ça de quoi à faire là. Ça devrait être dans le wiki à la limite.

AXDOOMER commented 5 years ago

Je l'ai mis ici: https://github.com/ClubCedille/jardiniot/wiki/Structure-de-l'API#api-back-end

AXDOOMER commented 5 years ago

Je peux pas tester. docker-compose.yml demande la version 3.7, ma version de docker supporte juste 3.5.

notarock commented 5 years ago

Pour ma pars, j'ai du changé un peu le network dans le fichier docker-compose.yml pour que les ports soient accessibles sur ma machine. Par contre, le front-end affiche une page blanche sur le port 8080...

@AXDOOMER : As-tu essayé de mettre ta version de docker à jour? :wink:

AXDOOMER commented 5 years ago

@notarock Oui, mais OpenSuse a pas plus à jour.

ax@linux-l7l0:~> docker-compose -version docker-compose version 1.17.0, build unknown

notarock commented 5 years ago
[notarock@t480 ~]$ docker-compose --version
docker-compose version 1.23.2, build unknown
[notarock@t480 ~]$ docker --version
Docker version 18.09.2-ce, build 62479626f2

Je crois que ce script permet d'installer une version plus récente : https://get.docker.com/ . Pour docker-compose, je ne sais pas ou tu pourrais trouver une version plus récente :thinking:

jalilbengoufa commented 5 years ago
[notarock@t480 ~]$ docker-compose --version
docker-compose version 1.23.2, build unknown
[notarock@t480 ~]$ docker --version
Docker version 18.09.2-ce, build 62479626f2

Je crois que ce script permet d'installer une version plus récente : https://get.docker.com/ . Pour docker-compose, je ne sais pas ou tu pourrais trouver une version plus récente thinking

Il y ce script qui fonctionne parfaitement pour installer docker compose https://docs.docker.com/compose/install/

jalilbengoufa commented 5 years ago

En plus, je pense que tu peux le rouler si tu fais juste changer la version dans le docker-compose.ymla 3.5

AXDOOMER commented 5 years ago

@jalilbengoufa Y'a des trucs indéfinis comme le truc pour le réseau. Je pense que ça va le fucker.

berbiche commented 5 years ago

De mémoire, la section sur le networks peut être retirée en-bas et dans les services, cependant je ne me souviens plus quelle fonctionnalité de la version 3.7 du compose file est utilisée. Je verrai demain si je peux descendre la version de docker-compose requise pour le projet.

mikefaille commented 5 years ago

Avec le network host, loption Port ne sert plus a rien. Je ne suis pas sur si EXPOSE est utile dans notre contexte.

berbiche commented 5 years ago

Pour ma [part], j'ai du changé un peu le network dans le fichier docker-compose.yml pour que les ports soient accessibles sur ma machine

Oui, il y a des avantages et des inconvénients à avoir un network privé dans un docker-compose.

le front-end affiche une page blanche sur le port 8080

Le frontend bind au port 4000 sur l'hôte alors je suis surpris que tu aies quoi que ce soit qui s'affiche dans ton fureteur.

berbiche commented 5 years ago

À relire le docker-compose.yml, je me suis souvenu que le network_mode était là pour déboguer quelque chose. Le tout fonctionne, mais ça m'embête alors je vais revoir ça.

notarock commented 5 years ago

J'ai ajouté le network_mode car c'était une façon d'avoir les ports relier à l'hôte facilement. : https://github.com/ClubCedille/jardiniot/pull/78/commits/9a0ac72116e7fc4d81104db0097108483661b63e

mikefaille commented 5 years ago

Generalement (par defaut) on choisir les ports a exposer avec loption Port sans toucher au network. Tu peux exposer tous les ports avec Port.

mikefaille commented 5 years ago

@notarock ce que tu as fait cest legit cest sur. Si tu veux faire un setup compatible k8s (ce qui nest peutetre pas le cas), il faut que tes ip/ports soient dynamiquement configurable par variable denv. En effet, cest plus fancy qu'avoir des ips/ports statiques/locals; ce n'est peut-etre pas ce que tu veux.

berbiche commented 5 years ago

Tout ce qu'il manque à ce point c'est de trouver une alternative pour servir les fichiers statiques permettant aussi de proxy l'API. Alternativement, on peut aussi ajouter des headers de CORS pour permettre les call à l'API au dockerfile du frontend.

Je préfère la première solution car il ne serait plus nécessaire de hardcoder le port de l'API dans le frontend et ça permettrait d'abstraire le fonctionnement et la configuration du backend.

AXDOOMER commented 5 years ago

J'ai pas été capable de le rouler

sudo docker-compose up
/bin/sh: /tmp/_MEI5i6xIB/libreadline.so.7: no version information available (required by /bin/sh)
WARNING: Some networks were defined but are not used by any service: jardiniot
Starting jardiniot-mqtt ... done
Starting jardiniot-api  ... done
Starting jardiniot-web  ... done
Attaching to jardiniot-mqtt, jardiniot-api, jardiniot-web
jardiniot-mqtt | 1555372303: mosquitto version 1.4.15 (build date Sat, 07 Apr 2018 11:13:41 +0100) starting
jardiniot-mqtt | 1555372303: Config loaded from /mqtt/config/mosquitto.conf.
jardiniot-mqtt | 1555372303: Opening websockets listen socket on port 9001.
jardiniot-mqtt | 1555372303: Opening ipv4 listen socket on port 1883.
jardiniot-mqtt | 1555372303: Opening ipv6 listen socket on port 1883.
jardiniot-api | Traceback (most recent call last):
jardiniot-api |   File "/app/mqtt/fakejardin.py", line 50, in <module>
jardiniot-api |     client.connect("mqtt", 1883, 30)
jardiniot-api |   File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 839, in connect
jardiniot-api |     return self.reconnect()
jardiniot-api |   File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 962, in reconnect
jardiniot-api |     sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
jardiniot-api |   File "/usr/local/lib/python3.7/socket.py", line 707, in create_connection
jardiniot-api |     for res in getaddrinfo(host, port, 0, SOCK_STREAM):
jardiniot-api |   File "/usr/local/lib/python3.7/socket.py", line 748, in getaddrinfo
jardiniot-api |     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
jardiniot-api | socket.gaierror: [Errno -3] Temporary failure in name resolution
jardiniot-web | 2019/04/15 23:51:45 Listening at 0.0.0.0:8080 /...
jardiniot-api | Traceback (most recent call last):
jardiniot-api |   File "/app/mqtt/mqttmain.py", line 121, in <module>
jardiniot-api |     main()
jardiniot-api |   File "/app/mqtt/mqttmain.py", line 38, in main
jardiniot-api |     client.connect("mqtt", 1883, 30)
jardiniot-api |   File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 839, in connect
jardiniot-api |     return self.reconnect()
jardiniot-api |   File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 962, in reconnect
jardiniot-api |     sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
jardiniot-api |   File "/usr/local/lib/python3.7/socket.py", line 707, in create_connection
jardiniot-api |     for res in getaddrinfo(host, port, 0, SOCK_STREAM):
jardiniot-api |   File "/usr/local/lib/python3.7/socket.py", line 748, in getaddrinfo
jardiniot-api |     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
jardiniot-api | socket.gaierror: [Errno -3] Temporary failure in name resolution
jardiniot-api exited with code 1
jardiniot-api exited with code 1
jardiniot-api exited with code 1
jardiniot-api exited with code 1
jardiniot-api exited with code 1
^CGracefully stopping... (press Ctrl+C again to force)
Stopping jardiniot-web  ... done
Stopping jardiniot-api  ... done
Stopping jardiniot-mqtt ... done

docker --version Docker version 18.09.3, build 774a1f4eee66

docker-compose --version docker-compose version 1.24.0, build 0aa59064

jalilbengoufa commented 5 years ago

Est-ce que tout etait bien connecte quand tu as tester ? @AXDOOMER

AXDOOMER commented 5 years ago

Pas besoin de connecter de quoi. Normalement, il démarre mosquitto à l'intérieur du conteur et mosquitto est connexion less, donc il dépend pas d'une connexion pour pouvoir fonctionner correctement.

AXDOOMER commented 5 years ago

Ça marche, le site web est accessible sur http://127.0.0.1:8080/

berbiche commented 5 years ago

@AXDOOMER Qu'est-ce qu'il manque à ce point?

AXDOOMER commented 5 years ago

Restaurer APIv1 dedans car c'est pas supposé être enlevé par ce pull request. Faut aussi documenter comment lancer ça et par défaut sur quel port c'est accessible pour pas que le monde qui connaissent pas trop docker cherchent trop.

Genre: roule telle commande docker comme ça après avoir parti le service comme ça (sur la plus part des ordis, le service roule pas par défaut), et après tu peux y accéder à 127.#.#.#:1234.

berbiche commented 5 years ago

En rédigeant la documentation, j'ai remarqué qu'il n'y avait pas de moyen de rouler le site Web en "production" en dehors de Docker Compose.

Par conséquent, je vais ajouter un serveur Express minimal pour servir le build du frontend et forwarder les requêtes à l'API (ce qui règle aussi le problème du port d'API hardcodé dans le frontend).

AXDOOMER commented 5 years ago

Je comprends pas pourquoi ça jamais marché pour Nicolas et moi.

mikefaille commented 5 years ago

@AXDOOMER Je pourrais me liberer et voir ce qu'on peut faire.

mikefaille commented 5 years ago

Je comprends pas pourquoi ça jamais marché pour Nicolas et moi.

Peut-être que vous n'êtes pas fait l'un pour l'autre?

AXDOOMER commented 5 years ago

Je test ça live avec Roch

AXDOOMER commented 5 years ago

Ça marche. Testé sur Xubuntu.

Comment reproduire:

sudo apt install docker
Installer docker-compose: https://docs.docker.com/compose/install/
clone le projet
aller dans sa racine
faire: sudo docker-compose up (le service doit avoir été démarré (sudo systemctl start docker)
Attendre longtemps pour les downloads au premier déploiement (3 minutes environ)
Accéder au site avec :  localhost:8080/
notarock commented 5 years ago

🎉🎉🎉