Auto-héberger Grist avec Docker : Guide Complet 2026
Pourquoi auto-héberger Grist ?
L'auto-hébergement vous permet de :
- Maîtriser vos données : Hébergement sur votre propre serveur
- Réduire les coûts : Gratuit si vous avez déjà un serveur
- Personnaliser : Accès complet à la configuration
- Intégrer : Connexion à vos systèmes internes
Prérequis
Matériel recommandé
- CPU : 2 cœurs minimum (4 recommandés)
- RAM : 4 Go minimum (8 Go recommandés)
- Stockage : 20 Go minimum (SSD recommandé)
- OS : Linux (Ubuntu 20.04/22.04, Debian 11/12)
Logiciels nécessaires
- Docker 20.10+
- Docker Compose 2.0+
- Un nom de domaine (optionnel mais recommandé)
Installation de Docker
Sur Ubuntu/Debian
# Mettre à jour le système
sudo apt update && sudo apt upgrade -y
# Installer les dépendances
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# Ajouter la clé GPG officielle de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Ajouter le repository Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Installer Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Vérifier l'installation
sudo docker --version
sudo docker compose versionConfiguration Docker Compose
Créer le fichier docker-compose.yml
version: '3.8'
services:
grist:
image: gristlabs/grist:latest
container_name: grist
restart: unless-stopped
ports:
- "8484:8484"
environment:
- APP_HOME_URL=https://grist.votredomaine.com
- GRIST_SINGLE_ORG=mon-organisation
- [email protected]
- GRIST_SUPPORT_ANON=false
- GRIST_FORCE_LOGIN=true
volumes:
- ./data:/persist
- ./docs:/docs
networks:
- grist-network
# Optionnel : Base de données PostgreSQL externe
postgres:
image: postgres:15-alpine
container_name: grist-postgres
restart: unless-stopped
environment:
POSTGRES_DB: grist
POSTGRES_USER: grist
POSTGRES_PASSWORD: votre_mot_de_passe_secure
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- grist-network
# Optionnel : Redis pour le cache
redis:
image: redis:7-alpine
container_name: grist-redis
restart: unless-stopped
volumes:
- redis_data:/data
networks:
- grist-network
volumes:
postgres_data:
redis_data:
networks:
grist-network:
driver: bridgeConfiguration avec Traefik (SSL automatique)
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=admin@votredomaine.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- grist-network
grist:
image: gristlabs/grist:latest
container_name: grist
restart: unless-stopped
environment:
- APP_HOME_URL=https://grist.votredomaine.com
- GRIST_SINGLE_ORG=mon-organisation
volumes:
- ./data:/persist
labels:
- "traefik.enable=true"
- "traefik.http.routers.grist.rule=Host(`grist.votredomaine.com`)"
- "traefik.http.routers.grist.entrypoints=websecure"
- "traefik.http.routers.grist.tls.certresolver=letsencrypt"
- "traefik.http.services.grist.loadbalancer.server.port=8484"
networks:
- grist-network
networks:
grist-network:
driver: bridgeDémarrer Grist
Lancer les conteneurs
# Créer le dossier de données
mkdir -p ~/grist && cd ~/grist
# Créer le fichier docker-compose.yml
nano docker-compose.yml
# (Collez la configuration choisie)
# Lancer Grist
sudo docker compose up -d
# Vérifier que tout fonctionne
sudo docker compose ps
sudo docker compose logs -f gristAccéder à Grist
- Sans SSL : http://votre-ip:8484
- Avec Traefik : https://grist.votredomaine.com
Configuration avancée
Variables d'environnement importantes
| Variable | Description | Exemple |
|---|---|---|
| APP_HOME_URL | URL publique de Grist | https://grist.example.com |
| GRIST_SINGLE_ORG | Nom de l'organisation | ma-societe |
| GRIST_DEFAULT_EMAIL | Email admin par défaut | [email protected] |
| GRIST_SUPPORT_ANON | Autoriser l'accès anonyme | false |
| GRIST_FORCE_LOGIN | Forcer l'authentification | true |
| GRIST_SANDBOX_FLAVOR | Isolation des formules | gvisor |
Activer l'authentification OAuth (Google)
environment:
- GRIST_OAUTH_PROVIDER=google
- GRIST_OAUTH_CLIENT_ID=votre-client-id
- GRIST_OAUTH_CLIENT_SECRET=votre-client-secretBackup et restauration
Script de backup automatique
#!/bin/bash
# backup-grist.sh
BACKUP_DIR="/backups/grist"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Backup des données Grist
tar -czf $BACKUP_DIR/grist_data_$DATE.tar.gz ~/grist/data
# Backup PostgreSQL (si utilisé)
docker exec grist-postgres pg_dump -U grist grist > $BACKUP_DIR/grist_db_$DATE.sql
# Garder seulement les 7 derniers backups
ls -t $BACKUP_DIR/*.tar.gz | tail -n +8 | xargs rm -f
ls -t $BACKUP_DIR/*.sql | tail -n +8 | xargs rm -f
echo "Backup terminé : $DATE"Restaurer un backup
# Arrêter Grist
docker compose down
# Restaurer les données
sudo tar -xzf grist_data_20240331_120000.tar.gz -C ~/
# Restaurer la base (si PostgreSQL)
docker exec -i grist-postgres psql -U grist grist < grist_db_20240331_120000.sql
# Redémarrer
docker compose up -dMise à jour de Grist
# Arrêter les conteneurs
cd ~/grist
sudo docker compose down
# Télécharger la dernière version
sudo docker pull gristlabs/grist:latest
# Redémarrer
sudo docker compose up -d
# Nettoyer les anciennes images
sudo docker image prune -fRésolution des problèmes courants
Grist ne démarre pas
# Vérifier les logs
sudo docker compose logs grist
# Vérifier les ports utilisés
sudo netstat -tlnp | grep 8484
# Redémarrer proprement
sudo docker compose down
sudo docker compose up -dProblèmes de permissions
# Corriger les permissions
cd ~/grist
sudo chown -R 1000:1000 data
sudo chmod -R 755 dataCertificat SSL non valide
# Vérifier Traefik
sudo docker compose logs traefik
# Forcer le renouvellement
sudo rm -rf letsencrypt/*
sudo docker compose restart traefikSécurité recommandée
- Firewall : Ouvrir uniquement les ports 80, 443 et 22
- Fail2ban : Protéger contre les attaques par force brute
- Updates : Activer les mises à jour automatiques de sécurité
- Backup : Automatiser les sauvegardes quotidiennes
- Monitoring : Surveiller l'utilisation des ressources
Ressources complémentaires
Besoin d'aide pour le déploiement ?
Je peux vous accompagner sur :
- L'installation et la configuration
- La migration depuis Grist Cloud
- L'intégration avec vos systèmes
- La mise en place de backups automatisés