# 🔗 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.