Sie müssen sich anmelden, um diese Aktion benutzen zu können: subscribe.

Nachricht löschen

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.

<user>@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 80GB zur Verfügung zu stehen. An langsamen Speicher sollte es 200GB und 400GB jeweils geben.

Arbeitsspeicher:

Hierbei wird 10240MB 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 <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Jetzt installieren wir Docker:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Nachdem wir das installieren haben, verifizieren wir einmal das Docker läuft.

sudo systemctl status docker

Installation Nginx

Zum installieren von Nginx geben wir im Terminal folgendes ein:

sudo apt update &&
sudo apt install nginx

Dann kontrollieren wir ob der Nginx.Service läuft:

systemctl status nginx.service

Es sollte "enabled" und "active (running)" angezeigt werden.

Jetzt fügen wir den "Server-Block" hinzu, bitte erstelle eine neue Datei

nano /etc/nginx/sites-available/nextcloud

Dort fügen wir den folgenden Textblock ein.

WICHTIG es muss [domain-name] durch die eigene Domain ersetzt werden (Es gibt 4x [domain-name].).

Zudem müssen die Zertifikate erstellt und abgespeichert sein.

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 80;
#    listen [::]:80;            # comment to disable IPv6

    server_name cloud.[domain-name].de;

    # Provide /.well-known/acme-challenge location
    include snippets/acme-tiny.conf;

    # soft enforce https

   location / {
        rewrite     ^.*$   https://$host$request_uri? permanent;
   }
}

server {

    listen 443 ssl http2;      # for nginx versions below v1.25.1
#    listen [::]:443 ssl http2; # for nginx versions below v1.25.1 - comment to disable IPv6

    # listen 443 ssl;      # for nginx v1.25.1+
    # listen [::]:443 ssl; # for nginx v1.25.1+ - keep comment to disable IPv6
    # http2 on;            # uncomment to enable HTTP/2 - supported on nginx v1.25.1+

    # listen 443 quic reuseport;       # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+ - please remove "reuseport" if there is already another quic listener on port 443 with enabled reuseport
    # listen [::]:443 quic reuseport;  # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+ - please remove "reuseport" if there is already another quic listener on port 443 with enabled reuseport - keep comment to disable IPv6
    # http3 on;                                 # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+
    # quic_gso on;                              # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+
    # quic_retry on;                            # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+
    # quic_bpf on;                              # improves  HTTP/3 / QUIC - supported on nginx v1.25.0+, if nginx runs as a docker container you need to give it privileged permission to use this option
    # add_header Alt-Svc 'h3=":443"; ma=86400'; # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+

    proxy_buffering off;
    proxy_request_buffering off;

    client_max_body_size 0;
    client_body_buffer_size 512k;
    # http3_stream_buffer_size 512k; # uncomment to enable HTTP/3 / QUIC - supported on nginx v1.25.0+

    # The default NEXTCLOUD_MAX_TIME value is 3600 seconds.
    # By setting it 10 seconds higher than that, we make sure that always Nextcloud times out and not NGINX.
    # If you increased NEXTCLOUD_MAX_TIME, increase the timeout below accordingly.
    proxy_read_timeout 3610s;

    # Provide /.well-known/acme-challenge location
    include snippets/acme-tiny.conf;

    server_name cloud.[domain-name].de;

    location / {
        proxy_pass http://127.0.0.1:35460$request_uri; # Adjust to match APACHE_PORT and APACHE_IP_BINDING. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#adapting-the-sample-web-server-configurations-below

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header Early-Data $ssl_early_data;

        # Websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }

    # If running nginx on a subdomain (eg. nextcloud.example.com) of a domain that already has an wildcard ssl certificate from certbot on this machine,
    # the <your-nc-domain> 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.

#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=<example>,dc=<org>,dc=<de>

ein.

Wir klicken auf Benutzer und setzen bei LDAP-Anfrage bearbeiten einen Haken und geben in der Textbox darunter

(&(objectClass=<UserAccount>)(!(objectClass=<UserTemplate>)))

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=<UserAccount>)(!(objectClass=<UserTemplate>)))

ein.

Jetzt gehen wir auf Gruppen und machen wieder einen Haken bei LDAP-Anfrage bearbeiten und geben in der Textbox darunter

objectClass=<UserGroup>

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=<Group1>,dc=<example>,dc=<org>,dc=<de>;ou=<Group2>,dc=<example>,dc=<org>,dc=<de>

weiter unten geben wir weiter beiFeld für den Anzeigenamen der Gruppe "cn" ein.

Basis-Gruppenbaum geben wir folgendes ein:

ou=<Group1>,dc=<example>,dc=<org>,dc=<de>;ou=<Group2>,dc=<example>,dc=<org>,dc=<de>

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;
}

IT-Zukunft Schule: Technik/Installation/VM/ContentServer (zuletzt geändert am 2026-09-03 19:18:03 durch GunnarMeyborg)