Développement Web

Litestream et Turso 2026 : guide complet (SQLite distribué pour PME francophone)

7 دقائق للقراءة

SQLite est devenue en 2026 (informations vérifiées en avril 2026, susceptibles d’évoluer) l’option de référence pour les startups francophones qui veulent simplicité, performance, et coût minimal. Plus de Postgres lourd à gérer, plus de Firebase vendor-locked. Litestream ajoute réplication continue de SQLite vers S3/MinIO/B2. Turso offre SQLite distribué edge avec libSQL fork moderne. Ce guide détaille les deux approches pour PME africaines à Dakar, Abidjan, Casablanca.

Sommaire

Pourquoi SQLite en 2026

Cinq raisons concrètes.

Performance. SQLite gère 100 000+ writes/sec sur SSD moderne. Reads en mémoire = sub-microsecondes. Plus rapide que Postgres pour 95% des charges PME.

Simplicité. Pas de serveur, pas de connexions, pas de pool. Un fichier app.db. Backup = copie. Migration = scp.

Coût zéro. SQLite gratuit. Pas de DBA, pas de cluster Postgres, pas de Firebase. VPS Hetzner CX23 (4,51 €/mois) tient SaaS 10 000 users.

Embedded. SQLite intégré dans Bun, Deno, mobile apps natives. Pas de réseau, pas de latence.

Réplication continue. Litestream stream WAL vers S3 toutes les secondes. Recovery point < 1 sec. Bcp plus simple que Postgres replication.

Litestream vs Turso vs SQLite pur

SQLite pur (single-file)

Le plus simple. app.db sur VPS. Backup = cron rsync. Limites : single-server, pas de read replicas, pas de edge.

Litestream

Process séparé qui stream WAL SQLite vers S3 (MinIO, B2, AWS) en continu. Restore depuis snapshot S3 en cas de crash. Single-writer mais survit aux désastres serveur.

Turso (libSQL)

Fork SQLite avec serveur HTTP, replication multi-region edge, embedded replicas. Cloud SaaS ou self-hosted. Modèle distribué moderne.

rqlite

Cluster SQLite via Raft consensus. Multi-writer, mais latence augmentée. Pour clusters HA strict.

Vue d’ensemble pratique

1. SQLite + Litestream sur VPS unique

App + SQLite + Litestream daemon → S3 stream. Voir Litestream sur VPS avec S3.

2. Turso self-hosted

libSQL serveur + clients distribués. Voir Déployer Turso self-hosted.

3. Bun + SQLite intégré

Bun a SQLite natif Bun.sql + Bun:sqlite. Voir Bun + SQLite + Litestream production.

4. Migration depuis Postgres ou Firebase

Voir Migrer de Postgres ou Firebase vers SQLite.

Tutoriels du cluster Litestream/Turso

Cas d’usage

SaaS B2B early stage

SaaS à Dakar 0-1000 users : SQLite + Litestream sur Hetzner CX23 = 4,51 €/mois. Postgres surdimensionné. Migration future possible.

Apps mobile offline-first

App à Abidjan opérant en zones rurales : SQLite local sur device + sync différée. Fonctionne offline-first natif.

Edge serverless

API serverless via Cloudflare Workers + Turso edge : latence < 10ms partout. Idéal API mobile money lookup.

Outils internes PME

Outil RH/CRM PME 50 personnes : SQLite + Litestream = simplicité max. Postgres overkill.

Documentation et CMS

Site Astro/Next.js avec base SQLite : queries au build, performance excellente.

Le pli sénégalais et ouest-africain

Quatre adaptations.

Coût. Postgres managé Supabase = 25 USD/mois minimum. SQLite + Litestream = 4,51 €/mois VPS + 1 USD/mois B2. Économie x5.

Embedded mobile. Apps mobile Dakar/Abidjan : SQLite natif iOS/Android. Pas de connexion réseau pour reads. UX fluide même sur 3G partagée.

Edge Africa. Turso edge replicas : Lagos, Le Cap, Casablanca disponibles. Latence < 30 ms.

Backups offsite simples. Litestream → Backblaze B2 = 1 USD/To/mois. Snapshot continu sans script complexe.

