DocApp — Guide de déploiement pour établissements scolaires

DevOps Editor 13 avril 2026 0 vues

DocApp — Guide de déploiement pour établissements scolaires

Plateforme de documentation interne — déploiement VPS / Docker


À propos de DocApp

DocApp est une plateforme de gestion documentaire interne conçue pour les établissements scolaires. Elle permet de centraliser, organiser et partager la documentation institutionnelle (règlements, procédures, formulaires, notes de service) avec une interface simple et sécurisée.

Fonctionnalités principales : - Rédaction et publication de documents (éditeur riche intégré) - Catégories et tags pour organiser le contenu - Recherche full-text en français - Gestion des rôles : Administrateur / Rédacteur - Assemblage de documents à partir de fragments réutilisables - Collections de documents personnalisées par organisation - Export PDF des collections - Conformité RGPD (soft delete, anonymisation, consentement)


Prérequis

Côté hébergement

  • Un VPS (Virtual Private Server) sous Linux (Ubuntu 22.04 recommandé)

    • Minimum : 2 vCPU, 2 Go RAM, 20 Go disque

  • Un nom de domaine pointant vers l'IP du VPS (ex : docs.monecole.be)

  • Accès SSH root au VPS

Côté logiciels à installer sur le VPS

  • Docker Engine (≥ 24)

  • Docker Compose (inclus avec Docker Engine)

Côté machine locale (pour le déploiement)

  • Docker Desktop installé

  • Accès terminal (macOS / Linux)


Étape 1 — Installer Docker sur le VPS

Connectez-vous en SSH à votre VPS :

ssh root@VOTRE_IP_VPS

Installez Docker :

curl -fsSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker

Vérifiez l'installation :

docker --version
# Docker version 24.x.x

Étape 2 — Préparer le dossier de l'application

Sur le VPS, créez le dossier de l'application et le fichier de configuration :

mkdir -p /opt/docapp
cd /opt/docapp

Créez le fichier .env avec vos paramètres :

cat > /opt/docapp/.env <<EOF
DB_PASSWORD=MotDePasseSecurise2024!
NEXTAUTH_SECRET=$(openssl rand -base64 32)
EOF

Important : Choisissez un mot de passe fort pour DB_PASSWORD. Le NEXTAUTH_SECRET est généré automatiquement.


Étape 3 — Créer le fichier docker-compose.prod.yml

Copiez ce contenu dans /opt/docapp/docker-compose.prod.yml :

services:
  nextjs:
    image: docapp:latest
    ports:
      - "3001:3000"
    environment:
      DATABASE_URL: postgresql://pierre:${DB_PASSWORD}@postgres:5432/docapp
      NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
      NEXTAUTH_URL: https://docs.monecole.be
      NODE_ENV: production
    volumes:
      - uploads:/app/public/uploads
    depends_on:
      postgres:
        condition: service_healthy
    restart: unless-stopped

  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: pierre
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: docapp
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U pierre -d docapp"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

volumes:
  pgdata:
  uploads:

Remplacez https://docs.monecole.be par l'URL réelle de votre établissement.


Étape 4 — Construire et transférer l'image Docker

Ces commandes se font sur votre machine locale (pas le VPS), dans le dossier du projet DocApp.

4.1 Construire l'image

docker buildx build --platform linux/amd64 -t docapp:latest .

Cette étape prend 2 à 3 minutes. Les erreurs Prisma affichées sont normales (pas de base de données au moment du build).

4.2 Transférer l'image vers le VPS

docker save docapp:latest | gzip | ssh root@VOTRE_IP_VPS "gunzip | docker load"

Le transfert peut prendre quelques minutes selon la qualité de votre connexion.


Étape 5 — Démarrer l'application

Sur le VPS :

cd /opt/docapp
docker compose -f docker-compose.prod.yml up -d

Vérifiez que tout fonctionne :

docker logs docapp-nextjs-1 2>&1 | tail -15

Vous devez voir :All migrations have been successfully applied. ▲ Next.js 14.x.x ✓ Ready in ~150ms


Étape 6 — Configurer le reverse proxy (HTTPS)

Nous recommandons Nginx Proxy Manager pour gérer facilement le HTTPS sans ligne de commande.

Installation de Nginx Proxy Manager

Sur le VPS, créez /opt/npm/docker-compose.yml :

services:
  app:
    image: jc21/nginx-proxy-manager:latest
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - data:/data
      - letsencrypt:/etc/letsencrypt
    restart: unless-stopped

