From 8c8a23c65f8651064db014098891b5b3931f7153 Mon Sep 17 00:00:00 2001 From: braniz Date: Sun, 1 Mar 2026 11:04:57 +0000 Subject: [PATCH] Anpassung --- .gitignore | 1 + README.md | 111 ++++++++++++++++++++++++++++++++++++++++++++++ compose.yml | 47 +++++++++++--------- example.env | 49 ++++++++++++++++++++ init-nextcloud.sh | 52 ++++++++++++++++++++++ 5 files changed, 239 insertions(+), 21 deletions(-) create mode 100644 README.md create mode 100644 example.env create mode 100644 init-nextcloud.sh diff --git a/.gitignore b/.gitignore index aeffcc1..0ebfe6c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Docker +.env data_* diff --git a/README.md b/README.md new file mode 100644 index 0000000..5baa038 --- /dev/null +++ b/README.md @@ -0,0 +1,111 @@ +# ☁️ Nextcloud Docker-Setup (LXC/Ubuntu) + +Dieses Repository enthält ein vollständig optimiertes Docker-Setup für **Nextcloud Hub 9**. Es beinhaltet eine MariaDB-Datenbank, Redis für Caching, einen integrierten Cron-Container und den Nginx Proxy Manager für SSL/Zertifikatsverwaltung. + +## 🚀 Features + +* **Performance:** Redis für File-Locking und APCu für lokales Caching. +* **Sicherheit:** Automatische Konfiguration von `trusted_domains` und `trusted_proxies`. +* **Apps:** Automatische Installation von Must-Have Apps (Calendar, Contacts, Deck, etc.). +* **Automatisierung:** `init-nextcloud.sh` für die schlüsselfertige Ersteinrichtung. +* **Mail:** Vorkonfigurierter SMTP-Versand über Umgebungsvariablen. + +--- + +## 🛠️ Installation + +### 1. Vorbereitung + +Klone das Repository oder erstelle das Verzeichnis: + +```bash +mkdir -p /srv/docker/nextcloud && cd /srv/docker/nextcloud + +``` + +### 2. Konfiguration + +Erstelle eine `.env` Datei basierend auf der Vorlage: + +```bash +cp example.env .env +nano .env + +``` + +> **Wichtig:** Passe dort Passwörter, die `NEXTCLOUD_IP` und deine SMTP-Daten an. + +### 3. Ersteinrichtung (Setup-Skript) + +Das Skript fährt die Container hoch, wartet auf die Datenbank und führt alle Optimierungen (Indizes, Apps, Cron-Modus) automatisch aus: + +```bash +chmod +x init-nextcloud.sh +./init-nextcloud.sh + +``` + +--- + +## 📂 Struktur & Verzeichnisse + +Die Daten werden lokal im Projektverzeichnis gespeichert, um Backups zu erleichtern: + +* `data_nextcloud/`: Alle Web-Dateien und Benutzerdaten der Cloud. +* `data_db/`: Die MariaDB-Datenbankdateien. +* `data_npm_data/`: Konfiguration des Nginx Proxy Managers. +* `data_npm_letsencrypt/`: SSL-Zertifikate. + +--- + +## ⚙️ Wichtige Befehle + +**Container verwalten:** + +```bash +docker compose up -d # Starten (Hintergrund) +docker compose down # Stoppen +docker compose logs -f # Logs in Echtzeit einsehen + +``` + +**OCC-Befehle manuell ausführen:** + +```bash +docker compose exec --user www-data app php occ [befehl] + +``` + +--- + +## ⏰ Hintergrundaufgaben (Cron) + +Nextcloud ist im Setup auf den **Cron-Modus** eingestellt. Ein dedizierter Container übernimmt die Aufgaben automatisch. + +Um sicherzugehen, dass das Host-System den Cron triggert (optionaler Best-Practice), kann ein Crontab-Eintrag erstellt werden: + +```bash +# Öffne Crontab +crontab -e + +# Füge diese Zeile hinzu (alle 5 Min): +*/5 * * * * docker compose -f /srv/docker/nextcloud/compose.yml exec --user www-data app php -f /var/www/html/cron.php + +``` + +--- + +## 📧 E-Mail Konfiguration + +Die Mail-Einstellungen werden direkt über die `.env` gesteuert. Nach dem ersten Login unter: +`Einstellungen -> Grundeinstellungen -> E-Mail-Server` prüfen und eine Test-Mail senden. + +--- + +## 🛠 Fehlerbehebung + +* **Header-Warnung (Trusted Proxies):** Diese wird durch die Variablen `TRUSTED_PROXIES_RANGE_1/2` in der `.env` gelöst. +* **Secure Connection Error:** Wenn `OVERWRITEPROTOCOL=https` gesetzt ist, muss der Zugriff zwingend über den Nginx Proxy Manager mit SSL erfolgen (nicht direkt über IP:8080). + +--- + diff --git a/compose.yml b/compose.yml index 76a51f7..f82bc25 100644 --- a/compose.yml +++ b/compose.yml @@ -1,9 +1,3 @@ -volumes: - nextcloud: - db_data: - npm_data: - npm_letsencrypt: - services: # --- DATENBANK --- db: @@ -13,10 +7,10 @@ services: volumes: - ./data_db:/var/lib/mysql environment: - - MYSQL_ROOT_PASSWORD=sqlroot - - MYSQL_PASSWORD=nc_pass - - MYSQL_DATABASE=nextcloud - - MYSQL_USER=nextcloud + - MYSQL_ROOT_PASSWORD=${SQL_ROOT_PASSWORD} + - MYSQL_PASSWORD=${SQL_PASSWORD} + - MYSQL_DATABASE=${SQL_DATABASE} + - MYSQL_USER=${SQL_USER} # --- CACHE & LOCKING --- redis: @@ -35,21 +29,32 @@ services: volumes: - ./data_nextcloud:/var/www/html environment: - - MYSQL_PASSWORD=nc_pass - - MYSQL_DATABASE=nextcloud - - MYSQL_USER=nextcloud + - MYSQL_PASSWORD=${SQL_PASSWORD} + - MYSQL_DATABASE=${SQL_DATABASE} + - MYSQL_USER=${SQL_USER} - MYSQL_HOST=db - REDIS_HOST=redis - NEXTCLOUD_UPDATE=1 - # Hier deine tatsächliche LXC-IP eintragen: - - NEXTCLOUD_TRUSTED_DOMAINS=10.174.243.69 localhost - - TRUSTED_PROXIES=nginx-proxy-manager - # Auf http lassen für lokale Tests ohne SSL-Zertifikat: - - OVERWRITEPROTOCOL=http - - NC_serverid=meine-tolle-id-123 - - NC_default_phone_region=DE + # Nutzt Variablen aus der .env + - NEXTCLOUD_TRUSTED_DOMAINS=localhost ${NEXTCLOUD_IP} + - TRUSTED_PROXIES=${TRUSTED_PROXIES_RANGE_1} ${TRUSTED_PROXIES_RANGE_2} + - OVERWRITEPROTOCOL=${OVERWRITEPROTOCOL} + - NC_serverid=${NC_SERVERID} + - NC_default_phone_region=${NC_DEFAULT_PHONE_REGION} - PHP_MEMORY_LIMIT=512M - PHP_UPLOAD_LIMIT=10G + - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER} + - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD} + - NEXTCLOUD_DATA_DIR=/var/www/html/data + # E-Mail (SMTP) Konfiguration + - MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS} + - MAIL_DOMAIN=${MAIL_DOMAIN} + - SMTP_HOST=${SMTP_HOST} + - SMTP_PORT=${SMTP_PORT} + - SMTP_NAME=${SMTP_NAME} + - SMTP_PASSWORD=${SMTP_PASSWORD} + - SMTP_SECURE=${SMTP_SECURE} + - SMTP_AUTHTYPE=${SMTP_AUTHTYPE} # --- HINTERGRUND-AUFGABEN (CRON) --- cron: @@ -62,7 +67,7 @@ services: - db - redis - # --- NGINX PROXY MANAGER (GUI) --- + # --- NGINX PROXY MANAGER --- nginx-proxy-manager: image: 'jc21/nginx-proxy-manager:latest' restart: always diff --git a/example.env b/example.env new file mode 100644 index 0000000..71881eb --- /dev/null +++ b/example.env @@ -0,0 +1,49 @@ +# ============================================================================== +# NEXTCLOUD CONFIGURATION - EXAMPLE .ENV +# ============================================================================== + +# --- DATENBANK (MariaDB) --- +# Passwörter für die Datenbank-Erstellung +SQL_ROOT_PASSWORD=super_geheimes_root_passwort +SQL_PASSWORD=nc_datenbank_passwort_123 +SQL_DATABASE=nextcloud +SQL_USER=nextcloud + +# --- NEXTCLOUD ADMIN ACCOUNT --- +# Diese Zugangsdaten werden bei der Erstinstallation erstellt +NEXTCLOUD_ADMIN_USER=admin +NEXTCLOUD_ADMIN_PASSWORD=dein_starkes_admin_passwort + +# --- NETZWERK & ERREICHBARKEIT --- +# Die IP deines Docker-Hosts/LXC (Wichtig für Trusted Domains) +NEXTCLOUD_IP=10.174.243.69 + +# Docker-Netzwerkbereiche für den Proxy (Standardwerte meist ausreichend) +TRUSTED_PROXIES_RANGE_1=172.18.0.0/16 +TRUSTED_PROXIES_RANGE_2=172.16.0.0/12 + +# Protokoll: Nutze 'http' für lokale Tests, 'https' sobald NPM mit SSL läuft +OVERWRITEPROTOCOL=http + +# --- NEXTCLOUD SPEZIFISCH --- +# Eine eindeutige ID für deine Instanz (beliebiger String) +NC_SERVERID=nc_instanz_forchheim_01 +# Telefon-Ländercode (wird für die Formatierung von Nummern benötigt) +NC_DEFAULT_PHONE_REGION=DE + +# --- E-MAIL (SMTP) KONFIGURATION --- +# Absender: nextcloud@deine-domain.de +MAIL_FROM_ADDRESS=nextcloud +MAIL_DOMAIN=deine-domain.de + +# Server-Daten deines Mail-Providers +SMTP_HOST=smtp.dein-anbieter.de +SMTP_PORT=587 +SMTP_NAME=deine-mail@deine-domain.de +SMTP_PASSWORD=dein_mail_passwort +SMTP_SECURE=tls +SMTP_AUTHTYPE=LOGIN + +# --- PERFORMANCE --- +PHP_MEMORY_LIMIT=512M +PHP_UPLOAD_LIMIT=10G diff --git a/init-nextcloud.sh b/init-nextcloud.sh new file mode 100644 index 0000000..1f06d62 --- /dev/null +++ b/init-nextcloud.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# --- VARIABLEN (Optional: Später in .env auslagern) --- +NEXTCLOUD_IP="10.174.243.69" + +# --- DOCKER HOCHFAHREN --- +echo "Starte Docker-Container..." +docker compose up -d + +echo "Warte auf die Initialisierung von Nextcloud..." +# Warteschleife: Prüft, ob Nextcloud fertig installiert ist +until docker compose exec --user www-data app php occ status 2>/dev/null | grep -q "installed: true"; do + echo -n "." + sleep 5 +done +echo -e "\nNextcloud ist bereit. Starte Konfiguration..." + +# --- DATENBANK-OPTIMIERUNGEN --- +echo "Optimiere Datenbank..." +docker compose exec --user www-data app php occ db:add-missing-indices +docker compose exec --user www-data app php occ db:convert-filecache-bigint --no-interaction +docker compose exec --user www-data app php occ maintenance:repair --include-expensive + +# --- WARTUNGSFENSTER --- +# Legt fest, dass schwere Aufgaben (wie App-Updates) um 01:00 Uhr nachts laufen +docker compose exec --user www-data app php occ config:system:set maintenance_window_start --value=1 --type=integer + +# --- APPS INSTALLIEREN --- +echo "Installiere Must-Have Apps..." +apps=(calendar contacts notes deck circles groupfolders previewgenerator tasks) + +for app in "${apps[@]}"; do + echo "Installiere App: $app..." + docker compose exec --user www-data app php occ app:install "$app" --no-interaction +done + +# --- VORSCHAU-OPTIMIERUNG --- +echo "Konfiguriere Vorschaubilder (Performance)..." +docker compose exec --user www-data app php occ config:system:set preview_max_x --value 1024 +docker compose exec --user www-data app php occ config:system:set preview_max_y --value 1024 + +# --- HINTERGRUNDAUFGABEN (CRON) --- +echo "Stelle Hintergrundaufgaben auf Cron um..." +docker compose exec --user www-data app php occ background:cron + +echo "Führe ersten Cron-Job manuell aus..." +docker compose exec --user www-data cron php -f /var/www/html/cron.php + +echo "----------------------------------------------------" +echo "Setup erfolgreich abgeschlossen!" +echo "Nextcloud ist unter http://${NEXTCLOUD_IP}:8080 erreichbar." +echo "----------------------------------------------------"