Forum Linux.général Aide configuration réseau Nginx + Turtl : serveur de notes

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
28
juin
2017

Bonjour à tous,

Frien de nouveaux projets et de serveurs en ce moment, je tente de configurer le serveur de notes Turtl qui à l'avantage d'avoir un client installable sur n'importe quelle platforme.

Ainsi, pour l'installation sur raspberry-pi2 d'OS raspbian jessie lite, je me suis servit de ces deux liens :

https://framacloud.org/cultiver-son-jardin/installation-de-turtl/
internaute blog : http://brianekummer.blogspot.fr

J'ai suivi tout ce qui a été préconisé et j'aimerais avoir un petit coup de main sur la configuration reseau de Nginx, Turtl et éventuellement Rethinkdb.

De ce que je lis, le serveur turtl n'est pas directement sur le réseau et passe par Nginx hors je ne comprends pas comment faire les interactions Nginx <=> Turtl. J'ai déjà fait du serveur web apache mais la le projet est différent.

Rethinkdb : pour moi cette base de données ne possède pas de configuration réseau (à moins que concernant la notion de clusters, … ). Elle serait accessible depuis localhost:8080.

Turtl :

dans /var/www/turtl/api/config, j'ai essentiellement dans le fichier config.lisp

    *server-bind* 127.0.0.1        -> changer par l'adresse 192.168.1.40 de ma raspberry-pi en local
      serverport 8181

    *db-port* 28015

    local upload /var/www/turtl/data
    local upload url https://api.notes.example.org

Nginx :

j'ai essentiellement dans le fichier .conf

#A priori du load balancing = partage des taches sur différents serveur sauf sue nb_serveur = 1 ici
upstream turtl {
    server 127.0.0.1:8181;       -> changer par l'adresse  192.168.1.40:768 ? de ma raspberry, port 768                                                               au hasard
}

server {
    listen 80 ;
    listen [::]:80 ;
    listen 443 ;
    listen [::]:443 ;

    server_name api.notes.example.org ;

    resolver 192.168.1.1 ;

    index index.html ;

    location / {
        proxy_set_header    Host $host ;
        proxy_pass http://turtl ;
    }
}

Merci par avance.

