Installation de CryptPad sur Debian 12 : Collaboration Sécurisée et Vie Privée Totale

Introduction

À une époque où la vie privée numérique est constamment menacée, CryptPad émerge comme une solution révolutionnaire pour la collaboration en ligne. Cette suite bureautique open source offre une alternative sécurisée à Google Docs et Microsoft 365, avec une différence fondamentale : chiffrement de bout en bout intégré qui garantit que même les administrateurs du serveur ne peuvent pas accéder à vos données.

Dans ce guide complet, je t'accompagnerai dans l'installation et la configuration de CryptPad sur Debian 12, transformant ton serveur en une plateforme de collaboration privée et sécurisée.

Qu'est-ce que CryptPad et Pourquoi le Choisir

Caractéristiques Principales

CryptPad est une suite complète d'outils collaboratifs qui inclut :

  • Éditeur de Texte Riche : Éditeur de documents avancé avec mise en forme complète
  • Feuilles de Calcul : Alternative sécurisée à Excel/Google Sheets
  • Présentations : Création de diapositives professionnelles
  • Éditeur Markdown : Pour la documentation technique et les notes
  • Tableau Kanban : Gestion de projets en mode agile
  • Tableau Blanc : Tableau blanc numérique collaboratif
  • Formulaires/Sondages : Collecte de données anonyme et sécurisée
  • Disque Dur Chiffré : Stockage personnel pour tous les documents

Avantages du Chiffrement Zero-Knowledge

La technologie Zero-Knowledge de CryptPad signifie que :

  • Les données sont chiffrées dans le navigateur avant d'être envoyées au serveur
  • Les clés de déchiffrement ne quittent jamais le dispositif de l'utilisateur
  • Même les administrateurs du serveur ne peuvent pas lire les contenus
  • Conformité totale avec le RGPD et d'autres réglementations sur la vie privée
  • Aucun suivi ou analyse invasif

Prérequis et Exigences Système

Exigences Matérielles

  • Processeur : Minimum 2 cœurs, 4 cœurs recommandés
  • Mémoire Vive : Minimum 2 Go, 4 Go recommandés pour des équipes de 10+ utilisateurs
  • Stockage : 20 Go minimum + 1 Go par utilisateur actif
  • Bande Passante : Connexion stable avec au moins 10 Mbps symétriques

Exigences Logicielles

  • Système d'Exploitation : Debian 12 (Bookworm) mis à jour
  • Node.js : Version 18.x ou supérieure
  • NPM : Version 9.x ou supérieure
  • Git : Pour cloner le référentiel
  • Nginx : En tant que proxy inverse
  • Certbot : Pour les certificats SSL/TLS
  • PM2 : Gestionnaire de processus pour Node.js

Préparation du Système

# Aggiornamento completo del sistema
apt update && apt upgrade -y

# Installazione strumenti essenziali
apt install -y curl wget git build-essential software-properties-common

# Configurazione del firewall
apt install -y ufw
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Installation de Node.js et NPM

CryptPad nécessite Node.js 18.x ou supérieur. Installons la dernière version LTS :

# Rimozione di eventuali versioni precedenti
apt remove --purge nodejs npm -y
apt autoremove -y

# Installazione del repository NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -

# Installazione di Node.js e NPM
apt install -y nodejs

# Verifica delle versioni installate
node --version  # Dovrebbe mostrare v18.x.x
npm --version   # Dovrebbe mostrare 9.x.x

# Installazione di strumenti di build aggiuntivi
apt install -y python3 make g++

Création d'un Utilisateur Dédié

Pour des raisons de sécurité, CryptPad devrait être exécuté avec un utilisateur dédié non privilégié :

# Creazione utente cryptpad
useradd -m -d /home/cryptpad -s /bin/bash cryptpad

# Creazione directory per l'applicazione
mkdir -p /opt/cryptpad
chown cryptpad:cryptpad /opt/cryptpad

