Anpassung

This commit is contained in:
2026-03-01 11:04:57 +00:00
parent 69800fb2cc
commit 8c8a23c65f
5 changed files with 239 additions and 21 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
# Docker
.env
data_*

111
README.md Normal file
View File

@@ -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).
---

View File

@@ -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

49
example.env Normal file
View File

@@ -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

52
init-nextcloud.sh Normal file
View File

@@ -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 "----------------------------------------------------"