Erreurs fréquentes

Erreur Cause Solution
SQLite locked errors Multi-writer threads WAL mode + busy_timeout
Litestream lag Bandwidth limité Tuner snapshot interval
Migration schema lente SQLite ALTER limité Recréer table + INSERT INTO
Performance dégrade Pas de VACUUM VACUUM nuit + auto_vacuum=incremental
Concurrent writes échouent SQLite lock Queue writes ou Turso
Backup file corrompu Copie pendant write Toujours .backup() ou Litestream

FAQ

SQLite vraiment production ? Oui. WhatsApp, Apple, Mozilla utilisent SQLite. Linus Torvalds aussi. Sérieux.

Limite users ? 100k users avec read-heavy OK. Write-heavy = limites apparaissent.

Postgres vs SQLite décision ? SQLite < 100k users + reads-heavy. Postgres > 100k ou multi-writers concurrents.

Litestream vs replicat de Postgres ? Litestream = single-writer, eventual consistency vers S3. Postgres replication = multi-server sync.

Turso paid ? Cloud à partir de 0 USD (free tier 500 DB, 1 GB total). Self-host gratuit illimité.

libSQL vs SQLite ? libSQL fork avec serveur HTTP, embedded replicas, async I/O. Compatible drop-in SQLite.

Drizzle ORM compatible ? Oui. Drizzle + better-sqlite3 ou Bun:sqlite. Patterns identiques Postgres.

Sur un angle proche

Litestream et Turso en 2026 : deux philosophies du SQLite distribué

Une PME francophone qui héberge une application interne (CRM Notion-like, suivi de chantier, gestion d’école) sur un VPS unique se heurte vite à deux peurs : perdre la base si le disque meurt, et ralentir l’app si les utilisateurs sont à 6 000 km du serveur. Litestream et Turso répondent à ces deux peurs sans imposer Postgres ou MySQL. SQLite reste le moteur, mais la donnée est répliquée — soit vers un bucket S3 (Litestream), soit vers un réseau d’edge workers mondial (Turso).

Litestream (créé par Ben Johnson, racheté indirectement via Fly.io) est un démon Go open source qui streame les pages WAL de SQLite vers S3 toutes les secondes. Turso est un service managé construit sur libSQL (fork SQLite avec serveur réseau) qui offre des replicas en lecture dans 36 régions. Vous choisirez Litestream pour la simplicité et la souveraineté de la donnée (bucket Scaleway Paris), Turso pour la latence sub-50ms en Afrique de l’Ouest depuis l’edge Frankfurt ou Cape Town.

Étape 1 — Pré-requis et choix de la stack en 2026

Vérifiez d’abord la version de SQLite embarquée dans votre langage. Litestream exige SQLite 3.7+ avec WAL activé (cas par défaut depuis 2010, donc OK). Turso libSQL est compatible avec tous les drivers SQLite standards (Python sqlite3, Node better-sqlite3, Go mattn/go-sqlite3). Pour ce tutoriel : Ubuntu 24.04 LTS sur VPS Hetzner CX22 (4,59 EUR/mois soit 3 010 FCFA), application Node.js 22 LTS, base SQLite de 200 Mo en production.

sqlite3 --version
# 3.45.1 ou plus récent attendu
ssh root@vps-dakar
apt update && apt install -y sqlite3 curl

Si vous voyez une version inférieure à 3.40, recompilez ou utilisez le binaire officiel de sqlite.org. Les anciens VPS sous Ubuntu 20.04 livrent encore 3.31 qui pose problème avec certaines extensions WAL2.

Étape 2 — Installer Litestream et activer WAL

Téléchargez le binaire Litestream 0.3.13 (dernière stable janvier 2026) :

wget https://github.com/benbjohnson/litestream/releases/download/v0.3.13/litestream-v0.3.13-linux-amd64.deb
dpkg -i litestream-v0.3.13-linux-amd64.deb
litestream version

Forcez SQLite en mode WAL sur votre base existante :

sqlite3 /var/lib/monapp/data.db "PRAGMA journal_mode=WAL;"
# Réponse attendue : wal