# Passaggio all'utente cryptpad
su - cryptpad

Téléchargement et Installation de CryptPad

Clonage du Référentiel

# Come utente cryptpad
cd /opt
git clone https://github.com/xwiki-labs/cryptpad.git cryptpad
cd cryptpad

# Checkout dell'ultima versione stabile
git checkout $(git tag -l | grep -E '^[0-9]+.[0-9]+.[0-9]+$' | sort -V | tail -n1)

Installation des Dépendances

# Installazione delle dipendenze Node.js
npm install

# Installazione delle dipendenze client-side
cd www
npm install
npm run build
cd ..

# Creazione delle directory necessarie
mkdir -p data blob blobstage block customize

Configuration de CryptPad

Fichier de Configuration de Base

# Copia del file di esempio
cp config/config.example.js config/config.js

# Modifica della configurazione
nano config/config.js

Modifie le fichier config/config.js avec les paramètres essentiels suivants :

module.exports = {
    // URL pubblico della vostra istanza
    httpUnsafeOrigin: 'https://cryptpad.esempio.com',
    
    // Porta su cui ascoltare (solo localhost)
    httpPort: 3000,
    httpAddress: '127.0.0.1',
    
    // Directory per i dati
    filePath: './data/file/',
    archivePath: './data/archive/',
    pinPath: './data/pins/',
    taskPath: './data/tasks/',
    blockPath: './block/',
    blobPath: './blob/',
    blobStagingPath: './blobstage/',
    decreePath: './data/decrees/',
    
    // Logging
    logPath: './data/logs/',
    logToStdout: false,
    logLevel: 'info',
    logFeedback: false,
    
    // Sicurezza
    contentSecurity: [
        "default-src 'none'",
        "style-src 'unsafe-inline' 'self'",
        "font-src 'self' data:",
        "script-src 'self'",
        "connect-src 'self' wss://cryptpad.esempio.com",
        "img-src 'self' data: blob:",
        "media-src 'self' data: blob:",
        "child-src 'self'",
        "frame-src 'self' blob:",
        "worker-src 'self' blob:",
    ].join('; '),
    
    // Amministrazione
    adminEmail: 'admin@esempio.com',
    adminKeys: [
        // Aggiungere qui la chiave pubblica dell'admin dopo la prima registrazione
    ],
    
    // Limiti storage (in MB)
    defaultStorageLimit: 50,
    maxUploadSize: 20 * 1024 * 1024, // 20MB
    
    // Features
    allowSubscriptions: false,
    restrictRegistration: false, // Impostare a true per limitare le registrazioni
};

Personnalisation de l'Interface

# Creazione file di personalizzazione
mkdir -p customize/pages
nano customize/pages/index.js

Ajoute des personnalisations comme le logo et les messages de bienvenue :

// customize/pages/index.js
define(['/customize/messages.js'], function (Messages) {
    Messages.home_host = "La Vostra Organizzazione";
    Messages.home_privacy_link = "Politica Privacy";
    Messages.home_tos_link = "Termini di Servizio";
    return Messages;
});

Configuration de PM2 pour la Production

PM2 garantit que CryptPad reste toujours en cours d'exécution :

# Tornare come utente root
exit

# Installazione globale di PM2
npm install -g pm2

# Creazione script di avvio
cat > /opt/cryptpad/ecosystem.config.js << 'EOF'
module.exports = {
  apps: [{
    name: 'cryptpad',
    script: './server.js',
    cwd: '/opt/cryptpad',
    user: 'cryptpad',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    error_file: './data/logs/err.log',
    out_file: './data/logs/out.log',
    log_file: './data/logs/combined.log',
    time: true
  }]
};
EOF

# Avvio di CryptPad con PM2
cd /opt/cryptpad
pm2 start ecosystem.config.js

# Configurazione avvio automatico
pm2 startup systemd -u cryptpad --hp /home/cryptpad
pm2 save

