Etherpad unter Ubuntu installieren

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.

Polipo: Permission denied

Mein vor einiger Zeit aufgesetzter Proxyserver startete nicht mehr. Stattdessen bekam ich von Polipo nur noch die Meldung:

Starting polipo: Couldn't open log file /var/log/polipo: Permission denied

Allerdings ließ sich das ganze relativ problemlos aus der Welt schaffen:

touch /var/log/polipo
chmod 640 /var/log/polipo
chown proxy:proxy /var/log/polipo

Danach konnte der Dienst mittels:

service polipo restart

wieder gestartet werden.

Proxyserver mit Authentifizierung aufsetzen

Für Ubuntu sind eine Reihe von Proxyservern verfügbar. Die meisten dieser Dienste sind relativ schwergewichtig, was sich unter anderem auf die Konfiguration auswirkt. Tinyproxy und Polipo dagegen gehören zu den leichtgewichtigeren Varianten. Tinyproxy scheidet allerdings aus, da er keine Authentifikation anbietet. Es existiert zwar ein entsprechender Bugreport, aber augenscheinlich wird dieser nicht bearbeitet. So bleibt nur noch Polipo. Um dieses einzurichten muss es im ersten Schritt installiert werden:

apt-get install polipo

Anschließend kann die Konfiguration bearbeitet werden

nano /etc/polipo/config

In diesem Fall soll ein Server konfiguriert werden welcher von außen mittels Authentifizierung erreichbar ist. Dazu müssen folgende Optionen aktiviert werden:

### Basic configuration
### *******************

proxyAddress = "::0"        # both IPv4 and IPv6

### Authentification
### *******************

authCredentials=seeseekey:geheim

Nachdem die Konfiguration geändert wurde muss der Dienst neugestartet werden:

service polipo restart

In den Proxyeinstellungen für die Clientseite muss der Server, Port, Nutzername und das Passwort angegeben werden. Polipo nutzt dabei standardmäßig den Port 8123. Bei der Authentifizierung sollte man beachten das diese unverschlüsselt erfolgt und somit nicht wirklich sicher ist.

Die Proxy-Einstellungen von FoxyProxy

Die Proxy-Einstellungen von FoxyProxy

Für den Firefox empfielt sich auf Clientseite das AddOn FoxyProxy, welcher die Proxy-Konfiguration von Firefox erheblich verbessert. Damit auch DNS-Anfragen beim Proxy aufgelöst werden, sollte unter „about:config“ die Option „Network.proxy.socks_remote_dns“ auf true gesetzt werden. FoxyProxy erledigt dies in der Standardeinstellung automatisch.

Weitere Informationen gibt es unter:
http://wiki.ubuntuusers.de/Polipo

Probleme mit der „Online Gallery“ im Visual Studio beseitigen

Wenn man sein Visual Studio hinter eine Proxyserver betreibt, so kann es passieren das die „Online Gallery“ nicht funktioniert. Möchte man dies ändern so muss man je nach Visual Studio, eine der folgenden Dateien ändern:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config (Visual Studio 2010)
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe.config (Visual Studio 2012)
Die Online Gallery ist offline

Die „Online Gallery“ ist offline

Dort findet man einen Block der in etwa so aussehen sollte:

<system.net>
  <settings>
    <ipv6 enabled="true"/>
  </settings>
</system.net>

Dort fügt man den Tag:

<servicePointManager expect100Continue="false" />

innerhalb des „settings“ Tag hinzu. Nach einem Neustart des Visual Studios, sollte auch die „Online Gallery“ wieder funktionieren.