Salut @aya
Où en es-tu de la dockerisation de Duniter 1.9-GVA ? Besoin d’aide ?
Salut @aya
Où en es-tu de la dockerisation de Duniter 1.9-GVA ? Besoin d’aide ?
yop,
j’ai regardé vite fait j’ai tout ce qu’il faut pour sortir une release.
j’ai retrouvé les dockers y’a déjà un gros boulot qui a été fait je vais l’intégrer.
je debug un pb de routage (email vers url) et j’attaque duniter pour notre prochaine release
Il se trouve que mes noeuds g1 mirroir et g1-test tournent depuis plusieurs mois avec duniter 1.9-dev dockerisé. @poka on avait fait quelques itérations sur le sujet à l’époque. Que te manque-t-il ?
Juste de pouvoir faire docker-compose up -d
et d’avoir un noeud Ğ1 Duniter 1.9-GVA mirroir qui tourne
Ben c’est exactement ce que je fais avec la branche dev actuelle.
Je génère l’image avec cette commande :
$ docker build -t duniter/duniter:dev -f release/docker/Dockerfile .
Et voici mon docker-compose.yml avec exclusions de quelques éléments spécifiques à mon serveur.
version: '2.4'
services:
duniter:
image: duniter/duniter:dev
restart: unless-stopped
environment:
DUNITER_AUTO_SYNC: 'true'
#DUNITER_SYNC_HOST: "g1-test.duniter.org:443"
DUNITER_SYNC_HOST: "g1-test.cgeek.fr:443"
DUNITER_BMA_ENABLED: 'true'
DUNITER_BMA_IP4: "0.0.0.0"
DUNITER_BMA_REMOTE_PORT: "443"
DUNITER_BMA_REMOTE_HOST: "g1-test-dev.pini.fr"
DUNITER_GVA_REMOTE_PORT: "443"
DUNITER_GVA_ENABLED: 'true'
DUNITER_GVA_REMOTE_HOST: "g1-test-dev.pini.fr"
DUNITER_GVA_SUBSCRIPTIONS_PATH: "gva-sub"
DUNITER_WS2P_HOST: "0.0.0.0"
#DUNITER_WS2P_PORT: '20901'
DUNITER_WS2P_PUBLIC: 'true'
DUNITER_WS2P_REMOTE_HOST: "g1-test-dev.pini.fr"
DUNITER_WS2P_REMOTE_PORT: "443"
DUNITER_WS2P_REMOTE_PATH: "ws2p"
#
DUNITER_POW_CPU: "0.8"
DUNITER_POW_NBCORES: "1"
#
volumes:
- data:/var/lib/duniter
- etc:/etc/duniter
mem_limit: 2g
logging:
options:
max-size: "10m"
max-file: "3"
volumes:
data:
etc:
Note : je force la version 2.4 pour docker-compose afin de pouvoir utiliser la directive mem_limit
.
EDIT : il ne peut pas y avoir un seul template docker-compose.yml qui réponde aux besoins de tous. Il faut que chacun fasse les adaptations nécessaires à son infra.
Génial !
@smith-v1 est-ce que certains parmis vous pourrais passer leurs noeuds mirroirs en version 1.9 de Duniter via ce docker-compose que @Pini nous fournit ?
Il suffit de changer:
DUNITER_SYNC_HOST: 'https://duniter-g1.p2p.legal'
(ou n’importe quel noeud duniter Ğ1 à jour)DUNITER_BMA_REMOTE_HOST
, DUNITER_GVA_REMOTE_HOST
et DUNITER_WS2P_REMOTE_HOST
par votre nom de domaine pour ce noeudmem_limit: ?g
par la taille de RAM maximal alloué à ce noeud en GO ?Une fois cette édition terminé, vous pouvez faire:
docker compose up -d
Et votre noeud Ğ1 mirroir tourne avec GVA d’accessible.
@Pini peux-tu nous partager ton vhost nginx ici stp ?
[edit] Voici ma config nginx pour un de mes anciens noeuds GVA:
server {
server_name duniter-g1.p2p.legal;
listen 443 ssl;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Porxy true;
proxy_pass http://192.168.9.8:10010;
proxy_redirect off;
# Socket.io support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
location /gva {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Proxy true;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
proxy_pass http://192.168.9.8:30901;
proxy_redirect off;
}
location /gva-sub {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Porxy true;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
proxy_pass http://192.168.9.8:30901;
proxy_redirect off;
# Socket.io support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location ^~ /ws2p/ {
rewrite ^/ws2p/(.*)$ /$1 break;
proxy_pass http://192.168.9.8:20901;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/duniter-g1.p2p.legal/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/duniter-g1.p2p.legal/privkey.pem; # managed by Certbot
}
server {
if ($host = duniter-g1.p2p.legal) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name duniter-g1.p2p.legal;
return 404; # managed by Certbot
}
Mais pour les derniuères version de Duniter 1.9, il va jsute manquer le location /gva/playground
ici
Merci de nous partager l’adresse de votre noeud ici lorsque c’est fait
Pas si simple car j’utilise un fork perso de nginx-proxy + acme-companion (j’héberge une dizaine de services dockerisés sur le même serveur), et mon vhost est généré automatiquement par ces outils. Le partager ici ne servira pas à grand chose.
Mais pas de souci pour filer un coup de main s’il faut aider à dépanner un service en rade.
EDIT : Voici la portion de mon vhost que je définis manuellement :
ssl_client_certificate /etc/nginx/auth_certs/pini_ca.crt;
ssl_verify_client optional;
location /ws2p {
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://g1-test-dev-ws2p.pini.fr_20901;
}
location /gva {
proxy_pass http://g1-test-dev-gva.pini.fr_30901;
}
location /gva-sub {
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://g1-test-dev-gva.pini.fr_30901;
}
location ~ ^/(admin|fonts?|images|webmin)/ {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
rewrite ^/admin/(.*)$ /$1 break;
proxy_pass http://g1-test-dev-admin.pini.fr_9220;
}
Je n’ai pas de location gva/playground
. Faudra m’expliquer comment c’est censé fonctionner pour que je l’ajoute.
(de mémoire)
/gva/playground
location /gva {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Proxy true;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
proxy_pass http://192.168.9.8:30901;
proxy_redirect off;
}
location /gva-sub {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Porxy true;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
proxy_pass http://192.168.9.8:30901;
proxy_redirect off;
# Socket.io support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
Et aussi passer ton noeud sur la Ğ1, là tu semble sync à la GTest.
Hello,
Pour le moment je n’aurai pas le temps de l’installer, mais voici quelques suggestions de fonctionnalités pour ce composant, si elles n’existent pas déjà :
@aya quand tu aura le temps, ce serait génial si tu fait un peu synthèse de tous ça à ta sauce
Bonsoir, pas un pro, loin s’en faut mais si je peux aider. Je tourne 2 noeuds duniter V1.8.5 108 mais pas de noeud miroir à ma connaissance.
Si je peux être d’une quelconque aide, n’hésitez pas.
Bon courage à vous,
Damery
J’ai mis à jour la conf sur mon noeud mirroir ǧ1 duniter.pini.fr.
Tu me diras si ça répond comme il faut.
Merci @Pini !
Je viens de changer le noeud de g1-stats de g1.librelois.fr vers duniter.pini.fr: change for pini GVA endpoint · ff3e9486a8 - g1-stats - P2Git
edit:
et non ta un pbm: GraphQL Playground
{
balance(script: "Do99s6wQR2JLfhirPdpAERSjNbmjjECzGxHNJMiNKT3P") {
amount
}
}
{
"data": {
"balance": null
}
}
Ton noeud est peut être mal synchronisé sur la Ğ1, ou bien un pbm avec la db GVA ?
D’après Kazou mon noeud est correctement synchronisé.
Comment diagnostiquer un problème avec la base de données GVA ?
EDIT : en fait sur ce noeud je n’ai activé GVA qu’à postériori, et pas pendant la synchro initiale. Est-ce que ça pourrait expliquer le pb ?
Systemd n’est pas utile pour gérer les containers duniter, car docker est un serveur, et si installé correctement, il est géré par systemd, et c’est docker qui gère la relance des containers.
Mon nœud est installé via docker-compose et se relance automatiquement en cas de plantage. La politique de relance se gère avec un paramètre du genre restart_policy
dans le docker-compose.
Par contre si tu lance un container manuellement avec docker run
, alors il ne sera pas relancé au reboot, et si rien n’est précisé en option de la commande, il s’arrête en cas de panne.
Oui probablemenr, je crois qu’il te faut compiler Dex et utiliser la commande dex migrate
de mémoire lol
edit: oui tout est là: Prototype de GVA - #14 by elois
Bon, je ne comprends pas trop. J’ai voulu resynchroniser avec --gva
mais duniter a refusé cette option. J’ai donc fait une synchro standard puis j’ai passé un coup de dex migrate
.
Après cette opération le noeud redémarre bien, a l’air syncrhonisé, mais l’URL gva/playground retourne une erreur 503. Je n’ai rien vu de bizarre dans les logs. qui annoncent un démarrage correct du service GVA :
2022-12-04T14:41:12+00:00 - info: generated self endpoints: ["GVA S duniter.pini.fr 443 gva"]
2022-12-04T14:41:12+00:00 - info: GvaServer::start: conf=GvaConf { enabled: true, ip4: 0.0.0.0, ip6: None, path: "gva", playground: true, port: 30901, remote_host: Some("duniter.pini.fr"), remote_port: Some(443), remote_path: None, remote_tls: None, whitelist: [127.0.0.1, ::1] }
2022-12-04T14:41:12+00:00 - info: GVA server listen on http://0.0.0.0:30901/gva
2022-12-04T14:41:12+00:00 - info: Server::run; addr=0.0.0.0:30901
2022-12-04T14:41:12+00:00 - info: listening on http://0.0.0.0:30901
Comment diagnostiquer ça ?
EDIT : non c’est bon. C’était un souci de conf de mon reverse proxy. C’est bien reparti, mais je n’obtiens pas mieux sur le test gva/playground :
{
"data": {
"balance": null
}
}
Ola !
Je vous ai préparé une petite branche pour tester la version docker : Files · release/1.9 · Yann Autissier / duniter · GitLab
@pini je viens d’intégrer un docker nginx pour exposer les routes gva avec des headers acces-control-allow personnalisés je suis parti sur nginxproxy/nginx-proxy c’est bien celui la que tu utilises ? Tu saurais m’expliquer comment tu fais le routage multi path/ports avec ?
Il restera ensuite à prévoir un script de migration docker pour l’upgrade et on peut sortir une release 1.9
C’est un fork perso de nginxproxy/nginx-proxy que j’utilise, justement pour permettre le multi-ports. Le nom de l’image docker est pinidh/nginx-proxy. Et j’y ajoute pinidh/acme-companion (fork de nginxproxy/acme-companion) pour la gestion automatique des certificats.
Je viens de regarder tes commits, bravo !!
Merci infinement pour ça, dit nous quand tout est carré, je dois pouvoir faire docker-compose up -d
et j’ai duniter 1.9 qui tourne en mirroir avec GVA accessible et fonctionnel