8 views
# 🔗 Installer Duniter Squid + Hasura > Ce guide explique comment installer le composant **Duniter Squid**, un indexeur de chaîne Duniter v2, basé sur le framework [Subsquid](https://docs.subsquid.io/), avec **Hasura** comme API GraphQL. Il s’appuie sur la documentation officielle disponible ici : [https://duniter.org/wiki/duniter-v2/indexers/duniter-squid/](https://duniter.org/wiki/duniter-v2/indexers/duniter-squid/), enrichie de compléments et explications en français. --- ## 🛍 Objectif * Installer Duniter Squid pour indexer la chaîne Duniter v2 (gdev) * Exposer les données via une API GraphQL Hasura * Connecter l'indexeur à un nœud Duniter **archive** local * Stocker les données sur un RAID via Docker et Portainer --- ## 💠 Prérequis * Un nœud **archive** fonctionnel, dans le même réseau Docker que le stack squid * Docker + Portainer installés * Accès au RAID (par ex : `/srv/...`) * Docker network partagé avec le conteneur `duniter-archive` --- ## 📁 Structure du projet Le stack comprend : 1. **PostgreSQL** : base de données 2. **Hasura** : API GraphQL pour interroger les données 3. **Processor** : indexeur Subsquid qui extrait les données de la chaîne --- ## 📓 Stack Docker `docker-compose.yml` ```yaml version: "3.8" services: db: image: postgres:15 volumes: - /srv/.../squid-pg:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d ${DB_NAME}"] interval: 2s timeout: 2s retries: 5 environment: POSTGRES_DB: ${DB_NAME} POSTGRES_PASSWORD: ${DB_PASSWORD} hasura-squid: image: registry.duniter.org/nodes/duniter-squid/hasura:latest depends_on: processor: condition: service_healthy restart: always ports: - "8081:8080" environment: PRODUCTION: "true" HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:${DB_PASSWORD}@db:5432/${DB_NAME} HASURA_GRAPHQL_ENABLE_CONSOLE: "true" HASURA_GRAPHQL_DEV_MODE: "false" HASURA_GRAPHQL_UNAUTHORIZED_ROLE: public HASURA_GRAPHQL_ENABLE_TELEMETRY: "false" HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET} processor: image: registry.duniter.org/nodes/duniter-squid/squid:latest environment: - DB_NAME=${DB_NAME} - DB_PORT=5432 - DB_HOST=db - DB_PASS=${DB_PASSWORD} - RPC_ENDPOINT=${RPC_ENDPOINT} - GENESIS_FILE=${GENESIS_FILE} - HIST_GEN_FILE=${HIST_GEN_FILE} - HIST_BLOCK_FILE=${HIST_BLOCK_FILE} - HIST_TX_FILE=${HIST_TX_FILE} - HIST_CERT_FILE=${HIST_CERT_FILE} command: ["sqd", "process:prod"] depends_on: db: condition: service_healthy healthcheck: test: ["CMD-SHELL", "pgrep -f 'process:prod'"] interval: 5s timeout: 2s retries: 3 networks: - default - duniter-network networks: duniter-network: external: true name: duniter-v2s-gdev-800-archive_default ``` --- ## 📖 Fichier `.env` associé ```env # PostgreSQL DB_NAME=squid DB_PASSWORD=postgres # Hasura HASURA_GRAPHQL_ADMIN_SECRET=mypass # Squid processor (les fichiers sont dans l'image Docker) GENESIS_FILE=./input/gdev.json HIST_GEN_FILE=./input/genesis.json HIST_BLOCK_FILE=./input/block_hist.json HIST_TX_FILE=./input/tx_hist.json HIST_CERT_FILE=./input/cert_hist.json # Endpoint du nœud archive RPC_ENDPOINT=ws://duniter-archive:9944 ``` --- ## 🔍 Points importants à vérifier * Le nom du réseau Docker de ton nœud archive (utiliser `docker network ls`) * Le conteneur `duniter-archive` doit être **accessible en WebSocket** depuis le processor * Le port Hasura (8081) peut être redirigé par NGINX Proxy Manager si tu veux le partager publiquement --- ## ✅ Test GraphQL sur Hasura Une fois le stack déployé, accède à Hasura sur : ``` http://localhost:8081 ``` Tu peux tester une requête simple : ```graphql query { blockAggregate { aggregate { count } } } ``` Si tout fonctionne, tu obtiendras le nombre de blocs indexés. --- ## 🧲 Conseils de production * Protège Hasura avec un rôle `public` en lecture seule (Permissions) * Utilise un `admin_secret` fort (via `.env` ou secret Docker) * Tu peux bloquer l'accès à l'interface Hasura en dehors du LAN via NGINX * Surveille l’espace disque occupé par PostgreSQL : `du -sh /srv/.../squid-pg` --- ## 🔹 Aller plus loin * [Site officiel Duniter v2](https://duniter.org/wiki/duniter-v2/) * [Subsquid documentation](https://docs.subsquid.io/) * [Hasura permissions guide](https://hasura.io/docs/latest/auth/authorization/) --- > ✅ Félicitations ! Ton indexeur Duniter Squid + Hasura est opérationnel.