Bonne journée.

  • # config reseau

    Posté par  . Évalué à 1.

    J'oubliais de préciser ma config reseau :

    1 sous-domaine (serveur.domaine.fr) associé à mon adresse IP public de box

    1 raspberry-pi associé à la box par 192.168.1.40

    • [^] # Re: config reseau

      Posté par  (site web personnel) . Évalué à 2.

      Et où est ton Nginx ? S'il est sur le rpi, pas besoin de changer le port d'écoute dans la conf turtl ni de bidouiller le upstream de Nginx.

      Si Nginx est sur une autre machine, effectivement, il faut que ton rpi écoute sur une IP locale (donc, oui à la modif de conf Turtl), par contre :

      changer par l'adresse 192.168.1.40:768 ? de ma raspberry, port 768

      Bah non, faut mettre l'adresse d'écoute de Turtl, donc 192.168.1.40:8181 (l'adresse était bonne mais je ne sais pas où tu es allé chercher le port 768).

      RethinkDB étant normalement sur la même machine que le serveur Turtl, tu n'as pas à y toucher.

      Fais attention : ton nginx écoute sur le port 443 mais je ne vois pas de configuration relative à HTTPS. Pour l'instant, fais-le juste écouter sur le port 80, et change le local upload url https://api.notes.example.org dans la conf Turtl pour local upload url http://api.notes.example.org. Vérifie déjà que ça fonctionne et ensuite seulement mets du HTTPS (et faudra donc rechanger la conf Turtl).

      Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

      • [^] # Re: config reseau

        Posté par  . Évalué à 1.

        Et où est ton Nginx ? S'il est sur le rpi, pas besoin de changer le port d'écoute dans la conf turtl ni de bidouiller le upstream de Nginx.

        Oui Nginx, Turtl et Rethinkdb sont sur la raspberry-pi2. Il y a t-il besoin de RAM supplémentaire pour rethinkdb ? Quand j'ai compilé il y avait besoin de 1G de RAM supplémentaire.

        Bah non, faut mettre l'adresse d'écoute de Turtl, donc 192.168.1.40:8181 (l'adresse était bonne mais je ne sais pas où tu es allé chercher le port 768).

        J'ai changé le port car Nginx me disait que le port 8181 n'était pas correct.

        ton nginx écoute sur le port 443 mais je ne vois pas de configuration relative à HTTPS

        Oui je n'ai pas copier/coller tout le fichier de conf.

        Pour l'instant, fais-le juste écouter sur le port 80, et change le local upload url https://api.notes.example.org dans la conf Turtl pour local upload url http://api.notes.example.org. Vérifie déjà que ça fonctionne et ensuite seulement mets du HTTPS (et faudra donc rechanger la conf Turtl).

        Je test ça dès que j'ai un peu de temps et je reviens vers toi, merci.

        • [^] # Re: config reseau

          Posté par  (site web personnel) . Évalué à 2.

          Il y a t-il besoin de RAM supplémentaire pour rethinkdb ?

          Aucune idée, je n'ai pas essayé sur un rpi.

          J'ai changé le port car Nginx me disait que le port 8181 n'était pas correct.

          Si tout est sur le même rpi, laisse 127.0.0.1 dans nginx et dans Turtl. Vérifie que Turtl tourne bien avant de tester Nginx.

          Pour voir ce qui écoute sur le port 8181 : lsof -i :8181. Turtl apparaîtra sans doute sous le nom ccl. Si rien n'écoute sur le 8181, c'est que Turtl ne s'est pas lancé, il faut voir pourquoi. Si ce n'est pas Turtl qui écoute sur 8181, trouve un autre port libre et utilise-le dans Nginx et Turtl.

          Oui je n'ai pas copier/coller tout le fichier de conf.

          Ok d'ac, je me doutais d'un truc comme ça.

          Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

          • [^] # Re: config reseau

            Posté par  . Évalué à 1.

            J'ai mis pour le fichier de config de Nginx et de turtl :
            IP 192.168.1.40
            port 8181

            Sur le client turtl l'adresse à rentrer est :
            http://serveur.domaine.fr:8181

            et la sortie de lsof -i :8181

                root@raspberrypi:/home/pi# nano /var/www/turtl/api/config/config.lisproot@raspberrypi:/home/pi# lsof -i :8181
                COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
                armcl   2518 www-data   12u  IPv4  41183      0t0  TCP raspberrypi:8181 (LISTEN)
                armcl   2518 www-data   13u  IPv4  91516      0t0  TCP raspberrypi:8181->box:52897 (ESTABLISHED)
                armcl   2518 www-data   14u  IPv4  91495      0t0  TCP raspberrypi:8181->android-1b4a158d033cd8e6:43183 (ESTABLISHED)
                armcl   2518 www-data   15u  IPv4  88563      0t0  TCP raspberrypi:8181->jopcportable:36121 (ESTABLISHED)
                armcl   2518 www-data   16u  IPv4  91585      0t0  TCP raspberrypi:8181->box:39328 (ESTABLISHED)
                armcl   2518 www-data   18u  IPv4  91576      0t0  TCP raspberrypi:8181->box:52903 (ESTABLISHED)
            

            J'ai essayé de remplacer l'IP 192.168.1.60 par 127.0.0.1 mais sans succès. D'ailleurs un internaute avait précisé qu'il a du remplacer l'IP 127.0.0.1 par l'adresse IP de la raspi.

            Mais voila après je ne sais pas comment se dresse le projet, si Nginx se situe en haut ou non, …

            Voici le fichier /etc/nginx/sites-enabled/api.notes.example.org.conf :
            ```

            upstream turtl {
                server 127.0.0.1:8181 ;
            }
            
            client_max_body_size 2m ;
            
            server {
                listen 80 ;
                listen [::]:80 ;
                #listen 443 ;
                #listen [::]:443 ;
            
                server_name api.notes.example.org ;
            
                access_log  /var/log/nginx/notes.example.org-ssl.access.log ;
                error_log   /var/log/nginx/notes.example.org-ssl.error.log ;
            
                #if ($scheme = http) {
                #    return 301 https://$server_name$request_uri ;
                #}
            
                #ssl                 on ;
                #
                #ssl_certificate     /etc/ssl/private/api.notes.example.org/fullchain.pem ;
                #ssl_certificate_key /etc/ssl/private/api.notes.example.org/privkey.pem ;
                #
                #ssl_ecdh_curve secp384r1 ;
                #ssl_prefer_server_ciphers   on ;
                #ssl_protocols               TLSv1 TLSv1.1 TLSv1.2 ; # not possible to do exclusive
                #ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH :+CAMELLIA256 :+AES256 :+CAMELLIA128 :+AES128 :+SSLv3 :!aNULL :!eNULL :!LOW :!3DES :!MD5 :!EXP :!PSK :!DSS :!RC4 :!SEED :!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA' ;
                #
                #ssl_stapling on ;
                #resolver 192.168.1.1 ;
            
                index index.html ;
            
                location / {
                    proxy_set_header    Host $host ;
                    proxy_pass http://turtl ;
                }
            }
            

            ```Du coup je cherche encore la signification et l'utilité des lignes suivante :

            server_name api.notes.example.org ;
            proxy_pass http://turtl

            upstream turtl {
            server 127.0.0.1:8181 ;
            }

            Voila le compte rendu.

          • [^] # Re: config reseau

            Posté par  . Évalué à 1.

            Alors, voici ce que j'ai mis comme config.

            Nginx écoute sur le port 80 et redirige via proxy_pass à l'adresse http://turtl ou turtl = 127.0.0.1:8181.
            Et donc Nginx redirige les requetes du port 80 vers le port 8181 je suppose !?

            J'ai installé turtl et rethinkdb comme il se doit.

            Je me connnecte avec le client Turtl configuré à l'adresse http://serveur.domaine.fr.
            Une requete sur le port 80 de ma box est donc lancée.
            Je redirige les requetes du port 80 sur le port 80 de ma raspi pour que Nginx puisse traiter la demande.
            Nginx renvoie alors la demande au serveur Turtl sur le port 8181 à l'adresse 127.0.0.1
            Normalement rethinkdb devrait suivre.

            Ou se loge les logins et mdp ? Dans rethinkdb ?

            Voici le détail de ma conf actuelle.

            Je pense savoir ce qui cloche, rethinkdb ne fonctionne pas très bien au démarrage.

            root@raspberrypi:/home/pi# systemctl status turtl
            ● turtl.service - Note taking service
               Loaded: loaded (/etc/systemd/system/turtl.service; enabled)
               Active: active (running) since Fri 2017-06-30 16:15:16 UTC; 5min ago
                 Docs: http://turtl.it
             Main PID: 794 (armcl)
               CGroup: /system.slice/turtl.service
                       └─794 /opt/ccl/armcl -Q -b --load start.lisp
            
            Jun 30 16:15:41 raspberrypi ccl[794]: ; While executing: (:INTERNAL ASDF/FIND-SYSTEM::CHECK-NOT-OLD-ASDF-SYSTEM), in process listener(1).
            Jun 30 16:15:42 raspberrypi ccl[794]: To load "turtl":
            Jun 30 16:15:42 raspberrypi ccl[794]: Load 1 ASDF system:
            Jun 30 16:15:42 raspberrypi ccl[794]: turtl
            Jun 30 16:15:42 raspberrypi ccl[794]: ; Loading "turtl"
            Jun 30 16:15:51 raspberrypi ccl[794]: ..
            Jun 30 16:15:51 raspberrypi ccl[794]: <INFO> [1498839351] turtl - Applying DB schema...
            Jun 30 16:15:52 raspberrypi ccl[794]: <INFO> [1498839352] turtl - Schema applied: (:TABLES-ADD NIL :INDEXES NIL)
            Jun 30 16:15:52 raspberrypi ccl[794]: <NOTICE> [1498839352] wookie - (start) Starting Wookie  127.0.0.1:8181
            Jun 30 16:19:05 raspberrypi systemd[1]: Started Note taking service.
            

            De même pour rethinkdb :

            root@raspberrypi:/home/pi# sudo systemctl status rethinkdb@user1
            ● rethinkdb@user1.service - RethinkDB database server for instance 'user1'
               Loaded: loaded (/usr/lib/systemd/system/rethinkdb@.service; enabled)
               Active: active (running) since Fri 2017-06-30 16:15:06 UTC; 1min 53s ago
             Main PID: 425 (rethinkdb)
               CGroup: /system.slice/system-rethinkdb.slice/rethinkdb@user1.service
                       ├─425 /usr/local/bin/rethinkdb serve --config-file /usr/local/etc/rethinkdb/instances.d/user1.conf
                       ├─553 /usr/local/bin/rethinkdb serve --config-file /usr/local/etc/rethinkdb/instances.d/user1.conf
                       └─706 /usr/local/bin/rethinkdb serve --config-file /usr/local/etc/rethinkdb/instances.d/user1.conf
            
            Jun 30 16:15:09 raspberrypi rethinkdb[425]: Listening for intracluster connections on port 29015
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: Listening for client driver connections on port 28015
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: Listening for administrative HTTP connections on port 8080
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: Listening on cluster addresses: 127.0.0.1, 127.0.1.1, ::1
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: Listening on driver addresses: 127.0.0.1, 127.0.1.1, ::1
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: Listening on http addresses: 127.0.0.1, 127.0.1.1, ::1
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: To fully expose RethinkDB on the network, bind to all addresses by adding `bind=all' to the config file (/u...r1.conf).
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: Server ready, "raspberrypi_q3m" 9ed40771-6b53-4bb5-974f-94c9f5b25a54
            Jun 30 16:15:10 raspberrypi rethinkdb[425]: warn: Problem when checking for new versions of RethinkDB: HTTP request to update.rethinkdb.com failed.
            Jun 30 16:16:32 raspberrypi systemd[1]: Started RethinkDB database server for instance 'user1'.
            

            Si vous avez des explications ! Quand j'avais exposé Turtl sans Nginx à l'adresse 192.168.1.30, ça marchait très bien mais la Nginx bloque peut être des requêtes, … !

            Merci d'avance

            • [^] # Re: config reseau

              Posté par  (site web personnel) . Évalué à 2.

              Nginx écoute sur le port 80 et redirige via proxy_pass à l'adresse http://turtl ou turtl = 127.0.0.1:8181.
              Et donc Nginx redirige les requetes du port 80 vers le port 8181 je suppose !?

              Bah… oui.

              Normalement rethinkdb devrait suivre.

              Euh… là je vois pas de quoi tu parles. Si tu veux dire que Turtl communique avec rethinkdb, oui, normalement.

              Ou se loge les logins et mdp ? Dans rethinkdb ?

              Bah, c'est un peu beaucoup le but d'une base de données, oui.

              Quand j'avais exposé Turtl sans Nginx à l'adresse 192.168.1.30, ça marchait très bien mais la Nginx bloque peut être des requêtes, … !

              Et si tu essayes depuis autre part que ton réseau local (en 3G genre) ? Si ton nom de domaine résout sur l'IP publique de ta box (et j'imagine que c'est le cas), ton client tente de joindre cette IP, mais comme il arrive par derrière (ie depuis le réseau local de ta box, et pas depuis Internet), ta box ne forwarde pas correctement la requête vers le pi.

              Pour voir si Nginx bloque des requêtes, regarde d'abord les logs de Nginx, pour voir s'il reçoit bien les requêtes.

              Si ça fonctionne en 3G, il faudrait que le résolveur DNS de ta box réponde 192.168.1.30 si on lui demande serveur.domaine.fr (je ne sais pas quel genre de box tu as, donc je ne sais pas si tu peux lui faire faire ça).

              Question : comment as-tu résolu le pb de

              Error: Unbound variable: ASDF
              While executing: CCL::CHEAP-EVAL-IN-ENVIRONMENT, in process listener(1).

              ? (Est-ce que c'est toi qui a écrit au support Framasoft sur ce sujet ? En tout cas, j'ai retrouvé ta trace sur des logs IRC de debian facile 🙂)

              J'ai passé la journée là-dessus sans réussir à m'en dépatouiller.

              Et pour rethinkdb ? Tu l'as compilé sur ton rpi ? Moi j'ai modifié https://github.com/jdmichaud/domos/blob/master/host/docker/rethinkdb/Dockerfile pour avoir un paquet debian pour arm. Je le fournirai pour le paquet Yunohost de Turtl parce que sinon, ça va être une plaie (j'ai lu qq part que ça prend genre 6h pour compiler sur un rpi)

              Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

              • [^] # Re: config reseau

                Posté par  . Évalué à 1.

                Le HTTP fonctionne mais j'ai du mal avec le HTTPS avec nginx et turtl.

                J'ai choisi letsencrypt pour les deux fichiers :

                ssl_certificate /etc/letsencrypt/live/my-domain/fullchain.pem;
                ssl_certificate_key /etc/letsencrypt/live/my-domain/privkey.pem;
                Unbnound variable, en fait j'ai réussi à en faire abstraction quand j'ai lancé turtl mais je n'ai pas d'explication particulière, je n'y ai pas fait attention.

                Ceci apparais parce que j'avais 2 fois le paquet ASDF.

            • [^] # Re: config reseau

              Posté par  . Évalué à 2.

              Jun 30 16:15:10 raspberrypi rethinkdb[425]: Listening for administrative HTTP connections on port 8080

              ton programme semble ecouter sur le port 8080 et non 8081 comme tu le signales plus haut

              • [^] # Re: config reseau

                Posté par  (site web personnel) . Évalué à 2.

                Non, ça c'est l'interface web d'administration de la base de données rethinkdb. Turtl écoute bien sur le 8181.

                Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

                • [^] # Re: config reseau

                  Posté par  . Évalué à 1.

                  Est-ce que Turtl gère le https ?

                  Si l'on met un serveur type : https://serveur.domaine.fr

                  • [^] # Re: config reseau

                    Posté par  (site web personnel) . Évalué à 3.

                    C'est le nginx qui gère l'https, pas turtl (mais la configuration de turtl doit contenir l'URL avec https).

                    Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

                    • [^] # Re: config reseau

                      Posté par  . Évalué à 1. Dernière modification le 05 juillet 2017 à 08:30.

                      Je rencontre un dernier souci avec le client web pour turtl. Je te fais part de ma configuration actuelle.

                      Conf actuelle

                      Voici la réponse que j'obtiens en essayant de me connecter avec mon login et mon mot de passe depuis firefox avec http://serveur.domaine.fr.
                      J'obtiens "login failed" et avec systemctl status turtl :
                      Jul 05 06:13:10 raspberrypi ccl[2434]: [1499235190] wookie - "GET /sync" 200 4

                      Il y a plusieurs choses que je devrais peut être changer dans ma conf et dont je ne sais pas à quoi les données font référence exactement.

                      http(s)://api.notes.example.org
                      http(s)://notes.example.org
                      dans ma conf, mon nom de serveur est serveur.domaine.fr

                      Aussi, j'utilise user1.conf pour rethinkdb et non turtl.conf et dans le config.lisp de turtl il y a cette ligne :
                      (defvar db-name "turtl"
                      "The name of the database we'll be using LOL")

                      Turtl fonctionne en https avec le client mobile et PC déjà mais depuis le web serait un plus.

                      En te remerciant par avance pour ta réponse.

                      Bonne journée

                      • [^] # Re: config reseau

                        Posté par  . Évalué à 1. Dernière modification le 07 juillet 2017 à 10:41.

                        J'ai appliqué cette conf : source (Lien

                            My conf.lisp :
                            (defvar *server-bind* "127.0.0.1"
                            (defvar *enabled-cors-resources* "https://domain:82"
                            (defvar *site-url* "https://domain:81"
                            (defvar *local-upload-url* "https://domain:81"
                        
                            My conf.js :
                            api_url: 'https://domain:81',
                            site_url: 'https://domain:82',
                        

                        => EN GROS :
                        Le projet Turtl permet avec Nginx et le proxy intégré à Nginx de rediriger les demandes (https sur port 81 ou 82) sur le serveur turtl en local.

                        Deux choses importantes :
                        -depuis firefox : on demande https://domain:82 = WEB, une fois qu'on a accès à la page web, on indique pour la connection l'adresse de l'API turtl https://domain:81 = API turtl
                        -depuis le logiciel ou l'appli mobile : on a juste à renseigner https://domain:81

                        Le fait d'avoir 2 ports 81 et 82 permettent de ne pas avoir : api.notes.example.org et notes.example.org ! Si vous avez une seule adresse pour vous connecter sur Rpi, pour moi il a été plus simple de garder la même adresse et de me servir des deux ports.

                        Actuellement les logiciels, appli et interface web fonctionnent avec serveur sur Rpi. Merci

                        • [^] # Re: config reseau

                          Posté par  . Évalué à 2.

                          Le fait d'avoir 2 ports 81 et 82 permettent de ne pas avoir : api.notes.example.org et notes.example.org ! Si vous avez une seule adresse pour vous connecter sur Rpi, pour moi il a été plus simple de garder la même adresse et de me servir des deux ports.

                          tu peux quand meme avoir
                          api.notes.example.org et notes.examples.org qui pointent tous les deux vers la meme IP

                          puis le proxy ngnix detecte le domaine, et pointe vers localhost:81 et localhost:82 selon qu'on passe par l'API et par l'interface WEB

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.