== Installation ITZkS Content-Server == <> /!\ Diese Seite befindet sich im Aufbau ==== Boot-Verzögerung bei Stromausfall ==== Debian Edu System setzen beim Systemstart einen erreichbaren Hauptserver voraus. Für Debian Edu Server-VMs ergibt sich die Anforderung einer Boot-Verzögerung. Anstelle aufwendiger VM-Host Skripte wird eine Startverzögerung durch ein hohes Timeout im Bootloader GRUB erwirkt.{{{ @contentserver:/# diff -u /etc/default/grub.orig /etc/default/grub --- /etc/default/grub.orig 2012-08-31 16:06:51.000000000 +0200 +++ /etc/default/grub 2012-08-31 16:06:59.000000000 +0200 @@ -2,7 +2,7 @@ # /boot/grub/grub.cfg. GRUB_DEFAULT=0 -GRUB_TIMEOUT=5 +GRUB_TIMEOUT=600 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="" }}} Danach muss die Konfigurationsänderung übernommen werden:{{{ $ sudo update-grub }}} == Content Server - Nextcloud AIO == ==== Erstellen der VM ==== Das Grundgerüst besteht aus einem Debian 13 (Trixie) Betriebsystem. Gerne OHNE UI um Perfomance zu sparen. Für einen Erstellung einer VM für ca. '''50''' User wird empfohlen: Speicherplatz: Hierbei wird langsamer und schneller Speicher eingebunden An schnellem Speicher sollten '''80'''GB zur Verfügung zu stehen. An langsamen Speicher sollte es '''200'''GB und '''400'''GB jeweils geben. Arbeitsspeicher: Hierbei wird '''10240'''MB empfohlen. CPU: Hier werden '''8''' Kerne empfohlen. Der Server sollte im Netzwerk von dem Tjener bereit stehen. ==== Installation Docker ==== Um Docker zu installieren müssen sie die folgenden Schritte beachten: Ersteinmal muss der offizielle GPG key hinzugefügt werden, danach wird wird da Repository den Apt-sources zugefügt. {{{ # Add Docker's official GPG key: sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: sudo tee /etc/apt/sources.list.d/docker.sources < in the below lines should be replaced with just the domain (eg. example.com), not the subdomain. # In this case the subdomain should already be secured without additional actions ssl_certificate /etc/ssl/certs/cloud_[domain-name]_de.fullchain.crt; ssl_certificate_key /etc/ssl/private/cloud_[domain-name]_de.key; ssl_dhparam /etc/dhparam; # curl -L https://ssl-config.mozilla.org/ffdhe2048.txt -o /etc/dhparam ssl_early_data on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ecdh_curve x25519:x448:secp521r1:secp384r1:secp256r1; ssl_prefer_server_ciphers on; ssl_conf_command Options PrioritizeChaCha; ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256; }}} Danach starten wir den Service neu: {{{ systemctl restart nginx.service }}} Jetzt sollte alles soweit vorbereitet sein. ==== Installation Nextcloud-AIO ==== Zum Installieren nutzen wir https://github.com/nextcloud/all-in-one Dies Installieren wir über ein Bash Script welches wie folgend aussieht. {{{ #!/bin/bash #Auf der gefundenen IP-Adresse soll der Server dann erreichbar sein server_ipadress=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+') #Variable zum editieren der config.php Datei um Beispiel Dateien bei neuen Usern zu verhindern datei="/var/lib/docker/volumes/nextcloud_aio_nextcloud/_data/config/config.php" #Variable welche das Wort enthält welches vor dem neu Eingefügten Text steht suchzeile="'installed'" #Diese Zeile verhindert das Beispiel Dateien bei neuen Usern erstellt werden. einfuegtext="'skeletondirectory' => ''," if ! command -v docker &> /dev/null; then echo "Docker nicht installiert, installiere Docker." sudo apt-get update -y sudo apt-get install -y docker.io docker-compose else echo "Docker bereits installiert" fi #weitere Einstellungen die man vornehmen kann, diese benoetigen wir aber nicht #--dns=1.1.1.1 \ #--dns=8.8.8.8 \ #-e AIO_CONTAINER_REGISTRY="docker.io" \ #-e BORG_RETENTION_POLICY="--keep-within=7d --keep-weekly=4 --keep-monthly=6" \ #-e AIO_DISABLE_BACKUP_SECTION=false \ docker run \ --detach \ --init \ --sig-proxy=false \ --name nextcloud-aio-mastercontainer \ --restart always \ --publish 8080:8080 \ --env APACHE_PORT=35460 \ -e SKIP_DOMAIN_VALIDATION=true \ --env NEXTCLOUD_DATADIR="/srv/nextcloud_data/" \ --env NEXTCLOUD_MOUNT="/mnt/" \ --env NEXTCLOUD_MEMORY_LIMIT=2048M \ --env NEXTCLOUD_UPLOAD_LIMIT=5G \ --env NEXTCLOUD_MAX_TIME=3600 \ --env COMPASS_MAX_DAYS=30 \ --env NEXTCLOUD_KEEP_DISABLED_APPS=true \ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ nextcloud/all-in-one:latest echo "Öffne jetzt im Browser: https://${server_ipadress}:8080 und stelle diesen weiter ein" echo "danach werde weitere Anpassungen durchgeführt" #wartet auf nextcloud_aio_nextcloud container um direkt die Beispiel Dateien auszustellen container_name="nextcloud-aio-nextcloud" while [ "$(sudo docker inspect -f '{{.State.Running}}' $container_name 2>/dev/null)" != "true" ]; do echo -n "." sleep 10 done while [ ! -s "$datei" ]; do echo -n "_" sleep 2 done sleep 10 echo "${container_name} ist gestartet, änderung in der config werden vorgenomen:" #Gibt es die Config Datei? Verifiziert dies if [ ! -f "$datei" ]; then echo "fehler, die config datei wurde nicht gefunden" exit 1 fi #Gibt es die gesuchte Zeile? Verifiziert dies if ! grep -q "$suchzeile" "$datei"; then echo "fehler, die suchzeile wurde nicht in der config gefunden" exit 1 fi #Wenn die Datei, sowie die Zeile gefunden worden ist, wird die Zeile eingefügt, welche das erstellen der Beispiel Dateien verhindert sed -i "/'installed' => true/a \ $einfuegtext" "$datei" echo "ist eingefügt" }}} Jetzt sollte im Terminal stehen bei welcher IP-Adresse Sie sich einloggen können, um weitere Einstellungen vorzunehmen. Bitte beachte das das Skript immernoch läuft, sobald die erste Einstellung abgeschlossen ist werden weitere Einstellungen von diesem Skript an deiner Nextcloud instanz vorgenommen. ==== Installation High perfomance Backup ==== Das ist ein einfaches Setup für Nextcloud Hochleistungsbackend, Signaling & Collabora Office für Debian 13. Dies wird auf einem externen Server z.B. bei Hetzner installiert um Datensicherheit bei den Backups zu gewährleisten. Collabora Office wird hier mit installiert um die Ressourcen zu schonen und die Perfomance von Nextcloud zu verbessern. https://github.com/sunweaver/nextcloud-high-performance-backend-setup Nachdem das Installiert wurde, werden in dem Installation-Dialog wichtige Daten angezeigt. Wir müssen uns rauskopieren den STUN und TURN Server und deren secret-keys. Diese Daten werden benötigt um die Felder in ''Admin > Administrationseinstellungen > Talk'' zu füllen. ==== Installation Nextcloud Apps ==== Um Nextcloud so zu benutzen wie wir das wollen installieren wir weitere sog. App's um die Funktionen zu erweitern. Installiert werden diese unter den admin > Apps. Weitere Informationen finden wir weiter unten auf dieser Seite. Bitte installiere: LDAP user and group backend – User können sich mit den ldap benutzern anmelden External Storage Support – Externer Storage Big Blue Button integration – Meetings abhalten Custom CSS – Design anpassen ===== LDAP user and group backend ===== Hierfür müssen ersteinmal die Root-Zertifikate für Ldaps importiert werden. Hierzu müssen wir die Zertifikate auf unseren Nextcloud-aio-Nextcloud kopieren. Führe in dem Terminal von deinem Contentserver folgendes aus. Bitte Beachte das '''"/weg/zum/"''' und '''"das-zertifikat.crt"''' mit dem richtigen pfad/namen ausgetauscht wird. {{{ docker cp /weg/zum/das-zertifikat.crt nextcloud-aio-nextcloud:/var/www/html/das-zertifikat.crt }}} Danach verbinden wir uns mit der shell von dem Docker-Container: {{{ docker exec -it nextcloud-aio-nextcloud sh }}} Jetzt sollten wir mittels {{{ ls }}} das zuvor kopierte Zertifikat sehen können. Jetzt fügen wir das Zertifikat hinzu. Hier Bitte wieder beachten das '''"das-zertifikat.crt"''' mit dem richtigen Namen ausgetauscht wird {{{ ./occ security:certificates:import /var/www/html/das-zertifikat.crt }}} Das sollte ohne probleme Durchlaufen. Danach können wir mittels {{{ ./occ security:certificates }}} kontrollieren, ob das Zertifikat richtig importiert worden ist. Danach können wir mittels STRG + D das Terminal zum Docker-Container schließen. Jetzt müssen wir uns wieder mit dem Admin-Account bei Nextcloud einloggen und die LDAP-Einstellungen dort eingeben. Hierbei ist zu beachten das die genaue Einstellung der LDAP integration angepasst werden muss. Das hier Erklärte ist verfremdet. Wir gehen auf Admin > Administrationseinstellungen > LDAP/AD-Integration Wir landen auf der ersten Seite '''Server'''. Hier geben wir bei '''HOST''' {{{ ldaps://ldap.intern }}} und bei Base DN {{{ dc=,dc=,dc= }}} ein. Wir klicken auf '''Benutzer''' und setzen bei '''LDAP-Anfrage bearbeiten''' einen Haken und geben in der Textbox darunter {{{ (&(objectClass=)(!(objectClass=))) }}} ein. Danach gehen wir auf '''Anmelde-Attribute''' machen bei '''LDAP-/AD-Benutzername''' sowie bei '''LDAP-Anfrage bearbeiten''' einen Haken. Darunter finden wir wieder eine Textbox, dort geben wir {{{ (&(uid=%uid)(objectClass=)(!(objectClass=))) }}} ein. Jetzt gehen wir auf '''Gruppen''' und machen wieder einen Haken bei '''LDAP-Anfrage bearbeiten''' und geben in der Textbox darunter {{{ objectClass= }}} ein. Nun gehen wir auf '''Fortgeschritten''' und klappen die einzelnen Punkte an. '''Verbindungseinstellungen''' Lassen wir so wie es ist '''Ordnereinstellungen''' Dort geben wir bei '''Feld für den Anzeigenamen des Benutzers''' '''"cn"''' bei '''2. Benutzeranzeigename Feld''' '''"uid"'''. Zudem geben wir bei '''Basis-Benutzerbaum''' folgendes ein: {{{ ou=,dc=,dc=,dc=;ou=,dc=,dc=,dc= }}} weiter unten geben wir weiter bei'''Feld für den Anzeigenamen der Gruppe''' '''"cn"''' ein. '''Basis-Gruppenbaum''' geben wir folgendes ein: {{{ ou=,dc=,dc=,dc=;ou=,dc=,dc=,dc= }}} '''Spezielle Eigenschaften''' und '''Benutzerprofilattribute''' Dort lassen wir alles so. Jetzt gehen wir auf den nächsten Reiter '''Experte''' dort geben wir bei '''Attrbut für interne Benutzernamen''' '''"uid"''' bei '''UUID-Attribut für Benutzer''' '''"uid"''' und bei '''UUID-Attribut für Gruppen''' '''"cn"''' Jetzt müssen wir einmal nachschauen ob die Konfiguration aktiv ist, das machen wir unter dem Reiter '''Server''' direkt darunter. Dort ist ein Toggle-Button welcher aktiv und inaktiv gesetzt sein kann. Unter den Logs kann man schauen ob es fehler zu dieser konfiguration gibt- ===== External Storage Support – Externer Storage ===== Hierfür gaben wir den Usern einen Zettel mit. Mittels diesem konnten die User innerhalb von 30 sek. den externen Speicher selber einbinden. ===== Big Blue Button integration – Meetings abhalten ===== Hierbei wird ein schon laufende BBB Instanz benötigt. Nach dem hinzufügen unserer neuen BBB-App sollten wir nur noch unseren BBB-Endpoint und BBB-Secret eingeben müssen und Videoanrufe sollten ohne probleme laufen. Dies läuft aber erst seit der Version 2.9.3. In älteren Versionen funktionierte diese App nicht und es musste durch Nextcloud-Talk ersetzt werden. ===== Custom CSS – Desgin anpassen ===== Hier passend wir das Design für Nextcloud an, um die User-Erfahrungen zu verbessern. Im folgenden Block ist ein CSS-Design als Beispiel dabei, dieses ist für Nextcloud 32 ausgelegt und kann schwierigkeiten bei neueren, sowie bei älteren Versionen verursachen. Bei dieser Einstellung gibt es einen Hell-, sowie Dunkelmodus. Zudem werden sehr viel mehrere Icons und auch Toggle Knöpfe eingefärbt. {{{ /* ========================================================================== PRÄZISE FARBANPASSUNGEN FÜR HEADER-ICONS & TOGGLES (NATIV & FARBECHT) ========================================================================== */ /* 1. HELLER MODUS (STANDARD) */ :root { /* Globale Nextcloud-Variablen für das Design-Fundament */ --color-primary: #005a52 !important; --color-primary-element: #005a52 !important; /* Haupt-Textfarben im System */ --color-main-text: #005a52 !important; --color-text-main: #005a52 !important; --color-text-medium: #005a52 !important; --color-text-maxcontrast: #005a52 !important; /* Spezifische Variablen für Header-Menüs */ --color-primary-text: #005a52 !important; --header-menu-icon-color: #005a52 !important; /* Dezente Hover-Effekte basierend auf deiner Farbe */ --color-primary-hover: #00443e !important; --color-background-hover: rgba(0, 90, 82, 0.08) !important; } /* Erzwingt die native Füllfarbe für die drei spezifischen Header-SVGs (Lupe, Glocke, Kontakte) */ #header svg path[d^="M9.5,3A6.5,6.5"], #header svg path[d^="M 19,11.79 C 18.5"], #header svg path[d^="M20,0H4V2H20V0M4"] { fill: #005a52 !important; } /* ALLE App-Icons im oberen Header-Menü (Talk, Files, Dashboard etc.) auf Seegrün zwingen */ #appmenu li a, #appmenu li a * { /* Zwingt eingebettete SVGs zur richtigen Farbe */ fill: #005a52 !important; color: #005a52 !important; } /* Falls Nextcloud an dieser Stelle noch klassische Bild-Hintergründe nutzt: */ #appmenu li a img, #appmenu li a .icon, #appmenu li a [class*="icon"] { background-color: transparent !important; filter: invert(21%) sepia(87%) saturate(545%) hue-rotate(127deg) brightness(92%) contrast(102%) !important; } /* Text-Labels unter/neben den Icons */ .app-menu-entry__label, #appmenu li span { color: #005a52 !important; } /* ========================================================================== SWITCH-BUTTONS (TOGGLES) STEUERUNG ========================================================================== */ /* Standard-Zustand (Inaktiv / Aus): Seegrün beibehalten */ .checkbox-radio-switch__icon, ._iconToggleSwitch_WgcOx { --6bd152af: #005a52 !important; color: #005a52 !important; } .checkbox-radio-switch__icon svg path { fill: #005a52 !important; } /* Aktiver Zustand (Aktiv / Checked / Ein): Umschalten auf Ozeanblau */ .checkbox-content__icon--checked, .checkbox-content__icon--checked ._iconToggleSwitch_WgcOx, [class*="checked"] ._iconToggleSwitch_WgcOx { --6bd152af: #006b8d !important; color: #006b8d !important; } .checkbox-content__icon--checked svg path, [class*="checked"] svg path { fill: #006b8d !important; } /* ========================================================================== DUNKELMODUS (AUTOMATISCH BEI BROWSER-SIGNAL) ========================================================================== */ @media (prefers-color-scheme: dark) { :root { /* Deine exakte Wunschfarbe für den Darkmode */ --color-primary: #006b8d !important; --color-primary-element: #006b8d !important; /* Haupt-Textfarben im Darkmode */ --color-main-text: #006b8d !important; --color-text-main: #006b8d !important; --color-text-medium: #006b8d !important; --color-text-maxcontrast: #006b8d !important; --color-primary-text: #006b8d !important; --header-menu-icon-color: #006b8d !important; /* Hover-Effekte im Darkmode */ --color-primary-hover: #00546f !important; --color-background-hover: rgba(0, 107, 141, 0.15) !important; } /* Erzwingt die native Füllfarbe im Darkmode */ #header svg path[d^="M9.5,3A6.5,6.5"], #header svg path[d^="M 19,11.79 C 18.5"], #header svg path[d^="M20,0H4V2H20V0M4"] { fill: #006b8d !important; } /* Icons im Darkmode auf Ozeanblau zwingen */ #appmenu li a, #appmenu li a * { fill: #006b8d !important; color: #006b8d !important; } #appmenu li a img, #appmenu li a .icon, #appmenu li a [class*="icon"] { filter: invert(27%) sepia(88%) saturate(1075%) hue-rotate(156deg) brightness(88%) contrast(101%) !important; } .app-menu-entry__label, #appmenu li span { color: #006b8d !important; } /* Im System-Dunkelmodus laufen die Schalter standardmäßig im Blau */ .checkbox-radio-switch__icon, ._iconToggleSwitch_WgcOx { --6bd152af: #006b8d !important; } .checkbox-radio-switch__icon svg path { fill: #006b8d !important; } } /* 3. SCHUTZ-ANKER: Roter Punkt auf der Glocke und Avatare bleiben unberührt */ .notification__dot { fill: #db0606 !important; } .avatardiv, .avatardiv img, img[class*="avatar"], [id*="avatar"] { filter: none !important; background-color: transparent !important; } }}}