Wie installiert man Nextcloud auf Debian mit postgreSQL php Apache2 und HTTP/2
In dieser Anleitung installieren wir eine moderne Nextcloud-Umgebung auf einem Linux-Server mit Apache, PHP-FPM, PostgreSQL und Redis. Die Installation eignet sich für kleine bis mittlere Umgebungen und ersetzt ältere Anleitungen auf Basis von Debian, PHP 8.3 und Nextcloud.
Nextcloud mit PostgreSQL, Apache, PHP-FPM und Redis installieren
In dieser Anleitung installieren wir eine moderne Nextcloud-Umgebung auf einem Linux-Server mit Apache, PHP-FPM, PostgreSQL und Redis. Die Installation eignet sich für kleine bis mittlere Umgebungen und ersetzt ältere Anleitungen auf Basis von Debian 10, PHP 8.3 und Nextcloud.
Voraussetzungen
- Frisch installierter Linux-Server, empfohlen: Debian 13 oder aktuelles Ubuntu LTS
- Root- oder sudo-Zugriff per SSH
- DNS-A-Record für die gewünschte Subdomain, z. B.
cloud.ihredomain.de - Optional: AAAA-Record für IPv6
- Mindestens 2 CPU-Kerne
- Mindestens 4 GB RAM, besser 8 GB oder mehr
- Ausreichend Speicherplatz für die Nextcloud-Daten
1. System aktualisieren
apt update
apt upgrade -y
apt install -y sudo curl wget unzip gnupg2 ca-certificates lsb-release apt-transport-https
2. Hostname prüfen
Der Server sollte einen sauberen Hostnamen besitzen.
hostnamectl set-hostname cloud
Optional kann der Hostname in der Datei /etc/hosts ergänzt werden:
nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 cloud.ihredomain.de cloud
3. PostgreSQL installieren
apt install -y postgresql postgresql-contrib
Anschließend prüfen wir den Dienst:
systemctl status postgresql
4. PostgreSQL-Datenbank anlegen
Melden Sie sich als PostgreSQL-Benutzer an:
sudo -u postgres psql
Erstellen Sie Benutzer und Datenbank:
CREATE USER nextcloud WITH PASSWORD 'HIER_EIN_SICHERES_PASSWORT_SETZEN';
CREATE DATABASE nextclouddb
WITH OWNER nextcloud
TEMPLATE template0
ENCODING 'UTF8'
LC_COLLATE 'C'
LC_CTYPE 'C';
GRANT ALL PRIVILEGES ON DATABASE nextclouddb TO nextcloud;
\q
5. Apache installieren
apt install -y apache2
Benötigte Apache-Module aktivieren:
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod ssl
a2enmod http2
a2enmod proxy
a2enmod proxy_fcgi
a2enmod setenvif
6. PHP-FPM und benötigte PHP-Module installieren
Installieren Sie PHP-FPM und die für Nextcloud benötigten PHP-Erweiterungen. Das Beispiel nutzt PHP 8.3.
apt install -y php8.3-fpm php8.3-cli php8.3-common php8.3-gd php8.3-curl \
php8.3-zip php8.3-xml php8.3-mbstring php8.3-intl php8.3-bcmath \
php8.3-gmp php8.3-pgsql php8.3-imagick php8.3-apcu php8.3-redis \
php8.3-ldap php8.3-bz2
PHP-FPM für Apache aktivieren:
a2enconf php8.3-fpm
systemctl restart apache2
systemctl restart php8.3-fpm
7. Redis installieren
apt install -y redis-server
Redis aktivieren und starten:
systemctl enable redis-server
systemctl restart redis-server
8. PHP für Nextcloud optimieren
Bearbeiten Sie die PHP-FPM-Konfiguration:
nano /etc/php/8.3/fpm/php.ini
Passen Sie folgende Werte an:
memory_limit = 1024M
upload_max_filesize = 20G
post_max_size = 20G
max_execution_time = 3600
max_input_time = 3600
date.timezone = Europe/Berlin
output_buffering = Off
OPcache konfigurieren
Suchen oder ergänzen Sie folgende Werte:
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.save_comments=1
opcache.revalidate_freq=60
opcache.jit=0
Danach PHP-FPM neu starten:
systemctl restart php8.3-fpm
9. Nextcloud herunterladen
Wechseln Sie in das Webverzeichnis:
cd /var/www
Laden Sie die aktuelle Nextcloud-Version herunter:
wget https://download.nextcloud.com/server/releases/latest.zip
Entpacken Sie das Archiv:
unzip latest.zip
rm latest.zip
10. Datenverzeichnis erstellen
Das Datenverzeichnis sollte nicht innerhalb des öffentlich erreichbaren Webverzeichnisses liegen.
mkdir -p /var/ncdata
chown -R www-data:www-data /var/ncdata
chmod 750 /var/ncdata
11. Dateirechte setzen
chown -R www-data:www-data /var/www/nextcloud
find /var/www/nextcloud/ -type d -exec chmod 750 {} \;
find /var/www/nextcloud/ -type f -exec chmod 640 {} \;
12. Apache VirtualHost erstellen
nano /etc/apache2/sites-available/nextcloud.conf
Fügen Sie folgende Konfiguration ein und passen Sie den Servernamen an:
<VirtualHost *:80>
ServerName cloud.ihredomain.de
ServerAdmin webmaster@ihredomain.de
DocumentRoot /var/www/nextcloud
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/nextcloud-error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud-access.log combined
</VirtualHost>
Site aktivieren und Standardseite deaktivieren:
a2ensite nextcloud.conf
a2dissite 000-default.conf
systemctl reload apache2
13. Let's Encrypt Zertifikat installieren
apt install -y certbot python3-certbot-apache
Zertifikat erstellen:
certbot --apache -d cloud.ihredomain.de --rsa-key-size 4096
Wählen Sie im Assistenten die automatische Weiterleitung von HTTP auf HTTPS.
14. HTTPS VirtualHost nachbearbeiten
Certbot erstellt automatisch eine SSL-Konfiguration. Diese kann anschließend um Nextcloud-spezifische Header ergänzt werden.
nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
Innerhalb des SSL-VirtualHosts ergänzen:
Protocols h2 http/1.1
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
Header always set Referrer-Policy "no-referrer"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Permitted-Cross-Domain-Policies "none"
Header always set X-Robots-Tag "noindex, nofollow"
Header always set X-XSS-Protection "1; mode=block"
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
Apache neu laden:
apachectl configtest
systemctl reload apache2
15. Nextcloud über die Kommandozeile installieren
Die Installation kann direkt per occ durchgeführt werden:
sudo -u www-data php /var/www/nextcloud/occ maintenance:install \
--database "pgsql" \
--database-name "nextclouddb" \
--database-user "nextcloud" \
--database-pass "HIER_EIN_SICHERES_PASSWORT_SETZEN" \
--admin-user "admin" \
--admin-pass "HIER_ADMIN_PASSWORT_SETZEN" \
--data-dir "/var/ncdata"
16. Trusted Domains setzen
sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 0 --value=cloud.ihredomain.de
17. Redis und APCu konfigurieren
Bearbeiten Sie die Nextcloud-Konfiguration:
nano /var/www/nextcloud/config/config.php
Ergänzen Sie innerhalb des Arrays:
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'filelocking.enabled' => true,
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'timeout' => 1.5,
],
Danach Apache und PHP-FPM neu starten:
systemctl restart redis-server
systemctl restart php8.3-fpm
systemctl restart apache2
18. Background Jobs per systemd Timer einrichten
Für produktive Installationen sollte Nextcloud nicht über AJAX, sondern über einen systemd Timer ausgeführt werden.
nano /etc/systemd/system/nextcloud-cron.service
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
nano /etc/systemd/system/nextcloud-cron.timer
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloud-cron.service
[Install]
WantedBy=timers.target
Timer aktivieren:
systemctl daemon-reload
systemctl enable --now nextcloud-cron.timer
systemctl list-timers | grep nextcloud
Nextcloud auf Cron-Modus umstellen:
sudo -u www-data php /var/www/nextcloud/occ background:cron
19. Empfohlene OCC-Befehle ausführen
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-columns
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess
20. Mailversand konfigurieren
Die Mailkonfiguration kann im Webinterface unter Verwaltungseinstellungen → Grundeinstellungen → E-Mail-Server gesetzt werden.
Alternativ per Kommandozeile:
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtpmode --value="smtp"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtphost --value="mail.ihredomain.de"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtpport --value="587"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtpsecure --value="tls"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtpauth --value="1"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtpname --value="nextcloud@ihredomain.de"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_smtppassword --value="SMTP_PASSWORT"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_from_address --value="nextcloud"
sudo -u www-data php /var/www/nextcloud/occ config:system:set mail_domain --value="ihredomain.de"
21. Wartungsmodus
Vor größeren Änderungen oder Updates sollte der Wartungsmodus aktiviert werden:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Nach Abschluss der Arbeiten:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
22. Backup der Nextcloud erstellen
Dateien sichern
rsync -Aavx /var/www/nextcloud/ /backup/nextcloud-app/
rsync -Aavx /var/ncdata/ /backup/nextcloud-data/
PostgreSQL-Datenbank sichern
sudo -u postgres pg_dump nextclouddb > /backup/nextcloud-db.sql
Komplettes Beispiel
mkdir -p /backup/nextcloud-$(date +%F)
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
rsync -Aavx /var/www/nextcloud/ /backup/nextcloud-$(date +%F)/app/
rsync -Aavx /var/ncdata/ /backup/nextcloud-$(date +%F)/data/
sudo -u postgres pg_dump nextclouddb > /backup/nextcloud-$(date +%F)/database.sql
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
23. Update der Nextcloud
Vor einem Update immer zuerst ein vollständiges Backup erstellen.
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Danach den webbasierten Updater oder den Kommandozeilen-Updater verwenden:
sudo -u www-data php /var/www/nextcloud/updater/updater.phar
Nach dem Update:
sudo -u www-data php /var/www/nextcloud/occ upgrade
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
24. Firewall absichern
Falls UFW verwendet wird:
apt install -y ufw
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
25. Unattended Upgrades aktivieren
apt install -y unattended-upgrades apt-listchanges
dpkg-reconfigure unattended-upgrades
26. Typische Fehler
Interner Serverfehler nach Änderung der config.php
Prüfen Sie die PHP-Syntax der Konfigurationsdatei:
php -l /var/www/nextcloud/config/config.php
Nextcloud meldet fehlende Indizes
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Redis wird nicht verwendet
Prüfen Sie, ob Redis läuft:
systemctl status redis-server
Prüfen Sie zusätzlich die PHP-Module:
php -m | grep redis
Dateien werden nicht sauber synchronisiert
Dateiscan manuell starten:
sudo -u www-data php /var/www/nextcloud/occ files:scan --all
27. Abschluss
Nach Abschluss dieser Schritte steht eine moderne Nextcloud-Installation mit Apache, PHP-FPM, PostgreSQL und Redis zur Verfügung. Die Installation nutzt HTTPS, HTTP/2, Redis File Locking, APCu und systemd Timer für die Hintergrundjobs.
Die wichtigsten nächsten Schritte sind:
- Mailversand testen
- Backup automatisieren
- Monitoring einrichten
- Apps nur gezielt installieren
- Regelmäßige Updates durchführen
Eigenes IT-Problem?
Nicht jeder Fall passt in einen Tipp
Wenn es bei Ihnen komplizierter wird, übernehmen wir das gerne direkt für Sie.