Installation d'un Pod Cesium+

Bonjour.
J’ai installé depuis quelques semaines un pod cesium+ (g1.data.mithril.re) qui à l’air de bien tourner mais je n’ai pas compris comment le lier à mon identité.
Pour le moment il tourne sur une clé qu’il a à mon avis automatiquement générée.
Comment le rattacher à mon identité ?
Merci.

2 Likes

Bonjour @jnoel !
Désolé de répondre aussi tardivement (merci pour ta patience).

Alors il te faut simplement :

  • éditer le fichier config/elasticsearch.yml, en y renseignant ton Salt (identifiant secret) et password;
  • redémarrer ton pod;
  • vérifier dans ta fiche de paire, le champs pubkey : g1.data.mithril.re/network/peering
  • Vérifier que tout fonctionne en ouvrant Cesium sur ton pod (changer de noeud dans les paramètres de l’extension Cesium+)

Il faut en effet sûrement que tu configure ton nginx pour que les websockets passent bien, en forçant en HTTP 1.1
Je te redonnerai la conf si besoin. Faudra que je penses a mettre une dos là dessus…

Concernant la config, regarde dans le fichier, il y a plein d’options qui peuvent être utilisent. Par exemple si tu veux activer ou non le module « subscription » pour l’envoi des e-mails.

Merci @kimamila !

Je pensais avoir bien regardé tout le fichier elasticsearch.yml mais je ne cherchais pas le mot “salt”.
Donc pour cette partie c’est ok, j’ai bien le pod qui tourne sur mon identité.

Je suis preneur de ta config nginx pour ce qui est du forçage en HTTP/1.1.
En ce moment dans les logs de cesium+, j’ai régulièrement des lignes du style :

