A következő felhőd otthon lesz

Avagy saját felhőszolgáltatás otthonra Nextclouddal, amit az Owncloud egyik alapítója hozott létre. – írta: hcl, 1 éve

A következő felhő

A Nextcloudot az Owncloud egyik alapítója hozta létre az eredeti projekt egy forkjaként. Pont azt tudja, ami nekem kellett, és többet is. Webes felületen elérhető bárhonnan, Android, iOS, Linux, Windows, OSX kliensei vannak szinkronizáláshoz, szerver- és kliensoldal rendesen fejlesztve, bugfixelve. Ingyenes, nyílt forrású, de van cégeknek szánt verziója is. Rengeteg plusz alkalmazás telepíthető még rá (alapvetően egy kollaborációs platform, odáig, hogy online lehet vele dokumentumokat szerkeszteni, böngészőben, OCR-t tud, chatelni lehet rajta, stb.). Megnézve a telepítési leírást, ez egy sokkal kevésbé macerás valami. Pl. nem olyan háklis a PHP verzióra, ha nem Docker konténerként fut, és alapvetően elvan egy meglevő webszerveren, márpedig nekem az ugye már volt, és volt rajta egy Let's Encrypt-es SSL cert is.

Telepítés

Nem térek ki mindenre, csak a legegyszerűbb telepítést mutatom be Debian 11-en, Apache2 webszerverrel, szóval alap Linux és Apache ismeretek ajánlottak.
Az alap, hogy van egy webszerverünk, és jó, ha ezen van SSL, főleg, ha nem valamilyen VPN mögött van a háziszerver, mint nálam. (Mindenképpen érdemes VPN mögé tenni az ilyesmit, amit én még nem tervezek.) Ez itt az 5555-ös porton figyel, ami nagyban segít a butább támadók ellen, amik nem keresnek ilyesmit magasabb portokon, és csak TLS1.2, 1.3 forgalmat enged.

Nálam kb. ennyi a webszerver vonatkozó konfigja, azaz egy SSL-t használó virtualhost :
root@homeserver:~$ cat /etc/apache2/sites-enabled/nextcloud-ssl.conf

Listen 5555
<IfModule mod_ssl.c>
<VirtualHost _default_:5555>
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
SSLCompression off
ServerAdmin webmaster@localhost
ServerSignature off
DocumentRoot /data/www_nextcloud/

<Directory /data/www_nextcloud>
Options +Indexes +FollowSymLinks
AllowOverride all
Allow from all
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on

SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>

<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>

A Nextcloud könyvtára a /data/www_nextcloud lesz, érdemes ide valami nagyobb tárhelyet mountolni. A tulajdonosa legyen a webszerver alapértelmezett usere és csoportja, azaz a alapesetben a www_data .

A php.ini-ben a memory limit legyen minimum 512MB, azzal már elvan. Az opcache-t jó engedélyezni, és az opcache.interned_strings_buffer jó, ha 8 felett van. Memcache is jól jön neki (pl. apcu).

A telepítés rettenetesen bonyolult :D Letöltjük az aktuális Nextcloud verziót a https://download.nextcloud.com/server/releases/ címről (jelenleg a 25.01), kicsomagoljuk, a helyére másoljuk (nyilván máshova is tehető, csak a webszerver konfigban is az legyen :D ).
wget https://download.nextcloud.com/server/releases/nextcloud-25.0.1.zip
unzip nextcloud-25.0.1.zip
cp -r nextcloud/* /data/www_nextcloud
chown -R www-data:www-data /data/www_nextcloud

(Nekem ez meredek, hogy nem tudom a szokásos nobody:nogroup-ra tenni a tulajt, a többi webszerveres cuccom olyan, hogy véletlenül sem a webszerver usere a tulajdonos.)

Telepítünk egy csomó csomagot (és majd még többet is :D lehet, hogy nem minden csomagnév jó, vagy közben változhatott is valaminek az aktuális verziója!)
apt-get install -y php php-opcache php-gd php-curl php-intl php-json php-ldap php-mbstring php7.4-mysql php-xml php-zip unzip wget apache2 mariadb-server bcmath php-bcmath php-imagick php-imagick-svg php-gmp php-apcu libmagickcore-6.q16-6-extra

Indítsunk egy Mariadb shellt ( mariadb parancs ), és hozzuk létre a Nextcloudnak az adatbázist (a "nextcloud" usernevet és a "qwerty" jelszót módosítsuk, és persze ezeket kell majd a Nextcloud beállításaiban is megadni :
CREATE DATABASE nextcloud;
GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'qwerty';
FLUSH PRIVILEGES;

(Ez az adatbázis-beállítás több Next- és Owncloud telepítési leírásból is hiányzik :S )

A Nextcloud könyvtárában a config alkönyvtár config.php file-jában a "trusted domains" tömbben adjuk meg azt a címet, amin elérhető lesz a Nextcloud, ezzel meghívva fog usereket beengedni (különben a "Nem megbízható tartományon keresztüli hozzáférés" üzenetet fogja adni). (Praktikusan ide az a cím kell, amiről kintről elérhető a szerver, mert az belső hálóról is megy. Mivel egy PHP tömb, több cím is megadható.)

Adjuk meg a Nextcloud cron jobját :
crontab -e -u www-data
Ez egy vi -t indít, amiben megadhatjuk a Nextcloud időzített feladatait futtató PHP file futtatását, az alapértelmezett 5 perccel ez :
*/5 * * * * php -f /var/www/nextcloud/cron.php
(Forrás : https://cloudkid.fr/nextcloud-cron-setup/ )

Indítsuk újra a webszervert :
systemctl stop apache2
systemctl start apache2

Böngészőben hívjuk meg azt a címet, amin a Nextcloud figyel. Azaz nekem pl. https://192.168.1.182:5555 volt, mert ezen a címen szolgálja ki a webszerver a www_nextcloud könyvtárt (persze külső cím is van). (A screenshoton nem egészen ez van, a tesztszerver nem ezen a porton lett telepítve.)

Az első betöltésnél bekéri a leendő admin user/jelszó párt, az adatbázishoz az usert, az adatokat tároló könyvtár nevét (lehet ugyanaz, ahol a szerver is van) stb. Ezután be kell jutnunk a felületre, mint admin.

Update : Ha

"The server encountered an internal error and was unable to complete your request."
akkor nyilván valami nem jó. Nekem egy Debian upgrade (11->12) után egy rakás PHP modul hiányzott (imagick, bcmath, stb. És így 2023.10.30-án a Nextcloud nem kompatibilis még a PHP 8.2-vel, csak a 7.4-gyel, így a 12-es Debiant vissza is lehet butítani 7.4-es PHP-re, ami külső tárolót kíván.

A cikk még nem ért véget, kérlek, lapozz!