{"id":1737,"date":"2020-01-15T17:27:48","date_gmt":"2020-01-15T16:27:48","guid":{"rendered":"http:\/\/www.dirk-hagedorn.de\/?page_id=1737"},"modified":"2020-09-03T18:00:52","modified_gmt":"2020-09-03T16:00:52","slug":"nextcloud-17-mit-ubuntu-server-18-04","status":"publish","type":"page","link":"https:\/\/www.dirk-hagedorn.de\/?page_id=1737","title":{"rendered":"Nextcloud 17 mit Ubuntu Server 18.04"},"content":{"rendered":"<p>Auf dieser Seite zeige ich, wie ich <a href=\"https:\/\/nextcloud.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud<\/a> 17 erfolgreich mit <a href=\"https:\/\/ubuntu.com\/download\/server\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu Server<\/a> 18.04 installiert habe. Basis f\u00fcr die Installation ist ein rudiment\u00e4r aufgesetzter Ubuntu Server, wie ich es hier gezeigt habe: <a href=\"\/?page_id=1670\">Ubuntu Server 18.04 LTS Minimal in einer VirtualBox installieren<\/a><\/p>\n<h2>tl;dr<\/h2>\n<ul>\n<li>Apache2, PHP7.2 und MySQL-Server installieren<\/li>\n<li>Zus\u00e4tzliche f\u00fcr Nextcloud 17 erforderliche Pakete installieren<\/li>\n<li>Nextcloud 17 herunterladen und entpacken<\/li>\n<li>Apache, PHP und MySQL konfigurieren<\/li>\n<li>Nextcloud installieren<\/li>\n<li>Feintuning<\/li>\n<li>Bonus: SSL-Zertifikat(e) installieren<\/li>\n<\/ul>\n<h2>Apache, PHP und MySQL<\/h2>\n<p>Nextcloud l\u00e4uft als Webseite, ist in PHP programmiert und speichert Informationen z.B. in einer MySQL-Datenbank (oder MariaDB). Zun\u00e4chst m\u00fcssen wir also die ganzen Dienste auf unserem Ubuntu Server installieren.<\/p>\n<pre>sudo apt install apache2 php mysql-server<\/pre>\n<p>Das sorgt f\u00fcr den Download von etwa 28 MB und sp\u00fclt entpackte 185 MB auf die Platte. Nach der Installation l\u00e4uft der Apache-Webserver bereits, wir k\u00f6nnen uns durch folgenden Aufruf kurz davon \u00fcberzeugen:<\/p>\n<pre>wget -O - http:\/\/localhost\/<\/pre>\n<p>L\u00e4uft PHP auch? Klar.<\/p>\n<pre>php --version\r\nPHP 7.2.24-0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS )\r\n...<\/pre>\n<p>Der MySQL-Server l\u00e4uft ebenfalls bereits:<\/p>\n<pre>mysql --version\r\nmysql  Ver 14.14 Distrib 5.7.28, for Linux (x86_64) using  EditLine wrapper\r\n<\/pre>\n<h2>Zus\u00e4tzliche Pakete installieren<\/h2>\n<p>Nextcloud 17 ben\u00f6tigt f\u00fcr den Betrieb weitere Pakete, wie dies im <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/installation\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Admin-Manual<\/a> beschrieben ist. Diese Pakete installieren wir folgenderma\u00dfen:<\/p>\n<pre>sudo apt install php7.2-gd php7.2-mysql php7.2-curl php7.2-mbstring\r\nsudo apt install php7.2-intl php-imagick php7.2-xml php7.2-zip\r\nsudo apt install php-apcu\r\n<\/pre>\n<p>Diese Pakete und ein Haufen davon abh\u00e4ngiger Libs werden damit heruntergeladen und installiert.<\/p>\n<h2>Nextcloud 17 herunterladen und entpacken<\/h2>\n<p>Nun das aktuelle Installations-Archiv von der Nextcloud-Webseite herunterladen:<\/p>\n<pre>cd \/tmp\r\nwget https:\/\/download.nextcloud.com\/server\/releases\/nextcloud-17.0.2.tar.bz2<\/pre>\n<p>Ich installiere optionalen Krempel gerne unterhalb von \/opt &#8211; kann man auch anders machen, wir machen es halt hier so. Wechseln wir also nach \/opt und entpacken dort das heruntergeladene Archiv:<\/p>\n<pre>cd \/opt\r\nsudo tar xvfpj \/tmp\/nextcloud*.tar.bz2<\/pre>\n<p>Das Verzeichnis \/opt\/nextcloud und alle darunter befindlichen Dateien und Verzeichnisse geh\u00f6ren nobody:nogroup. Da der Ubuntu-Apache als Benutzer www-data:www-date l\u00e4uft, \u00e4ndern wir nun noch rekursiv die Benutzer- und Gruppenzugeh\u00f6rigkeit des Nextcloud-Verzeichnisses:<\/p>\n<pre>sudo chown -R www-data:www-data nextcloud<\/pre>\n<h2>Apache, PHP und MySQL konfigurieren<\/h2>\n<p>Apache, PHP und MySQL laufen zwar schon, Nextcloud liegt bereits auf der Platte, aber nun m\u00fcssen wir noch&#8230;<\/p>\n<ul>\n<li>das Verzeichnis \/opt\/nextcloud an den Apache anbinden<\/li>\n<li>PHP &#8222;tunen&#8220;<\/li>\n<li>dem MySQL-root-Benutzer ein Kennwort vergeben<\/li>\n<\/ul>\n<p>Fangen wir mit dem Apache an. Zun\u00e4chst sorgen wir daf\u00fcr, dass beim Aufruf von http:\/\/localhost\/nextcloud\/ der Apache auf die Dateien im Verzeichnis \/opt\/nextcloud\/ zugreift. Dazu richten wir einen Alias als Site ein, der auf das entsprechende Verzeichnis zeigt. Die Standard-alias.conf im Verzeichnis mods-available ist daf\u00fcr eine gute Grundlage:<\/p>\n<pre>cd \/etc\/apache2\r\nsudo cp mods-available\/alias.conf sites-available\/nextcloud.conf<\/pre>\n<p>Nun bearbeiten wir die Konfigurationsdatei, so dass sie folgendes enth\u00e4lt (siehe dazu auch das <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/installation\/source_installation.html#apache-web-server-configuration\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Admin-Manual<\/a>):<\/p>\n<pre>sudo vi sites-available\/nextcloud.conf\r\n\r\n&lt;IfModule alias_module&gt;\r\n    Alias \/nextcloud\/ \"\/opt\/nextcloud\/\"\r\n\r\n    &lt;Directory \"\/opt\/nextcloud\/\"&gt;\r\n        Require all granted\r\n        Options FollowSymlinks MultiViews\r\n        AllowOverride All\r\n    &lt;\/Directory&gt;\r\n\r\n    &lt;IfModule mod_dav.c&gt;\r\n        Dav off\r\n    &lt;\/IfModule&gt;\r\n\r\n    SetEnv HOME \/opt\/nextcloud\r\n    SetEnv HTTP_HOME \/opt\/nextcloud\r\n\r\n&lt;\/IfModule&gt;<\/pre>\n<p>Nun m\u00fcssen wir die neue Site \/ den Alias noch aktivieren:<\/p>\n<pre>sudo a2ensite nextcloud<\/pre>\n<p>Wie dem <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/installation\/source_installation.html#apache-web-server-configuration\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Manual<\/a> zu entnehmen ist, werden die folgenden Apache-Module empfohlen. Duech eine kleine Bash-Schleife aktivieren wir diese Module nacheinander, sofern dies nicht eh schon geschehen ist:<\/p>\n<pre>for mod in rewrite headers env dir mime; do sudo a2enmod $mod; done<\/pre>\n<p>Um die \u00c4nderungen wirksam werden zu lassen, m\u00fcssten wir den Apache einmal neu starten bzw. ihm sagen, dass er seine Konfiguration neu laden soll. Wir sparen uns das momentan noch auf, da wir auch noch PHP ein wenig &#8222;tunen&#8220; wollen.<\/p>\n<p>Das <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/installation\/server_tuning.html#enable-php-opcache\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Manual<\/a> empfiehlt, den PHP-OPcache zu aktivieren, der compilierten Bytecode zwischenspeichert, um daf\u00fcr zu sorgen, dass PHP und damit der Webserver und die Nextcloud schneller reagieren. Ich kann best\u00e4tigen, dass dadurch die Schwuppdizit\u00e4t der Nextcloud sp\u00fcrbar steigt, also f\u00fchren wir die entsprechenden Schritte kurz durch. Wir \u00f6ffnen die php.ini und kopieren den ganzen Block an entsprechender Stelle (hinter [opcache]) hinein:<\/p>\n<pre>sudo vi \/etc\/php\/7.2\/apache2\/php.ini\r\n\r\n...\r\n[opcache]\r\n; &lt;dh&gt;\r\n; see https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/installation\/server_tuning.html#enable-php-opcache\r\nopcache.enable=1\r\nopcache.interned_strings_buffer=8\r\nopcache.max_accelerated_files=10000\r\nopcache.memory_consumption=128\r\nopcache.save_comments=1\r\nopcache.revalidate_freq=1\r\n; &lt;\/dh&gt;\r\n...\r\n\r\n\r\n<\/pre>\n<p>Tipp: Anfang und Ende meiner \u00c4nderungen in Konfigurationsdateien markiere ich gerne mit meinen Initialen, daher dieses vielleicht merkw\u00fcrdige &lt;dh&gt; und &lt;\/dh&gt;.<\/p>\n<p>Nun starten wir den Apache einmal neu, um all die durchgef\u00fchrten \u00c4nderungen zu aktivieren:<\/p>\n<pre>sudo systemctl restart apache2<\/pre>\n<p>Abschlie\u00dfend werden wir noch manuell die MySQL-Datenbank und -Datenbankbenutzer f\u00fcr Nextcloud anlegen. In MySQL 5.7 ist bez\u00fcglich des Logins als MySQL-root irgendetwas ge\u00e4ndert, nach der Installation per apt wird kein root-Pa\u00dfwort abgefragt und der Login funktioniert nur als (Ubuntu)-root \u00fcber &#8222;sudo mysql&#8220;. Das klingt alles nach doofem \u00c4rger beim Start des Nextcloud-Installers, daher gehen wir diesem aus dem Weg, legen eine nextcloud-Datenbank und einen nextcloud-Datenbankbenutzer vorab an (als Kennwort bitte nicht &#8222;geheim&#8220; verwenden und notieren).<\/p>\n<pre>sudo mysql -u root mysql\r\n...\r\nmysql&gt; create database nextcloud;\r\nQuery OK, 1 row affected (0.00 sec)\r\n\r\nmysql&gt; create user nextcloud@localhost identified by 'geheim';\r\nQuery OK, 0 rows affected (0.00 sec)\r\n\r\nmysql&gt; grant all on nextcloud.* to nextcloud@localhost;\r\nQuery OK, 0 rows affected (0.00 sec)\r\n\r\nmysql&gt; flush privileges;\r\nQuery OK, 0 rows affected (0.00 sec)\r\n\r\nmysql&gt; quit;\r\nBye<\/pre>\n<p>Wenn das alles funktioniert hat, dann sollte die Verbindung nun f\u00fcr den Benutzer &#8222;nextcloud&#8220; zur Datenbank &#8222;nextcloud&#8220; funktionieren. Das testen wir mit&#8230;<\/p>\n<pre>mysql -u nextcloud -p nextcloud<\/pre>\n<p>Nun m\u00fcsste alles bereits sein, dass wir mit dem Webbrowser die abschlie\u00dfende Nextcloud-Installation starten. Dazu starten wir Firefox \/ Chrome \/ Chromium \/ Opera \/ Vivaldi \/ younameit und rufen unseren Webserver auf. Wenn alles auf der lokalen Kiste l\u00e4uft halt unter <a href=\"http:\/\/localhost\/nextcloud\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost\/nextcloud\/<\/a>, wenn wir von einem anderen Rechner auf unseren Webserver zugreifen entsprechend http:\/\/$SERVERNAME\/nextcloud\/.<\/p>\n<p>Es \u00f6ffent sich nun das Formular f\u00fcr die Nextcloud-Installation, in der wir folgende Informationen eintragen:<\/p>\n<ul>\n<li>Name des Nextcloud-Administrators (z.B. &#8222;admin&#8220;)<\/li>\n<li>Pa\u00dfwort des Nextcloud-Administrators (bitte nicht &#8222;admin&#8220;)<\/li>\n<li>Das Datenverzeichnis auf der Platte, wo Dateiuploads abgelegt werden (kann man so lassen)<\/li>\n<li>Name des Datenbankbenutzers (&#8222;nextcloud&#8220;, siehe oben)<\/li>\n<li>Kennwort des Datenbankbenutzers (bitte nicht &#8222;geheim&#8220;, siehe oben)<\/li>\n<li>Name der Datenbank (auch &#8222;nextcloud&#8220;, siehe oben)<\/li>\n<li>Host der Datenbank (f\u00fcr gew\u00f6hnlich &#8222;localhost&#8220;)<\/li>\n<\/ul>\n<p>Wenn alles korrekt eingegeben wurde, richtet nun der Nextcloud-Installer alles Notwendige f\u00fcr den Betrieb der Nextcloud ein. Je nach Leistungsf\u00e4higkeit der Serverhardware dauert dies nur wenige Sekunden\/Minuten, bis man von der Nextcloud begr\u00fc\u00dft wird.<\/p>\n<p>Wir sind nun als Nextcloud-Administrator eingeloggt. Es empfiehlt sich, zun\u00e4chst oben rechts auf den runden Kringel mit Gro\u00dfbuchstaben (bei &#8222;admin&#8220; halt ein &#8222;A&#8220;) zu klicken und die &#8222;Einstellungen&#8220; anzuklicken, anschlie\u00dfend links im Men\u00fc auf &#8222;Verwaltung\/\u00dcbersicht&#8220;.<\/p>\n<p>Sollte dort &#8222;Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB.&#8220; zu lesen sein, \u00e4ndern wir dies. Wir \u00f6ffnen die php.ini, suchen nach &#8222;memory&#8220;, kommentieren die Voreinstellung aus und setzen den Wert auf 512MB.<\/p>\n<pre>sudo vi \/etc\/php\/7.2\/apache2\/php.ini\r\n\r\n;memory_limit = 128M\r\n; &lt;dh&gt;\r\nmemory_limit = 512M\r\n; &lt;\/dh&gt;\r\n\r\n:wq\r\n\r\nsudo systemctl restart apache2<\/pre>\n<p>Taucht dort ein gro\u00dfer Bereich mit Warnungen \u00fcber &#8222;bigint&#8220; auf, f\u00fchre man jetzt diesen Befehl aus (siehe dazu auch das <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/configuration_database\/bigint_identifiers.html\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Manual<\/a>):<\/p>\n<pre>cd \/opt\/nextcloud\r\nsudo -u www-data php occ db:convert-filecache-bigint<\/pre>\n<p>Keine Sorge bez\u00fcglich &#8222;This can take up to hours&#8220;, wenn die Datenbank noch leer ist. Im frisch installierten Zustand dauert das alles nur ein paar Sekunden.<\/p>\n<p>Wir erkennen auf &#8222;Verwaltung \/ \u00dcbersicht&#8220; zudem die Meldung &#8222;Es wurde kein PHP-Memory-Cache konfiguriert&#8220;. Das ist korrekt, das holen wir nun noch nach &#8211; schlie\u00dflich haben wir oben bereits mit &#8222;sudo apt install php-apcu&#8220; die Voraussetzungen daf\u00fcr geschaffen (siehe dazu auch das <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/configuration_server\/caching_configuration.html\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Manual zum Thema &#8222;Memory Caching&#8220;<\/a>). Dazu f\u00fcgen wir die Zeile mit &#8218;memcache.local&#8216; in der config.php ein:<\/p>\n<pre>cd \/opt\/nextcloud\/config\/\r\nvi config.php\r\n...\r\n 'memcache.local' =&gt; '\\OC\\Memcache\\APCu',\r\n);<\/pre>\n<p>Wen nun noch die beiden Hinweise st\u00f6ren, dass die Konfiguration f\u00fcr &#8222;\/.well-known\/carddav&#8220; und &#8222;\/.well-known\/caldav&#8220;\u00a0 nicht passt, m\u00f6ge folgendes durchf\u00fchren (siehe dazu das <a href=\"https:\/\/docs.nextcloud.com\/server\/17\/admin_manual\/issues\/general_troubleshooting.html#service-discovery\" target=\"_blank\" rel=\"noopener noreferrer\">Nextcloud-Manual<\/a>). Im DocumentRoot des Apache legen wir in einer .htaccess die rewrite-Regeln f\u00fcr diese URLs ab. Dazu die .htaccess \u00f6ffnen und die Zeilen hineinkopieren:<\/p>\n<pre>sudo vi \/var\/www\/html\/.htaccess\r\n\r\n&lt;IfModule mod_rewrite.c&gt;\r\n  RewriteEngine on\r\n  RewriteRule ^\\.well-known\/host-meta \/nextcloud\/public.php?service=host-meta [QSA,L]\r\n  RewriteRule ^\\.well-known\/host-meta\\.json \/nextcloud\/public.php?service=host-meta-json [QSA,L]\r\n  RewriteRule ^\\.well-known\/webfinger \/nextcloud\/public.php?service=webfinger [QSA,L]\r\n  RewriteRule ^\\.well-known\/carddav \/nextcloud\/remote.php\/dav\/ [R=301,L]\r\n  RewriteRule ^\\.well-known\/caldav \/nextcloud\/remote.php\/dav\/ [R=301,L]\r\n&lt;\/IfModule&gt;<\/pre>\n<p>Damit der Apache \u00fcberhaupt die .htaccess im DocumentRoot liest, m\u00fcssen wir noch folgende Regel in der Server-Konfiguration hinzuf\u00fcgen:<\/p>\n<pre>vi \/etc\/apache2\/sites-available\/000-default.conf\r\n\r\n ...\r\n &lt;Directory \/var\/www\/html\/&gt;\r\n\u00a0 \u00a0 AllowOverride All\r\n &lt;\/Directory&gt;\r\n ...<\/pre>\n<p>Nun noch einmal den Apache neu starten, danach sollten die Warnungen auf der Seite verschwunden sein, bis halt auf den noch nicht m\u00f6glichen Zugriff \u00fcber https. Aber das ist halt ein l\u00e4ngeres Thema&#8230;<\/p>\n<pre>sudo service apache2 restart<\/pre>\n<h2>Bonus: SSL-Zertifikat(e) und HTTPS-Zugriff<\/h2>\n<ul>\n<li>certbot installieren (siehe <a href=\"https:\/\/certbot.eff.org\/lets-encrypt\/ubuntubionic-apache\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/certbot.eff.org\/lets-encrypt\/ubuntubionic-apache<\/a>)<\/li>\n<li>certbot ausf\u00fchren (siehe oben)<\/li>\n<\/ul>\n<p>Demn\u00e4chst ausf\u00fchrlicher, versprochen&#8230;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auf dieser Seite zeige ich, wie ich Nextcloud 17 erfolgreich mit Ubuntu Server 18.04 installiert habe. Basis f\u00fcr die Installation ist ein rudiment\u00e4r aufgesetzter Ubuntu Server, wie ich es hier gezeigt habe: Ubuntu Server 18.04 LTS Minimal in einer VirtualBox installieren tl;dr Apache2, PHP7.2 und MySQL-Server installieren Zus\u00e4tzliche f\u00fcr Nextcloud 17 erforderliche Pakete installieren Nextcloud <a class=\"more-link\" href=\"https:\/\/www.dirk-hagedorn.de\/?page_id=1737\">Weiterlesen\u00a0\u2026<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":785,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1737","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/pages\/1737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1737"}],"version-history":[{"count":28,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/pages\/1737\/revisions"}],"predecessor-version":[{"id":1931,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/pages\/1737\/revisions\/1931"}],"up":[{"embeddable":true,"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=\/wp\/v2\/pages\/785"}],"wp:attachment":[{"href":"https:\/\/www.dirk-hagedorn.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}