Installation Nextcloud unter Ubuntu 24.04 LTS: Unterschied zwischen den Versionen

Aus Privates Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(19 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Installation Nextcloud unter Ubuntu 24.04 LTS
Es gibt auch eine sehr gute Anleitung für Nextcloud unter Unbutn24.04 LTS auf der Basis eines LEMP statt eines LAMP Stapels.</br>
Zur Navigation springen
Diese ist zu finden unter : [https://decatec.de/home-server/nextcloud-auf-ubuntu-server-24-04-lts-mit-nginx-mariadb-postgresql-php-lets-encrypt-redis-und-fail2ban/ https://decatec.de/home-server/nextcloud-auf-ubuntu-server-24-04-lts-mit-nginx-mariadb-postgresql-php-lets-encrypt-redis-und-fail2ban].</br>
Zur Suche springen
Dort gibt es auch eine Anleitung zum Backup und Restore von Nextcloud Instanzen. (Incl. Scripte)
Bei den nächsten Installationen sollte ich diese Variante mal testen.


Diese Anleistung basiert auf folgender Anleitung:
https://apfelcast.com/nextcloud-25-auf-linux-server-ubuntu-22-04-installieren-einfache-anleitung


Die Anleitung wurde wegen neuer PHP Version 8.3 etwas angepasst


Die beiden zusätzlichen Änderungen am Schuss ergeben sich nach dem überprüfen der Einstellungen in Nextcloud.
Diese Anleistung basiert aber im wesentlichen auf folgender Anleitung: 


[https://apfelcast.com/nextcloud-25-auf-linux-server-ubuntu-22-04-installieren-einfache-anleitung/ https://apfelcast.com/nextcloud-25-auf-linux-server-ubuntu-22-04-installieren-einfache-anleitung]


Nextcloud 29 Installation auf Basis Ubuntu 24.04 LTS
<B>Die Anleitung wurde in bestimmten Punkten angepasst wegen neuer PHP Version 8.3</B>


    Betriebsystem auf aktuellen Stand bringen
Die beiden zusätzlichen Änderungen am Schuss ergeben sich nach dem überprüfen der Einstellungen in Nextcloud.


apt update && apt upgrade -y




    Installion apache
'''Nextcloud 29 (Hub 8) Installation auf Basis Ubuntu 24.04 LTS'''
-------------------


apt install apache2
*Betriebsystem auf aktuellen Stand bringen
apt update && apt upgrade -y




    Installion PHP 8.1
*Installion apache
apt install apache2


apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update


*Installion PHP 8.3
apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update


    Installion PHP 8.1 Module


apt install php8.1 libapache2-mod-php8.1 php8.1-zip php-dompdf php8.1-xml php8.1-mbstring php8.1-gd php8.1-curl php8.1-imagick libmagickcore-6.q16-6-extra php8.1-intl php8.1-bcmath php8.1-gmp php8.1-cli php8.1-mysql php8.1-zip php8.1-gd  php8.1-mbstring php8.1-curl php8.1-xml php-pear unzip nano php8.1-apcu redis-server ufw php8.1-redis
*Installion PHP 8.3  Module ohne php-dompdf wie bei PHP 8.1 Module
apt install php8.3 libapache2-mod-php8.3 php8.3-zip php8.3-xml php8.3-mbstring php8.3-gd php8.3-curl php8.3-imagick libmagickcore-6.q16-6-extra php8.3-intl php8.3-bcmath php8.3-gmp php8.3-cli php8.3-mysql php8.3-zip php8.3-gd  php8.3-mbstring php8.3-curl php8.3-xml php-pear unzip nano php8.3-apcu redis-server ufw php8.3-redis


    Installion PHP 8.3 Module ohne php-dompdf wie bei PHP 8.1 Module


apt install php8.3 libapache2-mod-php8.3 php8.3-zip php8.3-xml php8.3-mbstring php8.3-gd php8.3-curl php8.3-imagick libmagickcore-6.q16-6-extra php8.3-intl php8.3-bcmath php8.3-gmp php8.3-cli php8.3-mysql php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml php-pear unzip nano php8.3-apcu redis-server ufw php8.3-redis
*anpassen der PHP.ini Datei
  nano /etc/php/8.3/apache2/php.ini


memory_limit = 1024M
upload_max_filesize = 16G
post_max_size = 16G
date.timezone = Europe/Berlin
output_buffering = Off




    anpassen der PHP.ini Datei
*Installation Datenbank Server
apt install mariadb-server


nano /etc/php/8.1/apache2/php.ini
bzw.
nano /etc/php/8.3/apache2/php.ini


memory_limit = 1024M
*Maria DB Server Konfiguration
upload_max_filesize = 16G
mysql_secure_installation
post_max_size = 16G
date.timezone = Europe/Berlin
output_buffering = Off




    Installation Datenbank Server
*öffnen SQL Dialog
mysql


apt install mariadb-server


*create database calles nextcloud
CREATE DATABASE nextcloud;


    Maria DB Server Konfiguration


mysql_secure_installation
*create database user with password
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password_here';




    öffnen SQL Dialog
*grant accesss to databse
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';


mysql


*save changes and exit
FLUSH PRIVILEGES;
EXIT;


    create database calles nextcloud


CREATE DATABASE nextcloud;
*Download lastest nextcloud version
cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www/




    create database user with password
*create new conf


CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password_here';
nano /etc/apache2/sites-available/nextcloud.conf </br>
<VirtualHost *:80>
    ServerAdmin master@domain.com
    DocumentRoot /var/www/nextcloud/
    ServerName demo.domain.com
    ServerAlias www.demo.domain.com
 
    Alias /nextcloud "/var/www/nextcloud/" </br>
    <Directory /var/www/nextcloud/>
      Options +FollowSymlinks
      AllowOverride All
      Require all granted
      <IfModule mod_dav.c>
          Dav off
      </IfModule>
      SetEnv HOME /var/www/nextcloud
      SetEnv HTTP_HOME /var/www/nextcloud
    </Directory> </br>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>




    grant accesss to databse
*Enable the NextCloud and Rewrite Module
a2ensite nextcloud.conf
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime


GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';


*restart apache
service apache2 restart


    save changes and exit


FLUSH PRIVILEGES;
*prepare data folder
EXIT;
mkdir /home/data/
chown -R www-data:www-data /home/data/




    Download lastest nextcloud version
*prepare nextcloud Folder
chown -R www-data:www-data /var/www/nextcloud/
chmod -R 755 /var/www/nextcloud/


cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www/


*install certbot and create Let's Encrypt SSL-Certificate
apt install certbot python3-certbot-apache


    create new conf
*Falls diese Maschine hinter einem Reverseproxy platziert ist, dann vorübergehend Port 80 und Port 443 direkt auf diese Maschine weiterleiten.
*Nur dann funktioniert der nächste Schritt und unter /etc/apache2/sites_available die Datei nextcloud-le-ssl.conf angelegt.
*Nach dem nächsten Schritt kann das Portforwarding sofern vorhanden wieder auf den Reverse Proxy umgestellt werden.


nano /etc/apache2/sites-available/nextcloud.conf
* erstes Zertifikat anfordern
certbot --apache -m master@domain.com -d cloud.domain.com


<VirtualHost *:80>
  ServerAdmin master@domain.com
  DocumentRoot /var/www/nextcloud/
  ServerName demo.domain.com
  ServerAlias www.demo.domain.com
   
   
  Alias /nextcloud "/var/www/nextcloud/"
--> only lasts 90 days


  <Directory /var/www/nextcloud/>
*gegebenenfall das Paket cron installieren
      Options +FollowSymlinks
      AllowOverride All
      Require all granted
      <IfModule mod_dav.c>
        Dav off
      </IfModule>
      SetEnv HOME /var/www/nextcloud
      SetEnv HTTP_HOME /var/www/nextcloud
  </Directory>


  ErrorLog ${APACHE_LOG_DIR}/error.log
install crontab
  CustomLog ${APACHE_LOG_DIR}/access.log combined
crontab -e
</VirtualHost>
40 3 * * 0 letsencrypt renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1


*Falls ein Revers Proxy im Einsatz ist, dann bitte den nachfolgenden Link beachten.
[[Nextcloud Server hinter einem Nginx Reverse Proxy Server]]


    Enable the NextCloud and Rewrite Module
--> Domain ansurfen und Einrichtung abschließen


a2ensite nextcloud.conf
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime


--------------------


    restart apache
'''Abschliessende Änderungen:'''


service apache2 restart
*Erweitern der Datei : /etc/apache2/sites-available/nextcloud-le-ssl.conf um folgenden Eintrag
Fettgedrucktes unter Servername einfügen !!! Achtung Servername an Gegebenheiten anpassen


Strict-Transport-Security:
  <VirtualHost *:443>
    ServerName cloud.nextcloud.com
    <B><IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule></B>
  </VirtualHost>


    prepare data folder


mkdir /home/data/
*Erweitern der Einstellungen in der Datein  /var/www/nextcloud/config/config.php um folgenden Eintrag
chown -R www-data:www-data /home/data/
'default_phone_region' => 'DE',
(bei einer Snap Installation unter Ubuntu 20.04 liegt die Datei unter /var/snap/nextcloud/current/config/config.php)


*Erweiterung der Crontabelle des Users www-data für regelmäßige vom System auszuführende Wartungsaufgaben alle 5 Minuten. [[https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Hinweis]]
crontab -u www-data -e


    prepare nextcloud Folder
*/5 * * * * php -f /var/www/nextcloud/cron.php


chown -R www-data:www-data /var/www/nextcloud/
chmod -R 755 /var/www/nextcloud/


*Maintenance Zeitfenster (Wartungsfenster) für zeitintensive Cronjobs in die Zeit von 1:00 bis 4:00 Uhr legen
cd /var/www/nextcloud
sudo -u www-data php occ config:system:set maintenance_window_start --type=integer --value=1


    install certbot and create Let's Encrypt SSL-Certificate


apt install certbot python3-certbot-apache


    Falls diese Maschine hinter einem Reverseproxy platziert ist, dann vorübergehend Port 80 und Port 443 direkt auf diese Maschine weiterleiten.
*<B>Leistungsverbessserung durch MemCache</B>
    Nur dann funktioniert der nächste Schritt und unter /etc/apache2/sites_available die Datei nextcloud-le-ssl.conf angelegt.
    Nach dem nächsten Schritt kann das Portforwarding sofern vorhanden wieder auf den Reverse Proxy umgestellt werden.


    erstes Zertifikat anfordern
siehe auch https://blog.admin-intelligence.de/nextcloud-durch-caches-beschleunigen/


certbot --apache -m master@domain.com -d cloud.domain.com
Installation APCU
  sudo apt-get install php-apcu




--> only lasts 90 days
Aktivierung des Caches in der Configuration Nextcloud durch hinzufügen folgenden Parameters memcache.local
nano /var/www/nextcloud/config/config.php <BR>
'memcache.local' => '\OC\Memcache\APCu',


    gegebenenfall das Paket cron installieren
Aktivierung des Caches auch für PHP durch hinzufügen des Parameters apc.enable_cli
nano /etc/php/8.3/cli/php.ini <BR>
apc.enable_cli = 1


install crontab
*<B>Locking nicht über Datenbank sondern über Redis DB (Speicherdatenbank)</B>
crontab -e
Abwandlung der Anleitung aus [https://decatec.de/home-server/nextcloud-auf-ubuntu-server-24-04-lts-mit-nginx-mariadb-postgresql-php-lets-encrypt-redis-und-fail2ban/
40 3 * * 0 letsencrypt renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1


    Falls ein Revers Proxy im Einsatz ist, dann bitte den nachfolgenden Link beachten.
Dazu installieren wir erst einmal Redis selbst mitsamt dem passenden PHP-Paket:
<B>ACHTUNG: Diesen Schritt nur ausführen, falls das Modul php8.3-redis noch nicht installiert ist.
Dto. mit dem redis-server.
Sonst kann es sein, dass evtl. das PHP Modul mit einer anderen PHP version installiert wird
was aber zu Fehlern führt. Im Zweifelsfall diesen Schritt auslassen</B></br>


Nextcloud Server hinter einem Nginx Reverse Proxy Server
apt update && apt install redis-server php8.3-redis 


--> Domain ansurfen und Einrichtung abschließen
Alte konfig sichern
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak


Wie schon bei PHP sollte Redis über einen Socket angesprochen werden. Dazu ändert ihr die Konfiguration folgendermaßen ab:
nano /etc/redis/redis.conf


Abschliessende Änderungen:
port 0
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770


    Erweitern der Datei : /etc/apache2/sites-available/nextcloud-le-ssl.conf um folgenden Eintrag
User redis der Gruppe www-data hinzu
usermod -a -G redis www-data


Fettgedrucktes unter Servername einfügen
Redis Dienst einmal neu starten
 
  service redis-server restart
Strict-Transport-Security:
  <VirtualHost *:443>
    ServerName cloud.nextcloud.com
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
</VirtualHost>
 
 
    Erweitern der Einstellungen in der Datein /var/www/nextcloud/config/config.php um folgenden Eintrag
 
'default_phone_region' => 'DE',
 
(bei einer Snap Installation unter Ubuntu 20.04 liegt die Datei unter /var/snap/nextcloud/current/config/config.php)


    Erweiterung der Crontabelle des Users www-data für regelmäßige vom System auszuführende Wartungsaufgaben alle 5 Minuten. [Hinweis]
die config.php der Nextcloud muss noch erweitert werden.
einfügen des nachfolgenden Blocks am Ende vor derschließenden Klammer.


crontab -u www-data -e
  nano /var/www/nextcloud/config/config.php


*/5 * * * * php -f /var/www/nextcloud/cron.php
  'filelocking.enabled' => true,
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
    'timeout' => 0.0,
      ),

Aktuelle Version vom 28. Mai 2025, 09:52 Uhr

Es gibt auch eine sehr gute Anleitung für Nextcloud unter Unbutn24.04 LTS auf der Basis eines LEMP statt eines LAMP Stapels.
Diese ist zu finden unter : https://decatec.de/home-server/nextcloud-auf-ubuntu-server-24-04-lts-mit-nginx-mariadb-postgresql-php-lets-encrypt-redis-und-fail2ban.
Dort gibt es auch eine Anleitung zum Backup und Restore von Nextcloud Instanzen. (Incl. Scripte) Bei den nächsten Installationen sollte ich diese Variante mal testen.


Diese Anleistung basiert aber im wesentlichen auf folgender Anleitung:

https://apfelcast.com/nextcloud-25-auf-linux-server-ubuntu-22-04-installieren-einfache-anleitung

Die Anleitung wurde in bestimmten Punkten angepasst wegen neuer PHP Version 8.3

Die beiden zusätzlichen Änderungen am Schuss ergeben sich nach dem überprüfen der Einstellungen in Nextcloud.


Nextcloud 29 (Hub 8) Installation auf Basis Ubuntu 24.04 LTS


  • Betriebsystem auf aktuellen Stand bringen
apt update && apt upgrade -y


  • Installion apache
apt install apache2


  • Installion PHP 8.3
apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update


  • Installion PHP 8.3 Module ohne php-dompdf wie bei PHP 8.1 Module
apt install php8.3 libapache2-mod-php8.3 php8.3-zip php8.3-xml php8.3-mbstring php8.3-gd php8.3-curl php8.3-imagick libmagickcore-6.q16-6-extra php8.3-intl php8.3-bcmath php8.3-gmp php8.3-cli php8.3-mysql php8.3-zip php8.3-gd  php8.3-mbstring php8.3-curl php8.3-xml php-pear unzip nano php8.3-apcu redis-server ufw php8.3-redis


  • anpassen der PHP.ini Datei
nano /etc/php/8.3/apache2/php.ini
memory_limit = 1024M
upload_max_filesize = 16G
post_max_size = 16G
date.timezone = Europe/Berlin
output_buffering = Off


  • Installation Datenbank Server
apt install mariadb-server


  • Maria DB Server Konfiguration
mysql_secure_installation


  • öffnen SQL Dialog
mysql


  • create database calles nextcloud
CREATE DATABASE nextcloud; 


  • create database user with password
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password_here';


  • grant accesss to databse
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';


  • save changes and exit
FLUSH PRIVILEGES;
EXIT;


  • Download lastest nextcloud version
cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www/


  • create new conf
nano /etc/apache2/sites-available/nextcloud.conf 
<VirtualHost *:80> ServerAdmin master@domain.com DocumentRoot /var/www/nextcloud/ ServerName demo.domain.com ServerAlias www.demo.domain.com Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All Require all granted <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud </Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>


  • Enable the NextCloud and Rewrite Module
a2ensite nextcloud.conf
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime


  • restart apache
service apache2 restart


  • prepare data folder
mkdir /home/data/
chown -R www-data:www-data /home/data/


  • prepare nextcloud Folder
chown -R www-data:www-data /var/www/nextcloud/
chmod -R 755 /var/www/nextcloud/


  • install certbot and create Let's Encrypt SSL-Certificate
apt install certbot python3-certbot-apache
  • Falls diese Maschine hinter einem Reverseproxy platziert ist, dann vorübergehend Port 80 und Port 443 direkt auf diese Maschine weiterleiten.
  • Nur dann funktioniert der nächste Schritt und unter /etc/apache2/sites_available die Datei nextcloud-le-ssl.conf angelegt.
  • Nach dem nächsten Schritt kann das Portforwarding sofern vorhanden wieder auf den Reverse Proxy umgestellt werden.
  • erstes Zertifikat anfordern
certbot --apache -m master@domain.com -d cloud.domain.com


--> only lasts 90 days

  • gegebenenfall das Paket cron installieren
install crontab
crontab -e
40 3 * * 0 letsencrypt renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1
  • Falls ein Revers Proxy im Einsatz ist, dann bitte den nachfolgenden Link beachten.

Nextcloud Server hinter einem Nginx Reverse Proxy Server

--> Domain ansurfen und Einrichtung abschließen



Abschliessende Änderungen:

  • Erweitern der Datei : /etc/apache2/sites-available/nextcloud-le-ssl.conf um folgenden Eintrag
Fettgedrucktes unter Servername einfügen !!! Achtung Servername an Gegebenheiten anpassen
Strict-Transport-Security:
 <VirtualHost *:443>
    ServerName cloud.nextcloud.com
    <IfModule mod_headers.c>
       Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
 </VirtualHost>


  • Erweitern der Einstellungen in der Datein /var/www/nextcloud/config/config.php um folgenden Eintrag
'default_phone_region' => 'DE',

(bei einer Snap Installation unter Ubuntu 20.04 liegt die Datei unter /var/snap/nextcloud/current/config/config.php)

  • Erweiterung der Crontabelle des Users www-data für regelmäßige vom System auszuführende Wartungsaufgaben alle 5 Minuten. [Hinweis]
crontab -u www-data -e
*/5 * * * * php -f /var/www/nextcloud/cron.php


  • Maintenance Zeitfenster (Wartungsfenster) für zeitintensive Cronjobs in die Zeit von 1:00 bis 4:00 Uhr legen
cd /var/www/nextcloud
sudo -u www-data php occ config:system:set maintenance_window_start --type=integer --value=1


  • Leistungsverbessserung durch MemCache

siehe auch https://blog.admin-intelligence.de/nextcloud-durch-caches-beschleunigen/

Installation APCU

 sudo apt-get install php-apcu


Aktivierung des Caches in der Configuration Nextcloud durch hinzufügen folgenden Parameters memcache.local

nano /var/www/nextcloud/config/config.php 
'memcache.local' => '\OC\Memcache\APCu',

Aktivierung des Caches auch für PHP durch hinzufügen des Parameters apc.enable_cli

nano /etc/php/8.3/cli/php.ini 
apc.enable_cli = 1
  • Locking nicht über Datenbank sondern über Redis DB (Speicherdatenbank)

Abwandlung der Anleitung aus [https://decatec.de/home-server/nextcloud-auf-ubuntu-server-24-04-lts-mit-nginx-mariadb-postgresql-php-lets-encrypt-redis-und-fail2ban/

Dazu installieren wir erst einmal Redis selbst mitsamt dem passenden PHP-Paket:

ACHTUNG: Diesen Schritt nur ausführen, falls das Modul php8.3-redis noch nicht installiert ist.
Dto. mit dem redis-server.
Sonst kann es sein, dass evtl. das PHP Modul mit einer anderen PHP version installiert wird
was aber zu Fehlern führt. Im Zweifelsfall diesen Schritt auslassen
apt update && apt install redis-server php8.3-redis  

Alte konfig sichern

cp /etc/redis/redis.conf /etc/redis/redis.conf.bak

Wie schon bei PHP sollte Redis über einen Socket angesprochen werden. Dazu ändert ihr die Konfiguration folgendermaßen ab:

nano /etc/redis/redis.conf
port 0 
unixsocket /var/run/redis/redis-server.sock 
unixsocketperm 770

User redis der Gruppe www-data hinzu

usermod -a -G redis www-data

Redis Dienst einmal neu starten

service redis-server restart

die config.php der Nextcloud muss noch erweitert werden. einfügen des nachfolgenden Blocks am Ende vor derschließenden Klammer.

 nano /var/www/nextcloud/config/config.php
 'filelocking.enabled' => true,
 'memcache.locking' => '\OC\Memcache\Redis',
 'redis' => array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
    'timeout' => 0.0,
     ),