Files
Homelab--Bratonein-Kontroll…/Kapitel 7/Tutorial.md

5.5 KiB
Raw Blame History

🛠️ Kapitel 7 Nextcloud (Tutorial, Nginx)


Einleitung

Nextcloud ist das Herzstück deiner privaten Cloud. Hier landen Dateien, Fotos, Kalender und Kontakte ohne Google, ohne Microsoft. In diesem Kapitel installieren wir Nextcloud in einem LXC-Container unter Proxmox, setzen auf PostgreSQL als Datenbank, Nginx + PHP-FPM als Webserver und Redis als Cache. Die Benutzerdaten liegen auf einer separaten Festplatte für Performance, Übersicht und Datensicherheit.


Voraussetzungen

  • Proxmox Host mit 2 Platten (System + Datenplatte)
  • LXC mit Ubuntu 24.04, Nesting aktiviert
  • Nginx Proxy Manager für HTTPS-Zugriff
  • Eine Domain, die auf deinen Proxy zeigt
  • Container-Ressourcen: mind. 2 vCPU, 4 GB RAM
  • Grundwissen: Proxmox-GUI, SSH, Terminal

Vorbereitung

LXC-Container erstellen

In der Proxmox-GUI:

  • CT-Name: nextcloud
  • Template: Ubuntu 24.04 LTS
  • CPU: 2+, RAM: 48GB
  • Nesting aktivieren (unter „Optionen“)

Zweite Festplatte direkt einhängen

Beim Anlegen im Abschnitt „Disks“:

  • Mount Point: /mnt/hdd
  • Größe: z.B. 500 GB
  • Backup: deaktivieren

Nach dem Start:

ssh root@<IP-des-Containers>
ls -ld /mnt/hdd

→ Gibt es das Verzeichnis? Dann ist alles korrekt eingebunden.


Umsetzung

System aktualisieren & Pakete installieren

apt update && apt upgrade -y
apt install -y nginx php-fpm php-gd php-imagick php-intl php-mbstring php-xml \
php-zip php-curl php-bz2 php-gmp php-pgsql php-redis redis-server \
postgresql unzip curl

Projektstruktur anlegen

mkdir -p /srv/nextcloud/app
mkdir -p /mnt/hdd/nextcloud_data
chown -R www-data:www-data /mnt/hdd/nextcloud_data

Nextcloud herunterladen

cd /srv/nextcloud/app
curl -LO https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip && rm latest.zip
chown -R www-data:www-data nextcloud

PostgreSQL: Benutzer & Datenbank

🔸 WICHTIG: Wir nutzen nur su - postgres, daher ist keine Änderung an pg_hba.conf nötig!

su - postgres
psql

Dann in der PostgreSQL-Konsole:

CREATE DATABASE nextcloud;
CREATE USER nextcloud WITH PASSWORD 'DEIN_SICHERES_PASSWORT';
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\q

Zurück zur Shell:

exit

Test (optional):

psql -U nextcloud -h 127.0.0.1 -d nextcloud -W

Wenn du Zugriff bekommst → alles korrekt.


PHP-FPM: Version prüfen

ls /run/php/

→ z.B. php8.3-fpm.sock → merken


Nginx konfigurieren

nano /etc/nginx/sites-available/nextcloud.conf
server {
  listen 80;
  server_name _;

  root /srv/nextcloud/app/nextcloud;
  index index.php index.html;

  client_max_body_size 10G;

  location = /robots.txt { allow all; log_not_found off; access_log off; }
  location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; }

  location ~ \.php(?:$|/) {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;  # ggf. anpassen
    fastcgi_intercept_errors on;
    fastcgi_request_buffering off;
  }
}
ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

NPM: Proxy Host einrichten

Im Nginx Proxy Manager:

  • Domain: cloud.deine-domain.tld
  • IP: LXC-Adresse (z.B. 10.0.0.42)
  • Port: 80
  • SSL aktivieren (Lets Encrypt)
  • Force SSL + HTTP/2 aktivieren
  • Advanced Tab (optional, empfohlen):
client_max_body_size 10G;
proxy_read_timeout 3600;
proxy_send_timeout 3600;

Browser-Setup

Im Browser: https://cloud.deine-domain.tld

  • Admin-Benutzer erstellen
  • Datenverzeichnis: /mnt/hdd/nextcloud_data
  • Datenbank: PostgreSQL → 127.0.0.1, DB: nextcloud, User: nextcloud, Passwort: DEIN_SICHERES_PASSWORT

config.php anpassen (Reverse Proxy + Redis)

nano /srv/nextcloud/app/nextcloud/config/config.php
'trusted_domains'   => ['cloud.DEINE-DOMAIN.tld'],
'overwrite.cli.url' => 'https://cloud.DEINE-DOMAIN.tld',
'overwritehost'     => 'cloud.DEINE-DOMAIN.tld',
'overwriteprotocol' => 'https',
'trusted_proxies'   => ['IP.DEINES.NPM'],

'filelocking.enabled' => true,
'memcache.local'      => '\\OC\\Memcache\\Redis',
'memcache.locking'    => '\\OC\\Memcache\\Redis',
'redis' => [
  'host' => '/var/run/redis/redis-server.sock',
  'port' => 0,
  'timeout' => 1.5,
],

Tipp: www-data sollte zur Gruppe redis gehören, sonst funktioniert File Locking nicht:

usermod -aG redis www-data

PHP anpassen (für große Uploads & Performance)

nano /etc/php/*/fpm/php.ini
upload_max_filesize = 10G
post_max_size = 10G
memory_limit = 1024M
max_execution_time = 3600
output_buffering = 0
date.timezone = Europe/Berlin
systemctl reload php*-fpm

Cronjob aktivieren (Nextcloud Hintergrundjobs)

crontab -u www-data -e
*/5 * * * * php -f /srv/nextcloud/app/nextcloud/cron.php

Ergebnis

  • Nextcloud läuft im LXC, erreichbar via HTTPS
  • PostgreSQL-DB ist passwortgesichert & erreichbar
  • Daten liegen getrennt unter /mnt/hdd/nextcloud_data
  • Redis aktiv → keine File-Locking-Warnung
  • PHP tuned → große Uploads problemlos
  • Hintergrundjobs laufen automatisch

Nächste Schritte

  • Vorheriges Kapitel: Vaultwarden
  • Weiter gehts mit: Affine