Bei Etherpad handelt es sich um einen Editor für kollaboratives Schreiben, welcher selbst gehostet werden kann. Soll Etherpad unter Ubuntu gehostet werden, muss im ersten Schritt Node.js installiert werden:
apt install -y libssl-dev curl -sL https://deb.nodesource.com/setup_14.x | bash - apt install -y nodejs
Anschließend wird ein Nutzer für Etherpad angelegt und in diesen gewechselt werden und dort der Quellcode für Etherpad heruntergeladen und initial einmal gestartet und dann mittels Strg + C wieder beendet:
adduser --disabled-login --gecos "" etherpad su - etherpad git clone --branch master https://github.com/ether/etherpad-lite.git cd etherpad-lite npm install sqlite3 src/bin/run.sh
Nun werden einige Konfigurationen vorgenommen. Im Groben werden die Datenbank, die Authentifikation, Vorbereitungen für den Reverse Proxy, die Nutzer und die maximale Länge von einzufügendem Inhalt und das Log konfiguriert:
nano etherpad-lite/settings.json
Die Änderungen sind in ihrer Reihenfolge in der Konfigurationsdatei angegeben:
... "dbType": "sqlite", "dbSettings": { "filename": "var/sqlite.db" }, ... "requireAuthentication": true, ... "trustProxy": true, ... "users": { "admin": { // 1) "password" can be replaced with "hash" if you install ep_hash_auth // 2) please note that if password is null, the user will not be created "password": "example", "is_admin": true }, "user": { // 1) "password" can be replaced with "hash" if you install ep_hash_auth // 2) please note that if password is null, the user will not be created "password": "example", "is_admin": false } }, ... "socketIo": { /* * Maximum permitted client message size (in bytes). All messages from * clients that are larger than this will be rejected. Large values make it * possible to paste large amounts of text, and plugins may require a larger * value to work properly, but increasing the value increases susceptibility * to denial of service attacks (malicious clients can exhaust memory). */ "maxHttpBufferSize": 1048576 }, ... "logconfig" : { "appenders": [ { "type": "console" //, "category": "access"// only logs pad access } , { "type": "file" , "filename": "etherpad.log" , "maxLogSize": 1024000 , "backups": 3 // how many log files there're gonna be at max } ...
Anschließend wird der Kontext des Nutzers etherpad verlassen und eine neue Service-Unit für systemd angelegt:
exit nano /etc/systemd/system/etherpad.service
Diese wird mit folgendem Inhalt befüllt:
[Unit] Description=Etherpad After=syslog.target After=network.target [Service] Type=simple User=etherpad Group=etherpad Environment="NODE_ENV=production" ExecStart=/home/etherpad/etherpad-lite/src/bin/run.sh Restart=always [Install] WantedBy=multi-user.target
Nachdem die Datei angelegt wurde, kann der Service aktiviert und gestartet werden:
systemctl enable etherpad systemctl start etherpad
Lokal ist der Service nun per HTTP unter dem Port 9001 erreichbar. Damit der Service auch von außen erreichbar ist, kann Nginx als Reverse Proxy konfiguriert werden. Dazu muss die entsprechende Konfiguration hinterlegt werden:
server { listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; server_name example.org; client_max_body_size 512m; location / { # Set proxy headers proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # These are important to support WebSockets proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # Make sure to set your Etherpad port number proxy_pass http://localhost:9001; } }
Damit steht Etherpad auch von außen unter der entsprechenden Domain zur Verfügung und kann benutzt werden.