# Verifica stato
pm2 status
pm2 logs cryptpad --lines 20

Configuration de Nginx comme Reverse Proxy

Installation et Configuration de Base

# Installazione di Nginx
apt install -y nginx

# Creazione configurazione per CryptPad
nano /etc/nginx/sites-available/cryptpad

Configuration complète de Nginx pour CryptPad :

server {
    listen 80;
    listen [::]:80;
    server_name cryptpad.esempio.com;
    
    # Redirect HTTP to HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cryptpad.esempio.com;
    
    # SSL Configuration (sarà completata da Certbot)
    ssl_certificate /etc/letsencrypt/live/cryptpad.esempio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cryptpad.esempio.com/privkey.pem;
    
    # Security Headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options "SAMEORIGIN";
    
    # Logs
    access_log /var/log/nginx/cryptpad.access.log;
    error_log /var/log/nginx/cryptpad.error.log;
    
    # WebSocket support
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    
    # Main application
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # WebSocket headers
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
    
    # API endpoint
    location ^~ /cryptpad_websocket {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # WebSocket specific
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
    
    # Static files
    location ^~ /customize.dist/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_cache_valid 200 302 60m;
        proxy_cache_valid 404 1m;
    }
    
    # Block access to sensitive areas
    location ~ ^/(.bowerrc|.bower.json|.jshintrc|.jshintignore|Gruntfile.js|package.json|bower.json|config.js)$ {
        deny all;
    }
}

# Abilitazione del sito
ln -s /etc/nginx/sites-available/cryptpad /etc/nginx/sites-enabled/

# Test configurazione
nginx -t

# Riavvio Nginx
systemctl restart nginx

Certificats SSL avec Let's Encrypt

# Installazione Certbot
apt install -y certbot python3-certbot-nginx

# Ottenimento certificato SSL
certbot --nginx -d cryptpad.esempio.com 
  --non-interactive 
  --agree-tos 
  --email admin@esempio.com 
  --redirect

# Verifica rinnovo automatico
certbot renew --dry-run

# Configurazione rinnovo automatico con reload servizi
echo "0 0,12 * * * root certbot renew --quiet --post-hook 'systemctl reload nginx'" >> /etc/crontab

Sécurité et Durcissement

Configuration du Pare-feu Avancée

# Limitazione rate per prevenire DoS
apt install -y fail2ban

# Configurazione jail per Nginx
cat > /etc/fail2ban/jail.d/nginx-cryptpad.conf << EOF
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https"]
logpath = /var/log/nginx/cryptpad.error.log
maxretry = 10
findtime = 60
bantime = 600
EOF

# Riavvio fail2ban
systemctl restart fail2ban

En-têtes de Sécurité Supplémentaires

# Aggiungere in /etc/nginx/sites-available/cryptpad nella sezione server HTTPS

# Content Security Policy
add_header Content-Security-Policy "default-src 'none'; style-src 'unsafe-inline' 'self'; font-src 'self' data:; script-src 'self'; connect-src 'self' wss://cryptpad.esempio.com; img-src 'self' data: blob:; media-src 'self' data: blob:; child-src 'self'; frame-src 'self' blob:; worker-src 'self' blob:;" always;

# Referrer Policy
add_header Referrer-Policy "no-referrer" always;

# Feature Policy
add_header Feature-Policy "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; payment 'none'" always;

Sauvegarde et Maintenance

Script de Sauvegarde Automatique

#!/bin/bash
# /opt/scripts/backup-cryptpad.sh

BACKUP_DIR="/backup/cryptpad"
DATE=$(date +%Y%m%d-%H%M%S)
CRYPTPAD_DIR="/opt/cryptpad"

# Creazione directory backup
mkdir -p $BACKUP_DIR

# Stop CryptPad temporaneamente
pm2 stop cryptpad

