Zu allen Tipps
Linux

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.

Veröffentlicht am 16.09.2020

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.