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.