Guide — Déployer Oxigraph comme endpoint SPARQL¶
Problème : Vous souhaitez exposer vos données RDF via un endpoint SPARQL public ou interne, stable et sécurisé.
Solution : Déployer Oxigraph derrière un reverse proxy (nginx) avec authentification.
Quand utiliser ce guide¶
- Vous avez validé vos données en local (voir Tutoriel 05)
- Vous souhaitez exposer un endpoint SPARQL à d'autres services ou équipes
- Vous êtes sur un serveur Linux (VPS, VM, conteneur)
1. Architecture cible¶
Internet / réseau interne
│
▼
nginx (443/HTTPS) ← reverse proxy, TLS, auth basique
│
▼
Oxigraph (7878) ← triplestore, écoute en local uniquement
│
▼
/var/lib/oxigraph/ ← stockage persistant
2. Déploiement avec Docker Compose¶
Créez un fichier docker-compose.yml :
services:
oxigraph:
image: ghcr.io/oxigraph/oxigraph:latest
restart: unless-stopped
volumes:
- oxigraph-data:/data
command: serve --location /data --bind 0.0.0.0:7878
# Pas exposé directement — nginx fait le proxy
expose:
- "7878"
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "443:443"
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./certs:/etc/nginx/certs:ro
- ./.htpasswd:/etc/nginx/.htpasswd:ro
volumes:
oxigraph-data:
3. Configuration nginx¶
Fichier nginx.conf :
server {
listen 80;
server_name sparql.example.gouv.fr;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name sparql.example.gouv.fr;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
# Endpoint SPARQL public (lecture seule)
location /query {
proxy_pass http://oxigraph:7878/query;
proxy_set_header Host $host;
# CORS pour les clients web
add_header Access-Control-Allow-Origin "*";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
}
# Interface web et écriture — accès restreint
location / {
auth_basic "Accès restreint";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://oxigraph:7878;
proxy_set_header Host $host;
}
}
4. Créer les identifiants d'accès¶
# Installer htpasswd (si absent)
apt install apache2-utils
# Créer le fichier avec un premier utilisateur
htpasswd -c .htpasswd agent_technique
# Ajouter un utilisateur supplémentaire
htpasswd .htpasswd autre_agent
5. Lancer le service¶
6. Charger les données initiales¶
# Depuis votre poste local, en passant par nginx avec authentification
curl -u agent_technique:motdepasse \
-X POST "https://sparql.example.gouv.fr/store?graph=https://data.example.gouv.fr/graph/organisations" \
-H "Content-Type: text/turtle" \
--data-binary @organisations.ttl
7. Automatiser le rechargement des données¶
Script reload-graph.sh :
#!/bin/bash
# Recharge un graphe nommé depuis un fichier Turtle
# Usage : ./reload-graph.sh organisations.ttl https://data.example.gouv.fr/graph/organisations
FILE=$1
GRAPH=$2
ENDPOINT="https://sparql.example.gouv.fr"
AUTH="agent_technique:motdepasse"
# Supprimer l'ancien graphe
curl -u "$AUTH" -X DELETE \
"${ENDPOINT}/store?graph=${GRAPH}"
# Charger le nouveau fichier
curl -u "$AUTH" -X POST \
"${ENDPOINT}/store?graph=${GRAPH}" \
-H "Content-Type: text/turtle" \
--data-binary "@${FILE}"
echo "Graphe ${GRAPH} rechargé depuis ${FILE}"
8. Monitorer le service¶
# Nombre de triplets chargés
curl -G "https://sparql.example.gouv.fr/query" \
-u "agent_technique:motdepasse" \
--data-urlencode "query=SELECT (COUNT(*) AS ?n) WHERE { ?s ?p ?o }" \
-H "Accept: application/sparql-results+json"
# Liste des graphes
curl -G "https://sparql.example.gouv.fr/query" \
-u "agent_technique:motdepasse" \
--data-urlencode "query=SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }" \
-H "Accept: application/sparql-results+json"
Limites d'Oxigraph à connaître¶
| Capacité | Valeur indicative |
|---|---|
| Triplets recommandés | < 100 millions |
Requêtes fédérées (SERVICE) |
Supporté |
| Raisonnement OWL | Non supporté nativement |
| Transactions ACID | Oui |
| Réplication / clustering | Non (instance unique) |
Pour de grands volumes
Au-delà de 100 millions de triplets, orientez-vous vers Apache Jena / Fuseki ou Virtuoso Open Source.
Étape suivante¶
→ Référence — API et configuration Oxigraph
→ Guide — Requêtes SPARQL