Le mode WAL (Write-Ahead Logging) permet à Litestream de capturer les écritures sans bloquer l’application. C’est obligatoire — en mode delete (par défaut historique), Litestream refuse de démarrer.

Étape 3 — Configurer la réplication vers Scaleway Object Storage

Créez un bucket Scaleway (région PAR-1, Paris) via la console : 0,01 EUR/Go/mois soit 6,56 FCFA/Go. Pour 200 Mo de base répliquée toutes les secondes pendant 30 jours, comptez environ 3 EUR/mois (1 970 FCFA) tout compris. Récupérez les clés SCW_ACCESS_KEY et SCW_SECRET_KEY. Créez /etc/litestream.yml :

access-key-id: SCWxxxxxxxx
secret-access-key: yyyyyyyyyy
dbs:
  - path: /var/lib/monapp/data.db
    replicas:
      - type: s3
        bucket: backup-monapp-dakar
        path: data
        endpoint: https://s3.fr-par.scw.cloud
        region: fr-par
        retention: 720h
        sync-interval: 1s

L’option retention: 720h garde 30 jours de snapshots ponctuels. sync-interval: 1s donne un RPO d’une seconde — vous perdez au pire 1 seconde de transactions en cas de crash brutal du VPS.

Étape 4 — Lancer Litestream comme service systemd

litestream replicate -config /etc/litestream.yml
# Si OK, créez le service
cat > /etc/systemd/system/litestream.service <<'EOF'
[Unit]
Description=Litestream
After=network.target
[Service]
ExecStart=/usr/bin/litestream replicate -config /etc/litestream.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now litestream
journalctl -u litestream -f

Vous devez voir des lignes level=INFO msg="write snapshot" pos=.... Si vous voyez permission denied sur le bucket, vérifiez la politique IAM Scaleway (le bucket doit être en lecture/écriture pour la clé applicative, pas en lecture seule).

Étape 5 — Tester la restauration sur un autre VPS

Provisionnez un VPS de test (Hetzner CX22 Helsinki, 4,59 EUR), installez Litestream, copiez le fichier config (en remplaçant le path local), puis :

litestream restore -config /etc/litestream.yml /var/lib/monapp/data.db
sqlite3 /var/lib/monapp/data.db "SELECT COUNT(*) FROM utilisateurs;"

Le compte d'utilisateurs doit correspondre à la production (à 1 seconde près). RTO mesuré sur 200 Mo : 25-40 secondes pour télécharger le snapshot + appliquer les WAL. Documentez ce chiffre — vos clients PME le demandent en audit ISO.

Étape 6 — Migrer vers Turso pour la latence multi-régions

Si votre app est consultée depuis Dakar, Paris et Montréal, Litestream ne suffit pas (pas de réplica de lecture). Turso résout ce cas. Créez un compte sur turso.tech, installez le CLI :

curl -sSfL https://get.tur.so/install.sh | bash
turso auth signup
turso db create monapp-prod --location fra
turso db replicate monapp-prod cdg  # Paris
turso db replicate monapp-prod jnb  # Johannesburg (proche AOF)
turso db show monapp-prod --url

L'URL renvoyée est de la forme libsql://monapp-prod-monorg.turso.io. Le tier gratuit 2026 propose 9 Go de stockage, 1 milliard de lignes lues/mois, 25 millions écrites/mois, 3 emplacements — largement suffisant pour une PME de 50 utilisateurs.

Étape 7 — Connecter une app Node.js à Turso

npm install @libsql/client
# Code Node.js
import { createClient } from "@libsql/client";

const db = createClient({
  url: "libsql://monapp-prod-monorg.turso.io",
  authToken: process.env.TURSO_AUTH_TOKEN,
});

const r = await db.execute("SELECT nom FROM utilisateurs WHERE actif = 1");
console.log(r.rows);

La latence depuis un navigateur Dakar (via le replica Frankfurt) tourne autour de 80-120 ms, contre 280-350 ms pour un Postgres unique hébergé à Paris. Pour un dashboard interne avec 30 requêtes par chargement, ça représente 6 secondes économisées par page.

Étape 8 — Coûts comparés et recommandation par cas d'usage

