-
Notifications
You must be signed in to change notification settings - Fork 18
raspberry pi
🇬🇧 This article is also available in English
…oder einem anderen Rechner mit Debian Stretch oder Ubuntu 18.04 LTS (bionic). Für sonstige Setups gibt es die allgemeine Installationsanweisung.
🔧 Auf dem Router:
- Dem Raspberry Pi eine (interne) fixe Adresse zuweisen
- Ports 80, 443, 5222, 5223, 5269 und 7777 vom Router auf den Raspberry Pi weiterleiten
- DynDNS-Provider aktivieren (bei dynamischer IP-Adresse)
- Wenn möglich zusätzliche DNS-Einträge dafür aktivieren.
Auch ohne diese ist Text- und Videochat 1:1 möglich; Einschränkungen existieren bei:
- Gruppenchats: Sind nur zwischen den lokalen Nutzern möglich; Mitglieder aus der Föderation können nicht teilnehmen.
- Auf XMPP aufbauende soziale Netzwerkfunktionen wie sie z.B. von Movim zur Verfügung gestellet werden, können nicht genutzt werden (die Chatfunktionen von Movim sind davon nicht betroffen).
🔧 Auf dem Raspberry Pi (oder einem sonstigen Rechner):
- Raspbian Stretch installieren.
- Optional: Grössere externe Platte anhängen und in
/var/www/nextcloud/data
einbinden
📢 In allen folgenden Texten soll das gross geschriebene SERVERNAME
durch den beim DynDNS-Provider registrierten Servernamen ersetzt werden.
🔧 Wenn du ssh
noch nicht aktiviert hast, dann nutze bitte raspi-config
um es zu aktivieren
🔧 Login mit ssh
aus einem Terminalfenster (oder auf Windows: putty
)
- Username: "pi"
- Passwort: "raspberry"
🔧 Solltest du es noch nicht gemacht haben ändere dein Passwort (passwd
), bevor jemand anders die Kontrolle über das Gerät übernimmt
🔧 Die folgenden Tätigkeiten als Superuser ausführen: sudo -s
🔧 Softwarepakete installieren (Apache+PHP, Let's Encrypt/CertBot, ejabberd und git)
apt update && apt upgrade
apt install dirmngr apt-transport-https
echo deb http://http.debian.net/debian stretch-backports main > /etc/apt/sources.list.d/backports.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
echo deb https://dl.jsxc.org stable main > /etc/apt/sources.list.d/jsxc.list
wget -qO - https://dl.jsxc.org/archive.key | apt-key add -
apt update
apt install -t stretch-backports ejabberd
apt install apache2 libapache2-mod-php php-gd php-json php-sqlite3 php-curl php-mbstring php-intl php-imagick php-xml php-zip
apt install python-certbot-apache xcauth python3-bsddb3 python3-systemd
🔧 Automatische Sicherheitsupdates aktivieren: apt install unattended-upgrades
🔧 Download und Auspacken von Nextcloud:
cd /var/www
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar xfj latest.tar.bz2
chown -R www-data:www-data nextcloud
rm latest.tar.bz2
🔧 Diesen Inhalt in /etc/apache2/sites-available/000-default.conf
kopieren
(angepasst aus der Nextcloud-Admin-Doku):
<VirtualHost *:80>
ServerName SERVERNAME
DocumentRoot /var/www/nextcloud
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass /http-bind/ http://localhost:5280/http-bind/
ProxyPassReverse /http-bind/ http://localhost:5280/http-bind/
ProxyPreserveHost On
</VirtualHost>
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
🔧 Diesen Inhalt in /etc/apache2/sites-available/userdata.conf
kopieren:
<VirtualHost *:80>
ServerName userdata.SERVERNAME
# Mostly to satisfy certbot
ServerAlias conference.SERVERNAME pubsub.SERVERNAME
# This DocumentRoot is irrelevant, but match ejabberd.conf anyway
DocumentRoot /var/www/userdata
ErrorLog ${APACHE_LOG_DIR}/userdata_error.log
CustomLog ${APACHE_LOG_DIR}/userdata_access.log combined
ProxyPass / http://localhost:5288/
ProxyPassReverse / http://localhost:5288/
ProxyPreserveHost On
</VirtualHost>
🔧 Die Konfiguration fertigstellen:
mkdir --mode=660 /var/www/userdata
chown ejabberd:ejabberd /var/www/userdata
a2enmod headers env dir mime proxy proxy_http
a2ensite userdata
🔧 HTTPS-Verschlüsselung (und Zertifikatserneuerung) aktivieren:
(wenn die zusätzlichen DNS-Einträge nicht gemacht wurden, dann lautet certbot
-Zeile stattdessen certbot run --authenticator standalone --installer apache --redirect --uir --hsts --staple-ocsp -d $S
)
S=SERVERNAME
apache2ctl stop
certbot run --authenticator standalone --installer apache --redirect --uir --hsts --staple-ocsp -d $S -d userdata.$S -d conference.$S -d pubsub.$S
chgrp -R ssl-cert /etc/letsencrypt/{archive,live}
chmod -R g+rX /etc/letsencrypt/{archive,live}
apache2ctl start
🔧 Mit dem Webbrowser auf den Hostnamen verbinden und Nextcloud konfigurieren (sqlite
als Datenbank nutzen; kann später jederzeit geändert werden) und die JSXC
-App (JavaScript XMPP Client in social) installieren.
🔧 (Mindestens) zwei Benutzer anlegen.
a
…z
), Ziffern (0
…9
) oder dem Bindestrich (-
) bestehen. Vermeide insbesondere Leereichen und das @
.
🔧 Beide Benutzer in eine Gruppe geben (z.B. 'Vorreiter').
Zwei User anmelden und Nachrichten schicken bzw. Videochat starten.
Dazu am besten zwei verschiedene Rechner verwenden (später notwendig zum Test von Videochat). Textnachrichten können auch ausgetauscht werden zwischen zwei unterschiedlichen Browsern (z.B. Firefox und Chrome oder zwischen verschiedenen Containern im selben Browser).
😢 Geschlossenes System: Nur innerhalb von Nextcloud, funktioniert nicht zwischen verschiedenen Servern (Instanzen).
🔧 Nextcloud
→Einstellungen
→JavaScript XMPP Client
: Managed Chat aktivieren
Zwischen zwei Nextcloud/JSXC-Instanzen chatten (Text und/oder Videochat). Z.B. zwischen [email protected]
und [email protected]
(:warning: JSXC-Domains für Nutzer, die den Managed Server benutzen!)
📌 Die Anweisungen in diesem Kapitel können übersprungen werden, wenn kein anderer User mit Nextcloud+JSXC+XMPP verfügbar ist. Lesen des Kapitels reicht, um die Motivation für das nächste Kapitel zu kennen.
Zwischen zwei Nextcloud/JSXC-Usern Dateien/Verzeichnisse teilen. Z.B. zwischen user1@SERVERNAME
und user2@ANDERER-SERVERNAME
😢 Kein einheitlicher Domainname, da Server unter unterschiedlichem Management; Chatverkehr geht über "fremden" Server (welcher auf jsxc.ch
endet)
Dieses Setup ergibt einen XMPP-Server mit 100% Kompatibilität in der Conversations Compliance Chart.
🔧 /etc/ejabberd/ejabberd.yml
mit dem Inhalt der Beispieldatei /etc/ejabberd/ejabberd.yml-xcauth-example
füllen und SERVERNAME
wie üblich ersetzen.
🔧 (Zu einem späteren Zeitpunkt willst du vielleicht loglevel
(weniger Output mit 3) und acl
→admin
→user
(die Liste derer, welche administrative Kommandos versenden dürfen) anpassen.)
🔧 Passe /etc/xcauth.conf
so an, dass url
(API URL) und secret
(Secure API token) den Werten aus deiner Nextcloud entsprechen. Diese erhältst du wie folgt:)
Als Nextcloud-Administrator navigierst du im Browser zu Nextcloud→Settings→Administration→JavaScript XMPP Client und setzt den Server type auf External. Weiter unten auf der Seite siehst du dann API URL und Secure API token. Stelle unbedingt sicher, dass das Secure API token nict in falsche Hände fällt. Wer es kennt, kann dem XMPP-Server jeden beliebigen Nutzer vorgaukeln.
🔧 Aktiviere (d.h. lösche das führende #
) der Zeile ejabberdctl=/usr/sbin/xcejabberdctl
in /etc/xcauth.conf
um die automatische Pflege der Shared Roster Groups zu aktivieren. Als Ergebnis sieht jeder Nextcloud-User alle anderen Mitglieder seiner Gruppen im Roster und darf auch deren Präsenzstatus sehen.
🔧 Danach führe folgende Kommandi aus:
chown -R xcauth:xcauth /etc/xcauth.conf /var/{lib,log}/xcauth
chmod 640 /etc/xcauth.conf
xcrestart
adduser ejabberd ssl-cert
openssl dhparam -out /etc/ejabberd/dhparams.pem 2048
Das openssl dhparam
-Kommando kann auf einem Raspberry Pi auch über ein halbe Stunde dauern. Wem das zu lange ist, kann /etc/ejabberd/dhparams.pem
auch auf einem schnelleren Rechner generieren oder zur Not auf /etc/ejabberd/dhparams.pem-xcauth-example
zurückgreifen.
🔧 Weiter geht es hier:
service ejabberd restart
🔧 Jetzt in den Nextcloud-JSXC-Einstellungen noch folgendes ändern:
- Sever type: "Externer Server" (wenn nicht schon so eingestellt)
- XMPP-Domain: Trage hier dein DynDNS Namen (SERVERNAME) ein
- BOSH-URL: Auf
https://SERVERNAMEN/http-bind/
ändern - External Services: Löschen, dafür
userdata.SERVERNAME
Der Rest ist von der Nutzung mit dem Managed Server schon richtig gesetzt. -
‼️ Einstellungen speichern‼️ (ganz unten)
😢 Für Videochat ist ein STUN-, besser TURN-Server notwendig, der zwischen Nutzern hinter NAT vermittelt. Der lässt sich aber nicht einfach hinter einer dynamischen IP-Adresse aufsetzen. Deshalb bleibt der auf turn.jsxc.ch
gesetzt.
Jetzt heissen die User user1@SERVERNAME
, sowohl für XMPP als auch für Nextcloud. Jetzt fehlen nur noch die Mailadressen…
- Nextcloud: Files
- Nextcloud: Kontakte, Kalender
- DAVdroid (Android)
- Nativ, in den Einstellungen (iOS)
- Thunderbird mit Add-Ons
- Evolution
- Alle Software mit CalDAV- bzw. CardDAV-Unterstützung
- XMPP:
- Conversations (Android; günstig im Store, gratis in F-Droid)
- ChatSecure (iOS)
- Dino (Linux) (bald MacOS X und Windows)
- Monal (iOS, MacOS X)
- Gajim (Linux, Windows)
😎 Den eigenen Server geniessen!
Dieses How-To basiert unter Anderem auf folgenden Informationen:
- Diverse JSXC-Dokumentation, insbesondere diesem Wiki
- ejabberd-Konfigurationsinformation
- Installationsanweisungen für Nextcloud 13 unter Linux