volumes:
  data:
  letsencrypt:
cd /opt/npm
docker compose up -d

Configuration du proxy

  1. Ouvrez http://VOTRE_IP_VPS:81 dans votre navigateur

  2. Connectez-vous (identifiants par défaut : admin@example.com / changeme)

  3. Proxy Hosts → Add Proxy Host

  4. Renseignez :

    • Domain Names : docs.monecole.be

    • Forward Hostname/IP : IP du VPS ou localhost

    • Forward Port : 3001

    • Block Common Exploits : activé

  5. Onglet SSL :

    • Request a new SSL Certificate

    • Force SSL : activé

    • HTTP/2 Support : activé

    • Email : votre email pour Let's Encrypt

    • Cochez I Agree to the Let's Encrypt Terms of Service

  6. Save

L'application est maintenant disponible sur https://docs.monecole.be


Étape 7 — Premier démarrage : créer les comptes

Créez les comptes administrateur et rédacteur initiaux :

docker exec docapp-nextjs-1 sh -c 'node node_modules/prisma/build/index.js db seed'

Comptes créés par défaut (à modifier immédiatement après la première connexion) :

Rôle

Email

Mot de passe

Administrateur

admin@monecole.be

Admin2026

Rédacteur

editor@monecole.be

Editor2026

Changez ces mots de passe immédiatement via le back-office (/admin/users).


Étape 8 — Configurer votre établissement

  1. Connectez-vous sur https://docs.monecole.be/admin

  2. Allez dans Organisations → Nouvelle organisation

  3. Renseignez le nom de l'école, le type (école), et les variables utiles :nom_org → École Primaire Saint-Michel directeur → Madame Dupont adresse → Rue des Écoles 12, 5000 Namur annee → 2025-2026

  4. Ces variables seront automatiquement substituées dans vos exports de collections ({{nom_org}}{{directeur}}…)


Mises à jour

Pour déployer une nouvelle version de DocApp, répétez les étapes 4 et 5 :

# Sur votre machine locale
docker buildx build --platform linux/amd64 -t docapp:latest .
docker save docapp:latest | gzip | ssh root@VOTRE_IP_VPS "gunzip | docker load"

# Sur le VPS
cd /opt/docapp
docker compose -f docker-compose.prod.yml up -d --remove-orphans

Les migrations de base de données sont appliquées automatiquement au redémarrage.


Sauvegardes

Sauvegarde de la base de données

docker exec docapp-postgres-1 pg_dump -U pierre docapp | gzip > backup_$(date +%Y%m%d).sql.gz

Sauvegarde des fichiers uploadés

docker run --rm -v docapp_uploads:/data -v $(pwd):/backup alpine tar czf /backup/uploads_$(date +%Y%m%d).tar.gz /data

Planifiez ces sauvegardes avec cron sur votre VPS.


Commandes utiles

# Voir les logs en temps réel
docker logs -f docapp-nextjs-1

# Redémarrer l'application (sans rebuild)
cd /opt/docapp && docker compose -f docker-compose.prod.yml restart

# Accéder à la base de données
docker exec -it docapp-postgres-1 psql -U pierre -d docapp

# Arrêter l'application
cd /opt/docapp && docker compose -f docker-compose.prod.yml down

# Voir l'espace disque utilisé
docker system df

Résolution de problèmes fréquents

L'application ne démarre pas → Vérifiez les logs : docker logs docapp-nextjs-1 → Vérifiez que le fichier .env existe et contient DB_PASSWORD et NEXTAUTH_SECRET

Erreur de connexion à la base de données → Attendez quelques secondes que PostgreSQL soit prêt (healthcheck actif) → Vérifiez que DB_PASSWORD est identique dans .env et dans le compose

Le certificat SSL ne se génère pas → Vérifiez que votre domaine pointe bien vers l'IP du VPS (propagation DNS peut prendre 24h) → Les ports 80 et 443 doivent être ouverts sur votre pare-feu VPS

Problème après une mise à jour → docker compose -f docker-compose.prod.yml down && docker compose -f docker-compose.prod.yml up -d


Contact & Support

Pour toute question relative au déploiement ou à la personnalisation de DocApp pour votre établissement :

Pierre De Dobbeleer Manager — Strat.AI

Rue Mottiaux 13/0011 5100 Jambes Belgium

pierre2db@gmail.com LinkedIn


DocApp est développé et maintenu par Strat.AI.