Refused GET request to [/ws/event/user/Bf9… (avec ma clé).

Ca le fait quand je me connecte avec cesium sur mon pod.
Tu penses que ça vient de cette config nginx ?

Merci encore.

Oui, clairement. Je t’envoie ça dans l’après-midi.

As tu également un nœud Duniter qui tourne ? Si non, quel nœud Duniter utilises tu ?

J’ai ajouté ces lignes à la doc d’installation :

Error Refused GET request to [/ws/event/user/…

  • Message:

    Refused GET request to [/ws/event/user/<pubkey>…
    
  • Cause:

    Cesium try to open a WebSocket on your pod throw HTTP v1.0, and not throw HTTP v1.1.

  • Solution:

    Configure your web server to force HTTP 1.1 connection.

    On a Nginx server:

    • Edit the web site configuration (usually at /etc/nginx/site-available/<site-name>);
    • Add this lines:
      server {
    
          server_name pod.domain.org;
    
          (...)
    
          location /ws/ {
              # Replace by your Pod local address:
              proxy_pass http://127.0.0.1:9200;
    
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
              proxy_read_timeout 86400s;
              proxy_send_timeout 86400s;
          }
    }
    
    • Restart Nginx service;

Ah oui avec cette config Nginx je n’ai plus ces messages d’erreur et l’utilisation de mon pod sur cesium est beaucoup plus fluide !
Merci.
J’ai aussi un noeud duniter sur g1.mithril.re mais je n’arrive pas à voir la mention Cs+ sur mon noeud dans la page réseau de Cesium comme c’est le cas pour le tiens par exemple.


Il faut aussi que je regarde cette config de subscription également.
Merci pour ton aide.

Pour cela, il faut que tu déclare les endpoints Cesium+ dans ta config Duniter, afin qu’il les envoi sur le réseau Duniter :

duniter config --addep "ES_CORE_API [ipv4] [ipv6] [dns] [port]"
duniter config --addep "ES_USER_API [ipv4] [ipv6] [dns] [port]"
duniter config --addep "ES_SUBSCRIPTION_API [ipv4] [ipv6] [dns] [port]"

(tu n’es pas obligé de mettre ipv4 et ipv6.

Ensuite, tu dois redémarrer ton noeud duniter, et vérifier sa fiche de pair : /network/peering.

Voir la mienne si besoin : https://g1.e-is.pro/network/peering

Bon pour l’instant je galère pour la liaison duniter <> ES.
Je rajoute cette configuration sur mon noeud duniter :

duniter --addep "ES_CORE_API g1.data.mithril.re 443"
duniter --addep "ES_USER_API g1.data.mithril.re 443"
duniter --addep "ES_SUBSCRIPTION_API g1.data.mithril.re 443"

Je redémarre le service mais je ne le vois pas apparaître dans la fiche de pair.

Je n’ai pas configuré la subscription sur ES, c’est peut-être à cause de ça.
J’essaie petit à petit…

C’est un problème Duniter, et non Cesium+, du coup.
Ta fiche de pair Duniter n’est effectivement pas à jour.

Peux tu ajouter l’option config, pour qu’elle soit sauvegarder (d’après duniter --help):

duniter config --addep "ES_CORE_API g1.data.mithril.re 443"
duniter config --addep "ES_USER_API g1.data.mithril.re 443"
duniter config --addep "ES_SUBSCRIPTION_API g1.data.mithril.re 443"

Puis redémarrer duniter

1 Like

C’est ça tu as raison, ça fonctionne bien maintenant !
Merci @kimamila !

Bravo à toi :

La Cesium+ Pod Team à augmenter nettement !

2 Likes

En revanche il faut que tu penses à mettre à jour en v1.6.4.
Je vois que tu es de la Réunion en plus : vous allez donc pouvoir utiliser ce noeud par défaut, depuis l’île.
(une pensée pour @Moul :slight_smile: )

1 Like

Ok je vais faire ça.
Je n’ai pas trouvé de doc sur la bonne façon de faire une mise à jour.
Je décompresse mon tar.gz de la 1.6.4 dans le dossier de l’ancienne version ?

Oui c’est ma motivation première de pouvoir fournir un noeuds duniter et cesium+ sur l’île. Ca accélère pas mal nos clients cesium…
Le seul truc qui reste assez lent c’est l’affichage de la carte openstreetmap sur cesium et comme elle n’est pas centrée sur la Réunion, ça nous prends du temps d’avoir cette info.

Effectivement, il faudrait que je documente ca.
A moins que @bpresles ou toi ai du temps pour le faire ? Par exemple via une Merge Request
sur le gitlab du projet ?

EDIT : finalement j’ai trouvé le temps de le faire : la doc est à jour.

Mise à jour d’un Pod Cesium+

C’est assez simple :

  • Télécharger la nouvelle version
  • Dézipper dans un nouveau répertoire, par exemple dans /opt/cesium-plus-vX.Y.Z
  • Arrêter le Pod, s’il tourne : /bin/cesium-plus-pod stop
    (ou si dameon : sudo service cesium-plus-pod stop)
  • Depuis l’ancienne répertoire d’installation, copier :
    • le répertoire data qui contient toutes les données
    • le fichier config/elasiticsearch.yml (en conservant l’ancien, ou bien en faisant un diff avec le nouveau fichier, pour mettre ensuite à jour les nouvelles options, et conserver les anciennes).
cd path/to/old/cesium-plus-pod
cp -r data /path/to/new/cesium-plus-pod
diff config/elasticsearch.yml   /path/to/new/cesium-plus-pod/config/elasticsearch.yml
  • Relancer le Pod
  • Vérifier que tout se passe bien :
tail -f /path/to/new/cesium-plus-pod/logs/g1-es-data.log
1 Like

Ok merci @kimamila.
Si tu as besoin d’un coup de main n’hésites pas

Pour l’aide, je dis pas non, pour maintenir les docs déjà. Donc si tu vois une erreur ou manque, n’hésites pas améliorer.

Bonjour,
Je viens de tenter l’installation d’un pod cesium+ mais c’est pas bien configuré encore je pense:
J’ai nginx, duniter et cesium plus sur le même Debian.
j’accède bien à http://localhost:9200/node/summary

ma conf nginx:

server {
listen 443;
ssl on;
server_name cesiumplus.guenoel.fr;

ssl_certificate /etc/letsencrypt/live/cesiumplus.guenoel.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cesiumplus.guenoel.fr/privkey.pem;

location /ws/ {
# Replace by your Pod local address:
proxy_pass http://127.0.0.1:9200;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
      proxy_read_timeout 86400s;
      proxy_send_timeout 86400s;

}
}

une partie de la conf de elesticsearch.yml

cluster.name: guenoel  --> on met ce qu'on veut ici ?
Your ES cluster public host name (optional - required for publishing peering document)
cluster.remote.host: cesiumplus.guenoel.fr
cluster.remote.port: 9200

Use a descriptive name for the node:
node.name: node-guenoel    --> on met ce qu'on veut ici ?
Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 192.168.0.23  --> c'est bien l'IP sur le LAN qu'il faut mettre ici ?

Set a custom port for HTTP:
http.port: 9200

Duniter node to connect with
duniter.host: g1.presles.fr  --> faut-il mettre obligatoirement mettre son propre noeud ?
duniter.port: 10900

Initial list of hosts to perform synchronization
duniter.p2p.includes.endpoints: [
ES_CORE_API g1.data.duniter.fr 443",
ES_USER_API g1.data.duniter.fr 443",
ES_SUBSCRIPTION_API g1.data.duniter.fr 443"
]

au lancement de cesium plus:

% ./elasticsearch
[2020-04-13 11:39:19,100][INFO ][node ] [node-guenoel] version[2.4.6], pid[12808], build[5376dca/2017-07-18T12:17:44Z]
[2020-04-13 11:39:19,101][INFO ][node ] [node-guenoel] initializing …
[2020-04-13 11:39:20,615][INFO ][plugins ] [node-guenoel] modules [reindex, lang-expression, lang-groovy], plugins [mapper-attachments, cesium-plus-pod-core, cesium-plus-pod-subscription, cesium-plus-pod-user], sites
[2020-04-13 11:39:20,752][INFO ][env ] [node-guenoel] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [21gb], net total_space [36.1gb], spins? [possibly], types [ext4]
[2020-04-13 11:39:20,752][INFO ][env ] [node-guenoel] heap size [1007.3mb], compressed ordinary object pointers [true]
[2020-04-13 11:39:21,274][INFO ][http ] [node-guenoel] Using [org.elasticsearch.http.netty.NettyHttpServerTransport] as http transport, overridden by [cesium-plus-core]
[2020-04-13 11:39:25,940][WARN ][org.duniter.elasticsearch.PluginSettings] [node-guenoel] No keyring in config. salt/password (or keyring) is need to signed user event documents. Will use a generated key [6exMUBSyqfZcuqwHXBtWLEg6HgfuqDSvcuUPNzGCuN2k]
[2020-04-13 11:39:27,081][INFO ][duniter.network ] [node-guenoel] Adding {ES_CORE_API} as published endpoint, inside the peering document.
[2020-04-13 11:39:27,212][INFO ][duniter.security ] [node-guenoel] Enable security on all indices
[2020-04-13 11:39:27,832][INFO ][node ] [node-guenoel] initialized
[2020-04-13 11:39:27,832][INFO ][node ] [node-guenoel] starting …
[2020-04-13 11:39:27,834][INFO ][duniter.network ] [node-guenoel] Adding {ES_USER_API} as published endpoint, inside the peering document.
[2020-04-13 11:39:27,859][INFO ][duniter.network ] [node-guenoel] Adding {ES_SUBSCRIPTION_API} as published endpoint, inside the peering document.
[2020-04-13 11:39:27,979][INFO ][org.duniter.elasticsearch.PluginSettings] [node-guenoel] Starts i18n with locale [fr] at [/home/guenoel/cesium-plus-pod-1.6.5/data/i18n]
[2020-04-13 11:39:28,256][INFO ][transport ] [node-guenoel] publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
[2020-04-13 11:39:28,268][INFO ][discovery ] [node-guenoel] guenoel/8tknCjFIR0ubF9uUaRp-OQ
[2020-04-13 11:39:31,366][INFO ][cluster.service ] [node-guenoel] new_master {node-guenoel}{8tknCjFIR0ubF9uUaRp-OQ}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[2020-04-13 11:39:31,466][INFO ][http ] [node-guenoel] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}
[2020-04-13 11:39:31,466][INFO ][node ] [node-guenoel] started
[2020-04-13 11:39:32,383][INFO ][gateway ] [node-guenoel] recovered [11] indices into cluster_state
[2020-04-13 11:39:41,384][INFO ][duniter.user ] [node-guenoel] Starting user jobs… {blockchain user events:true}, {blockchain admin events:true}
[2020-04-13 11:39:41,408][INFO ][duniter.subscription ] [node-guenoel] Starting subscription jobs… {enable:true}
[2020-04-13 11:39:41,410][INFO ][duniter.user.event.blockchain] [node-guenoel] [g1] Checking user events…
[2020-04-13 11:39:41,436][INFO ][duniter.core ] [node-guenoel] Starting core jobs… {blockchain: block:true, peer:true, pending:true}, {p2p: synchro:true, websocket:true, emit_peering:true}, {doc_stats:true}
[2020-04-13 11:39:41,460][WARN ][duniter.subscription ] [node-guenoel] Impossible de traiter les abonnements email: la fonction d’envoi d’email est désactivée dans la configuration
[2020-04-13 11:39:41,647][INFO ][duniter.user.event.blockchain] [node-guenoel] [g1] Checking user events [OK] no error detected, in 237 ms
[2020-04-13 11:39:43,711][INFO ][duniter.core ] [node-guenoel] [g1] Indexing blockchain…
[2020-04-13 11:39:43,713][INFO ][duniter.blockchain ] [node-guenoel] [g1] [BASIC_MERKLED_API g1.presles.fr 443] Indexing last blocks…

1 Like

Salut @guenoel, et bravo !
Je penses que tu as fait juste des petites erreurs :

  • sur network.host : il faut que tu mette l’interface réseau qui va écouter sur le port http.port. Dans ton cas, comme tu as un nginx sur la même machine, tu peux mettre :

    network.host: 127.0.0.1    (ou localhost)
    
  • cluster.remote.port : c’est le port où ton Pod est accessible, depuis l’extérieur. Dans ton cas, c’est donc 443 (à cause de ton nginx)

  • dans ta conf nginx, tu redirige seulement les accès à /ws, sur ton Pod Cs+. Tu peux à la place tout rediriger. En effet, pour fonctionner, Cesium va appeller beaucoup d’autres chemin (/user/profile, etc).

Tu vas devoir ensuite relancer le Pod, puis nginx.
Tu peux vérifier que tout est OK en appellant :

Concernant tes autres questions :

  • node.name : sert à identifier ton noeud ES, si tu en lance plusieurs (ex: node-1 node-2 etc) pour avoir un cluster local de plusieurs noeuds (utile surtout si tu veux booster tes performances).
    En d’autres termes tu peux avoir plusieurs Pods localement, visible de l’extérieur comme un seul Pod.
  • cluster.name : C’est le nom de ton cluster locale ES, au cas ou ton réseau local avait plusieurs cluster ES, pour éviter que les données ne mélangent entre les cluster. Par exemple : un cluster avec des Pod gchange, et un autre avec des pod Cesium+.
1 Like

Salut !

Merci pour tes réponses !
Ca c’est accessible depuis l extérieur
https://cesiumplus.guenoel.fr/node/summary
https://cesiumplus.guenoel.fr/network/peering

  • j’avais mis network.host: 127.0.0.1 ce matin (mieux reveillé)
  • je viens de changer le port en 443 (ben oui remote = distant = depuis l exterieur = 443)
  • Pour nginx j’ai remplacé /ws/ par /
    et j’ai ajouté: root /le_chemin_complet_du_dossier_cesium_plus/ avant location
    Auriez vous un cesiumplus.conf complet de votre nginx pour que je me fasse une idée de comment configurer ?

Sinon apparemment il manque encore des choses. Tant que je suis pas affiché dans la liste des noeuds cesium+ ca veut dire c’est pas encore bon

Lancement du pod:

[2020-04-13 22:48:08,964][INFO ][node ] [node-guenoel] version[2.4.6], pid[31895], build[5376dca/2017-07-18T12:17:44Z]
[2020-04-13 22:48:08,965][INFO ][node ] [node-guenoel] initializing …
[2020-04-13 22:48:11,521][INFO ][plugins ] [node-guenoel] modules [reindex, lang-expression, lang-groovy], plugins [mapper-attachments, cesium-plus-pod-core, cesium-plus-pod-subscription, cesium-plus-pod-user], sites
[2020-04-13 22:48:11,744][INFO ][env ] [node-guenoel] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [21gb], net total_space [36.1gb], spins? [possibly], types [ext4]
[2020-04-13 22:48:11,745][INFO ][env ] [node-guenoel] heap size [1007.3mb], compressed ordinary object pointers [true]
[2020-04-13 22:48:12,720][INFO ][http ] [node-guenoel] Using [org.elasticsearch.http.netty.NettyHttpServerTransport] as http transport, overridden by [cesium-plus-core]
[2020-04-13 22:48:20,637][INFO ][duniter.network ] [node-guenoel] Adding {ES_CORE_API} as published endpoint, inside the peering document.
[2020-04-13 22:48:20,778][INFO ][duniter.security ] [node-guenoel] Enable security on all indices
[2020-04-13 22:48:21,439][INFO ][node ] [node-guenoel] initialized
[2020-04-13 22:48:21,441][INFO ][node ] [node-guenoel] starting …
[2020-04-13 22:48:21,453][INFO ][duniter.network ] [node-guenoel] Adding {ES_USER_API} as published endpoint, inside the peering document.
[2020-04-13 22:48:21,474][INFO ][duniter.network ] [node-guenoel] Adding {ES_SUBSCRIPTION_API} as published endpoint, inside the peering document.
[2020-04-13 22:48:21,680][INFO ][org.duniter.elasticsearch.PluginSettings] [node-guenoel] Starts i18n with locale [fr] at [/home/guenoel/cesium-plus-pod-1.6.5/data/i18n]
[2020-04-13 22:48:22,111][INFO ][transport ] [node-guenoel] publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
[2020-04-13 22:48:22,132][INFO ][discovery ] [node-guenoel] guenoel/JpAD_wFESNWU5UEa-mxvHw
[2020-04-13 22:48:25,304][INFO ][cluster.service ] [node-guenoel] new_master {node-guenoel}{JpAD_wFESNWU5UEa-mxvHw}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[2020-04-13 22:48:25,386][INFO ][http ] [node-guenoel] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}
[2020-04-13 22:48:25,386][INFO ][node ] [node-guenoel] started
[2020-04-13 22:48:26,740][INFO ][gateway ] [node-guenoel] recovered [11] indices into cluster_state
[2020-04-13 22:48:35,337][INFO ][duniter.user ] [node-guenoel] Starting user jobs… {blockchain user events:true}, {blockchain admin events:true}
[2020-04-13 22:48:35,352][INFO ][duniter.user.event.blockchain] [node-guenoel] [g1] Checking user events…
[2020-04-13 22:48:35,356][INFO ][duniter.subscription ] [node-guenoel] Starting subscription jobs… {enable:true}
[2020-04-13 22:48:35,374][INFO ][duniter.core ] [node-guenoel] Starting core jobs… {blockchain: block:true, peer:true, pending:true}, {p2p: synchro:true, websocket:true, emit_peering:true}, {doc_stats:true}
[2020-04-13 22:48:35,400][WARN ][duniter.subscription ] [node-guenoel] Impossible de traiter les abonnements email: la fonction d’envoi d’email est désactivée dans la configuration
[2020-04-13 22:48:35,584][INFO ][duniter.user.event.blockchain] [node-guenoel] [g1] Checking user events [OK] no error detected, in 229 ms
[2020-04-13 22:48:37,296][INFO ][duniter.core ] [node-guenoel] [g1] Indexing blockchain…
[2020-04-13 22:48:37,305][INFO ][duniter.blockchain ] [node-guenoel] [g1] > [BASIC_MERKLED_API localhost 10901] Indexing last blocks…

une fois il à fait ça après :

[2020-04-13 23:11:57,525][WARN ][monitor.jvm ] [node-guenoel] [gc][young][1414][6] duration [1.2s], collections [1]/[2.2s], total [1.2s]/[1.5s], memory [168.4mb]->[39.7mb]/[1007.3mb], all_pools {[young] [133.1mb]->[365.8kb]/[133.1mb]}{[survivor] [16.6mb]->[13mb]/[16.6mb]}{[old] [18.6mb]->[26.2mb]/[857.6mb]}
[2020-04-13 23:16:29,571][WARN ][duniter.security ] [node-guenoel] Refused HEAD request to [/node/summary]
[2020-04-13 23:16:29,926][WARN ][duniter.security ] [node-guenoel] Refused HEAD request to [/network/peering]
[2020-04-13 23:17:53,282][WARN ][duniter.security ] [node-guenoel] Refused HEAD request to [/node/summary]
[2020-04-13 23:17:53,368][WARN ][duniter.security ] [node-guenoel] Refused HEAD request to [/network/peering]
[2020-04-13 23:19:47,774][WARN ][duniter.security ] [node-guenoel] Refused HEAD request to [/node/summary]
[2020-04-13 23:19:47,907][WARN ][duniter.security ] [node-guenoel] Refused HEAD request to [/network/peering]