Pour 200 Mo de base et 50 utilisateurs internes, voici les ordres de grandeur 2026 :

  • Litestream + Scaleway PAR — VPS Hetzner CX22 (3 010 FCFA) + bucket S3 (1 970 FCFA) = 4 980 FCFA/mois, donnée 100 % en France/Allemagne, RTO 30 secondes.
  • Turso tier gratuit — 0 FCFA/mois jusqu'à 9 Go et 1 milliard de lectures, latence sub-100ms en Afrique de l'Ouest, mais donnée hébergée chez Turso (vérifier RGPD selon le secteur).
  • Turso Scaler payant — 29 USD/mois (19 030 FCFA) pour 24 Go, 100 milliards de lectures, support prioritaire — adapté aux SaaS qui scalent.

Recommandation pour cabinet d'avocats ou clinique sénégalaise : Litestream + Scaleway pour la souveraineté. Recommandation pour startup SaaS panafricaine : Turso pour la latence et l'élasticité. Pour les deux cas, prévoyez 1 jour de mise en place + 30 000 FCFA/mois de supervision.

Pour explorer plus loin, lisez notre tutoriel SQLite débutant et notre comparatif VPS pour l'Afrique de l'Ouest.

Étape 9 — Surveillance Litestream avec Healthchecks.io

Litestream peut tomber silencieusement (clé S3 expirée, quota Scaleway dépassé, disque plein). Encadrez-le par un cron de vérification toutes les 15 minutes :

cat > /usr/local/bin/check-litestream.sh <<'EOF'
#!/usr/bin/env bash
LAST=$(litestream snapshots -config /etc/litestream.yml /var/lib/monapp/data.db | tail -1 | awk '{print $3}')
NOW=$(date -u +%s)
DIFF=$((NOW - $(date -d "$LAST" +%s)))
if [ $DIFF -gt 300 ]; then
  curl -fsS https://hc-ping.com/UUID/fail
else
  curl -fsS https://hc-ping.com/UUID
fi
EOF
chmod +x /usr/local/bin/check-litestream.sh
echo "*/15 * * * * /usr/local/bin/check-litestream.sh" | crontab -

Si aucun snapshot n'est apparu depuis 5 minutes, Healthchecks.io vous notifie par mail et SMS Mixx by Yas (25 FCFA l'unité). C'est ce qui sépare un déploiement amateur d'une vraie production PME.

Étape 10 — Migrer une base existante de Litestream vers Turso

Si vous démarrez avec Litestream et voulez basculer plus tard sur Turso (croissance, multi-régions), la migration tient en 4 commandes :

turso db create monapp-prod --from-file /var/lib/monapp/data.db
turso db tokens create monapp-prod --expiration none
# Copier le token dans .env de l'app
# Modifier la chaîne de connexion : sqlite3 → libSQL
# Tester en staging 48h, puis bascule DNS

La migration d'une base 200 Mo prend 4-7 minutes. Vous gardez Litestream actif 7 jours en parallèle (il continue à snapshotter le fichier local pendant que l'app écrit déjà dans Turso) — c'est votre filet en cas de bug Turso non détecté.

Limites à connaître avant de signer un contrat client

Litestream ne gère pas la haute disponibilité en lecture : si le VPS principal tombe, l'application est en panne le temps que vous bootiez un nouveau VPS et restauriez (RTO ~30 secondes). Pour une PME interne, c'est acceptable. Pour un site e-commerce, c'est insuffisant — passez à Turso ou à Postgres avec Patroni. Côté Turso, la limite principale est la taille des transactions : éviter les batches de plus de 100 000 lignes en INSERT massif, préférer du streaming par paquets de 1 000.

Sur l'aspect contractuel, ajoutez toujours une clause de réversibilité : un export hebdomadaire automatique turso db shell prod ".dump" > export-$(date +%Y%m%d).sql stocké chez le client. Vous lui garantissez qu'il pourra quitter Turso en 1 heure si la facturation explose ou si le service disparaît — argument décisif face à un DSI prudent à Dakar ou Abidjan.

Pensez aussi à journaliser les coûts mensuels Scaleway et Turso dans un tableur partagé avec le client : la transparence financière mensuelle évite 90 % des contestations annuelles et fidélise sur 24 mois minimum.

مشاركة