# Backup dei dati
tar -czf $BACKUP_DIR/cryptpad-data-$DATE.tar.gz 
  $CRYPTPAD_DIR/data 
  $CRYPTPAD_DIR/blob 
  $CRYPTPAD_DIR/block 
  $CRYPTPAD_DIR/config/config.js

# Restart CryptPad
pm2 start cryptpad

# Mantieni solo ultimi 7 backup
find $BACKUP_DIR -name "cryptpad-data-*.tar.gz" -mtime +7 -delete

echo "Backup completato: cryptpad-data-$DATE.tar.gz"

# Rendere eseguibile e programmare
chmod +x /opt/scripts/backup-cryptpad.sh
echo "0 2 * * * root /opt/scripts/backup-cryptpad.sh" >> /etc/crontab

Supervision et Journaux

# Visualizzazione log in tempo reale
pm2 logs cryptpad

# Monitoraggio risorse
pm2 monit

# Stato dettagliato
pm2 info cryptpad

# Log rotation automatico con PM2
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

Gestion des Utilisateurs et Administration

Création d'un Compte Administrateur

1. Inscrivez-vous pour un compte normal sur CryptPad
2. Allez dans les paramètres et copiez votre clé publique
3. Ajoutez la clé au fichier de configuration :

nano /opt/cryptpad/config/config.js

# Aggiungere nella sezione adminKeys:
adminKeys: [
    "https://cryptpad.esempio.com/user/#/1/nome-utente/chiave-pubblica-lunga/"
],

Limitation des Inscriptions

Pour une instance privée, vous pouvez limiter les inscriptions :

# In config/config.js
restrictRegistration: true,

# Lista email autorizzate
allowlistEmails: [
    'utente1@esempio.com',
    'utente2@esempio.com'
],

Résolution des Problèmes Courants

WebSockets Non Fonctionnels

Symptôme : Erreurs de connexion en temps réel
Solution : Vérifiez la configuration proxy_upgrade dans Nginx

Erreurs de Permissions

# Correzione proprietà
chown -R cryptpad:cryptpad /opt/cryptpad
chmod -R 755 /opt/cryptpad/data

Mémoire Insuffisante

Symptôme : Plantages fréquents ou ralentissements
Solution : Augmentez la mémoire dans ecosystem.config.js ou ajoutez un espace d'échange

# Creazione swap se necessario
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab

Vérification de l'Intégrité

# Test funzionalità base
curl -I https://cryptpad.esempio.com
# Dovrebbe restituire 200 OK

# Test WebSocket
npm install -g wscat
wscat -c wss://cryptpad.esempio.com/cryptpad_websocket
# Dovrebbe connettersi senza errori

Optimisation des Performances

Cache Nginx

# Aggiungere in nginx.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cryptpad_cache:10m max_size=1g inactive=60m use_temp_path=off;

# Nella configurazione del sito
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    proxy_pass http://127.0.0.1:3000;
    proxy_cache cryptpad_cache;
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Réglage de Node.js

# In ecosystem.config.js
env: {
    NODE_ENV: 'production',
    NODE_OPTIONS: '--max-old-space-size=2048'
}

Conclusions

Félicitations ! Vous avez maintenant une instance CryptPad complètement fonctionnelle et sécurisée. Votre équipe peut collaborer sur des documents, des feuilles de calcul et des présentations avec la certitude que les données restent privées et protégées.

Points clés à retenir :

  • Effectuez des sauvegardes régulières des données
  • Surveillez les journaux pour les activités suspectes
  • Maintenez le système à jour
  • Testez périodiquement la reprise après sinistre
  • Documentez les personnalisations apportées

CryptPad représente un pas important vers la souveraineté numérique et la protection de la vie privée. Avec cette installation, vous avez créé un espace sécurisé où votre équipe peut travailler sans compromettre la confidentialité des données.

Pour obtenir de l'aide et des mises à jour, consultez la documentation officielle et participez à la communauté sur forum.cryptpad.fr.