Cryptpad
Cryptpad
Cryptpad ist ein Online-Office, dass in erster Linie im Internet-Browser zu bedienen ist. Das Alleinstellungsmerkmal ist die Ende-zu-Ende-Verschlüsselung aller Dokumente. Die Entschlüsselung und die Verschlüsselung erfolgen im Browser. Auf dem Server sind keinerlei lesbare Daten abgelegt.
Cryptpad bietet Editoren für formatierte Textdokumente (im HTML-Format) und für Markdown-Dateien und andere Textdateien. Der Anwendungsfall der Tabellenkalkulation wird durch Onlyoffice-Tabellen abgedeckt. Präsentationen können mit Hilfe von Markdown erstellt werden. Bilder und PDF-Dokumente können in die Umgebung hochgeladen und im Browser betrachtet werden. Ein Kalender und ein Kanbanboard zur Aufgabenverwaltung vervollständigen das Angebot.
Das Projekt stellt eine gute Installationsanleitung bereit. Leider ist die Konfiguration des Webservers nur für NGinX dokumentiert, so dass für die Konfiguration des Apache Webserver einige Experimente notwendig wurden.
Installation
Mitglieder, die einen Managed Webspace im Shared Hosting nutzen, müssen für ihre Cryptpad-Installation einen "eigenen Serverdienst" beim Hostsharing-Service anmelden. Diese Option ist im Shared Hosting kostenpflichtig. Für den Serverdienst wird ein IP-Port mit dem Server vereinbart. Im Beispiel wird Port '30001' genutzt.
Für die Installation werden mit Hilfe von HSAdmin ein User (hier: 'xyz00-cryptpad') und eine Domain angelegt (hier: 'cryptpad.hs-example.de'). Die Entwickler empfehlen die Nutzung von zwei Domains für eine Cryptpad Installation. Wir nutzen hier eine 'leichtgewichtige' Subdomain 'api.cryptpad.hs-example.de', die bei Hostsharing ohne weitere Konfiguration nutzbar ist.
Die aktuelle Version wird mit Node Version 16.x betrieben. Zur Installation siehe; NodeJS.
Webserver Konfiguration
Nach dem Aufschalten der Domain 'cryptpad.hs-example.de' passen wir die generierte Verzeichnisstruktur der Domain wie folgt an:
cd ~/doms/cryptpad.hs-example.de rm -rf subs/www subs-ssl/www htdocs-ssl/.htaccess mkdir subs/api subs-ssl/api
In die Verzeichnisse 'subs/api', 'subs-ssl/api' und 'htdocs-ssl' werden jeweils Dateien mit dem Namen '.htaccess' zur Konfiguration des Apache Webserver abgelegt:
cd ~/doms/cryptpad.hs-example.de cat subs/api/.htaccess Redirect permanent / https://api.cryptpad.hs-example.de/ cat subs-ssl/api/.htaccess DirectoryIndex disabled RewriteEngine On RewriteBase / RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR] RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI} [proxy] RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last] cat htdocs-ssl/.htaccess DirectoryIndex disabled RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR] RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI} [proxy] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]
Eine weitere '.htaccess'-Datei liegt direkt im Hauptverzeichnis der Domain (die überlangen Zeilen beachten):
cd ~/doms/cryptpad.hs-example.de cat .htaccess Header Set Access-Control-Allow-Origin "https://api.pad.wikv.de" Header Set Access-Control-Allow-Methods "GET, POST, OPTIONS" Header Set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range" Header Set Access-Control-Max-Age "1728000" Header Set X-XSS-Protection "1; mode=block" Header Set X-Content-Type-Options "nosniff" Header Set Cross-Origin-Resource-Policy "cross-origin" Header Set Cross-Origin-Embedder-Policy "require-corp" Header Set Content-Security-Policy "default-src 'none'; child-src https://pad.wikv.de; worker-src 'self'; media-src blob:; style-src 'unsafe-inline' 'self' https://pad.wikv.de; script-src 'self' resource: https://pad.wikv.de; connect-src 'self' blob: https://pad.wikv.de https://api.pad.wikv.de wss://pad.wikv.de; font-src 'self' data: https://pad.wikv.de; img-src 'self' data: blob: https://pad.wikv.de; frame-src 'self' blob: https://api.pad.wikv.de; frame-ancestors 'self' https://pad.wikv.de;" "expr=%{REQUEST_URI} !~ m#^/(sheet|common)/#" Header Set Content-Security-Policy "default-src 'none'; child-src https://pad.wikv.de; worker-src 'self'; media-src blob:; style-src 'unsafe-inline' 'self' https://pad.wikv.de; script-src 'self' resource: https://pad.wikv.de 'unsafe-eval' 'unsafe-inline'; connect-src 'self' blob: https://pad.wikv.de https://api.pad.wikv.de wss://pad.wikv.de; font-src 'self' data: https://pad.wikv.de; img-src 'self' data: blob: https://pad.wikv.de; frame-src 'self' blob: https://api.pad.wikv.de; frame-ancestors 'self' https://pad.wikv.de;" "expr=%{REQUEST_URI} =~ m#^/(sheet|common)/#"
Zwei Datenverzeichnisse werden angelegt und direkt ins 'htdocs-ssl' verlinkt:
cd $HOME mkdir data mkdir data/blob mkdir data/block cd $HOME/doms/cryptpad.hs-example.de/htdocs-ssl/ ln -s /home/pacs/xyz00/users/cryptpad/data/blob . ln -s /home/pacs/xyz00/users/cryptpad/data/block .
Dieser Link muss angepasst werden, wenn der Blob-Speicher in den Zusatzspeicher unter /home/storage verschoben wird (siehe unten)!
Installation von NodeJS
Nach dieser Anleitung hier im Wiki wird mit Hilfe von 'nvm' 'node' in der Version 16 installiert.
Installation des Cryptpad
cd $HOME npm install -g bower git clone https://github.com/xwiki-labs/cryptpad.git cryptpad cd cryptpad # aktuelle Version nachsehen git checkout 5.0.0 npm install bower install cd config cp config.example.js config.js vi config.js
Meine Konfiguration in der 'config.js':
$ cat config.js module.exports = { httpUnsafeOrigin: 'https://cryptpad.hs-example.de', httpSafeOrigin: "https://api.cryptpad.hs-example.de", httpAddress: '127.0.0.1', httpPort: 30001, maxWorkers: 4, /* adminKeys: [ "[admin@cryptpad.hs-example.de/xxxxxxxxxxxxxxxxxxxxxxxx=]", ], */ inactiveTime: 90, // days archiveRetentionTime: 15, accountRetentionTime: 365, maxUploadSize: 8 * 1024 * 1024, filePath: '/home/pacs/xyz00/users/cryptpad/data/file/', archivePath: '/home/pacs/xyz00/users/cryptpad/data/archive/', pinPath: '/home/pacs/xyz00/users/cryptpad/data/pins', taskPath: '/home/pacs/xyz00/users/cryptpad/data/tasks', blockPath: '/home/pacs/xyz00/users/cryptpad/data/block', blobPath: '/home/pacs/xyz00/users/cryptpad/data/blob', blobStagingPath: '/home/pacs/xyz00/users/cryptpad/data/blobstage', decreePath: '/home/pacs/xyz00/users/cryptpad/data/decrees', logPath: '/home/pacs/xyz00/users/cryptpad/data/logs', logToStdout: true, logLevel: 'info', logFeedback: false, verbose: false, installMethod: 'unspecified', };
Der Admin-Key wird später ergänzt. Der erste registrierte User im Cryptpad kann den Schlüssel aus seinem Profil herauskopieren.
Wenn größere Datenmengen erwartet werden, kann der 'blobPath' in den Zusatzspeicher verlegt werden:
blobPath: '/home/storage/xyz00/users/cryptpad/data/blob',
Start des Cryptpad
Ich starte das Cryptpad zunächst einfach mit dem 'nohup'-Kommando:
cd ~/cryptpad nohup node server &
produktives Setup
Für ein produktives Setup fehlt noch das Erstellen einer Konfiguration für 'monit' oder 'supervisord' und für 'logrotate'.
weiterführende Links