107 lines
5.0 KiB
Markdown
107 lines
5.0 KiB
Markdown
---
|
|
title: Datasette
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, tracking, sqlite, data-exploration, python]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Data+Analysis, https://github.com/simonw/datasette]
|
|
---
|
|
|
|
# 🔍 Datasette
|
|
|
|
> Explorateur web instantané pour fichiers SQLite : crée une API JSON et une UI de requête interactive pour n'importe quelle base, par Simon Willison.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [datasette.io](https://datasette.io) |
|
|
| **GitHub** | [simonw/datasette](https://github.com/simonw/datasette) |
|
|
| **License** | Apache-2.0 |
|
|
| **Langage principal** | Python |
|
|
| **Étoiles GitHub** | 846 ⭐ |
|
|
| **Dernière MAJ** | 2026-05-22 |
|
|
| **Catégorie** | [[cat-tracking]] |
|
|
|
|
## Description
|
|
**Datasette** est un outil écrit par **Simon Willison** (célèbre blogueur et créateur de Django) qui transforme n'importe quel fichier **SQLite** en une **API JSON explorable et une interface web de requêtage**. Le principe : `datasette ma_base.db` et l'utilisateur dispose instantanément de filtres, tris, facettes, full-text search et de points d'accès REST documentés.
|
|
|
|
C'est l'outil idéal pour les **journalistes de données**, les **équipes data** qui veulent partager un dataset, les **chercheurs** ou toute personne qui veut publier un extrait de base de données en quelques minutes. Datasette propose aussi un riche écosystème de **plugins** (cartographie, authentification, export CSV/JSON, visualisations Vega) et de **clis** (`sqlite-utils`) pour faciliter la vie.
|
|
|
|
Pour du **self-hosting**, Datasette est ultra-léger (sert des Go de données en Mo de RAM), fonctionne derrière Nginx/Caddy/Traefik et peut être déployé via Docker, pip, ou PaaS (Cloud Run, Fly.io). La **version 1.0 alpha** publiée récemment ajoute le support de **PostgreSQL**, ce qui en fait aussi un excellent outil de requêtage ad-hoc sur une base de production.
|
|
|
|
## Installation
|
|
### Via Docker (recommandé)
|
|
```yaml
|
|
version: "3.8"
|
|
services:
|
|
datasette:
|
|
image: ghcr.io/simonw/datasette:latest
|
|
container_name: datasette
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8001:8001"
|
|
volumes:
|
|
- ./data:/data
|
|
- ./metadata.yml:/metadata.yml
|
|
command: >
|
|
datasette serve /data/*.db
|
|
--host 0.0.0.0
|
|
--port 8001
|
|
--metadata /metadata.yml
|
|
--setting default_page_size 50
|
|
--setting suggest_facets on
|
|
```
|
|
|
|
### Installation manuelle
|
|
1. Disposer de Python 3.10+ et pip
|
|
2. Installer : `pip install datasette datasette-cluster-map datasette-auth-github`
|
|
3. Créer un répertoire `data/` et y déposer vos `.db` SQLite
|
|
4. Écrire un `metadata.yml` pour configurer titres, sources, licences
|
|
5. Lancer : `datasette serve data/*.db --host 0.0.0.0 --port 8001`
|
|
6. Pour la production : installer `gunicorn` ou utiliser `caddy` comme reverse proxy
|
|
|
|
## Configuration
|
|
- Configurer un fichier **metadata.yml** (titre du site, sources des données, descriptions de tables)
|
|
- Activer l'**authentification** via plugin (GitHub OAuth, mot de passe, ou token Bearer)
|
|
- Limiter l'accès à certaines tables avec des **permissions granulaires**
|
|
- Brancher des **plugins** : `datasette-cluster-map`, `datasette-vega`, `datasette-export`
|
|
- Définir des **facettes** et **sort defaults** par table pour faciliter la navigation
|
|
- Activer le **mode immutable** pour éviter les écritures non souhaitées sur des données sensibles
|
|
- Exposer l'**API JSON** derrière un reverse proxy avec rate limiting (Caddy / Traefik)
|
|
|
|
## Alternatives
|
|
### Open source
|
|
- **Apache Superset** — BI complet mais plus lourd à mettre en œuvre
|
|
- **Metabase** — alternative populaire, PostgreSQL natif, charts
|
|
- **Nocodb** — Airtable-like, multi-bases
|
|
- **Directus** — headless CMS sur base SQL, API auto-générée
|
|
- **CKAN** — portail open data institutionnel
|
|
|
|
### Propriétaires
|
|
- **Retool** — UI builder low-code avec sources multiples
|
|
- **Airtable** — no-code avec vues kanban/form
|
|
- **Tableau Public** — dataviz mais non self-hosted
|
|
- **Google Data Studio** — équivalent Google
|
|
|
|
## Sécurité
|
|
- **Ne jamais** exposer une base SQLite mutable en écriture à Internet
|
|
- Préférer le mode **immutable** pour les données publiques/partagées
|
|
- Activer un **plugin d'authentification** dès qu'il y a des données non publiques
|
|
- Restreindre l'accès par **IP source** (CrowdSec, fail2ban) ou via VPN (WireGuard)
|
|
- Activer **HTTPS** (Traefik + Let's Encrypt)
|
|
- Sauvegarder les `.db` régulièrement (un simple `cp` suffit, ou `litestream` pour la réplication continue)
|
|
- Auditer les **plugins** installés : ils s'exécutent dans le même process que vos données
|
|
|
|
## Ressources
|
|
- [Site officiel](https://datasette.io)
|
|
- [Documentation](https://docs.datasette.io)
|
|
- [Blog de Simon Willison](https://simonwillison.net)
|
|
- **sqlite-utils** : [github.com/simonw/sqlite-utils](https://github.com/simonw/sqlite-utils)
|
|
- [Liste de plugins](https://datasette.io/plugins)
|
|
|
|
## Pages Liées
|
|
- [[cat-tracking]]
|
|
- [[recettes-docker-compose]]
|
|
- [[cat-data-analysis]]
|