Oldal kiválasztása

Ebben a bejegyzésben a Nextcloud 13 telepítésén megyünk végig lépésről lépésre, ahol egy saját felhőt rakunk össze az adataink tárolásához. A fő probléma, ami ezt a cikket is ihlette, hogy nagyon sok helyen használok különféle felhő alapú tárhelyet, ami harmadik fél kezében van és így rálátása lehet a tartalmaimra, amit nem feltétlen szeretnék megosztani másokkal. Szóval mindent egy helyre pakolok innentől kezdve, a könnyebb kezelhetőség, biztonság érdekében. Gondolkodtam első körben, hogy ezt vagy a Seafilet telepítsem e fel. Korábban már hosszabb ideig használtam OwnCloudot, ami igaz, hogy lassabb a Seafilenál, viszont külön service futtatását igényli és phyton alapon fut. A Nextcloudhoz viszont elég egy apache/nginx+php kombó szóval szinte bármilyen környezetben elfuttatható. E miatt esett rá a választásom. Igaz, hogy így egy jóval lassabb lesz a feltöltési sebesség kisebb fájlok esetén, de ezt beáldozom az egyszerűség oltárán. Nagyobb fájlok esetén viszont nincs nagy eltérés a kettő között. Ezt a telepítést egy újonnan telepített érintetlen Debian 9 rendszeren teszteltem. Az erőforrásokról annyit, hogy egy külön vpsre került, 2gb ram, 2cpu mag, 2tb háttértár kíséretében és így pár hét távlatában igen szépen működik.

A frissen telepített rendszer frissítése

apt update && apt upgrade -y

Apache 2.4 telepítése

apt install apache2

Php 7.2 telepítése

apt install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
apt update
apt install libapache2-mod-php7.2 php7.2-xml php7.2-common php7.2-gd php7.2-json php7.2-mbstring php7.2-zip php7.2-mysql libapache2-mod-php7.2 php7.2-curl php7.2-bz2 php7.2-intl php-imagick php7.2-dev

Mycript tepepítése php 7.2-höz

Sajnos mivel régóta nem fejlesztették már a libmcrypt-t, ezért ezt a 7.2-ből eltávolították és egy nem hivatalos pecl repo-ba került, így egy kicsit macerásabb a telepítése.

apt install php-pear
apt install gcc make autoconf libc-dev pkg-config libmcrypt-dev -y
pecl install mcrypt-1.0.1

Amikor a “libmcrypt prefix? [autodetect] :” üzenet megjelenik a konzolon, csak nyomjunk neki egy entert és a telepítő folytatódik tovább.
Sikeres telepítés végén a következő üzenet jelenik meg:

Build process completed successfully
Installing ‘/usr/lib/php/20170718/mcrypt.so’
install ok: channel://pecl.php.net/mcrypt-1.0.1
configuration option “php_ini” is not set to php.ini location
You should add “extension=mcrypt.so” to php.ini

echo "extension=/usr/lib/php/20170718/mcrypt.so" > /etc/php/7.2/cli/conf.d/mcrypt.ini
echo "extension=/usr/lib/php/20170718/mcrypt.so" > /etc/php/7.2/apache2/conf.d/mcrypt.ini

Mariadb 10.1 telepítése

apt install mariadb-server
mysql_secure_installation

A felmerülő kérdésekre, mindenhol nyomjunk entert, a root-nak meg egy erős jelszót állítsunk be, amit akár a random.org-ról is generálhatunk. Igaz nálam ez a folyamat már nem állított be a root-nak jelszót, így ehhez egy másik trükközésre volt szükség.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
… Success!
Remove anonymous users? [Y/n] Y
… Success!
Disallow root login remotely? [Y/n] Y
… Success!
Remove test database and access to it? [Y/n] Y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!
Reload privilege tables now? [Y/n] Y
… Success!
Cleaning up…
All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

Pár beállítás hozzáadása a konfighoz:

echo "[mysqld]
innodb_large_prefix=on
innodb_file_format=barracuda
innodb_file_per_table=true" >> /etc/mysql/my.cnf

/etc/init.d/mysql restart

Nextcloud telepítése

mysql -u root -p

MariaDB [(none)]> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_user'@'localhost' IDENTIFIED BY 'adatbazis_jelszo';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

mkdir -p /data/
cd /data/

wget https://download.nextcloud.com/server/releases/nextcloud-13.0.2.zip
unzip nextcloud-13.0.2.zip -d /data/
chown -R www-data:www-data /data/nextcloud/
cd /data/nextcloud/

sudo -u www-data php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextcloud_user" --database-pass "adatbazis_jelszo" --admin-user "admin" --admin-pass "jelszo"

A lentebbi üzenetet fogjuk a konzol kimeneten visszakapni, ha sikeresen telepítettük a nextcloudot. Igaz ezt megtehetjük a webes felületén keresztül is egy egyszerű telepítővel, de én ezt a megoldást jobban preferálom. Ha valaki még is a webes telepítő felé hajlana jobban, akkor a nextcloud dokumentációjában talál erről még bővebb leírást. Maga a telepítés eltart pár percig, legyünk türelmesek, amikor úgy tűnik, mintha nem csinálna semmit.

Nextcloud is not installed – only a limited number of commands are available
Nextcloud was successfully installed

/data/nextcloud/config/config.php-hoz hozzá kell adni a megbízható domaineket a localhost alatt, amiről használni akarjuk a felhőt, különben a login képernyőn egy hiba üzenet fog minket fogadni. Több domain esetén egyértelmű a szintaktika, szépen adjuk hozzá a többit is. Nekem személy szerint egy is elég.
1 => ‘cloud.domain.hu’,
2 => ‘felho.domain.hu’,
[…]

Apache 2.4 VirtualHost beállítása ssl-el, modulok engedélyezése, biztonság növelése

a2enmod rewrite headers env dir mime ssl

/etc/sites-available/cloud.domain.hu.conf-ba hozzuk létre a virtualhost beállításokat.

echo "<VirtualHost 123.123.123.123:443>
ServerAdmin [email protected]
DocumentRoot "/data/nextcloud"
ServerName cloud.domain.hu

<Directory "/data/nextcloud/">
Require all granted
Options MultiViews FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/cloud.domain.hu.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/cloud.domain.hu.key"
SSLCACertificateFile "/etc/apache2/ssl/cloud.domain.hu.ca-bundle"

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header set X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff

TransferLog /var/log/apache2/cloud.domain.hu-ssl_access.log
ErrorLog /var/log/apache2/cloud.domain.hu-ssl_error.log
</VirtualHost>" > /etc/apache2/sites-available/cloud.domain.hu.conf

a2ensite cloud.domain.hu.conf

/etc/apache2/mods-enabled/ssl.conf-ban az ssl modul beállítások, amiket be kell állítanunk, ami nincs benne, azt csak másoljuk be a végére.
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
# Ezek a beállítások nincsenek benne, csak másold a végére.
SSLCompression off
SSLUseStapling on
SSLStaplingCache “shmcb:logs/stapling-cache(150000)”
SSLSessionTickets Off

Acme.sh telepítése, tanúsítványok generálása, telepítése. Telepítés után automatán beállítja a cront, így 60 naponta szépen újat generál, innentől kezdve evvel többen alap esetben nem kell foglalkoznunk.

wget -O -  https://get.acme.sh | sh

mkdir -p /etc/apache2/ssl

acme.sh --issue -k 4096 --apache -d cloud.domain.hu

acme.sh --install-cert -d cloud.domain.hu \
--cert-file "/etc/apache2/ssl/cloud.domain.hu.crt" \
--key-file "/etc/apache2/ssl/cloud.domain.hu.key" \
--ca-file "/etc/apache2/ssl/cloud.domain.hu.ca-bundle" \
--reloadcmd "/etc/init.d/apache2 restart"

Ha a konfigteszt nem “Syntax OK” üzenetet ad vissza, akkor valamit elrontottunk, ez segíthet a szintaktikai hibák detektálásában. Majd mehet az újraindítás, ha minden rendben van.

apache2ctl -t
/etc/init.d/apache2 restart

Ha az ssllabs.com-on csinálunk egy biztonsági ellenőrzést, akkor egy A+-os minősítésnek kell megjelennie, mint a lentebbi képen.

Cron beállítása

Szükséges egy karbantartó cron beállítása a cron démon által, mert az ajax nem paralitikus és csak akkor fut le, ha valaki belép a webes felületen keresztül, ami jelentősen lassítani tudja e miatt a belépéskori betöltést.

crontab -e -u www-data

Majd illesszük be a lentebbi cront és mentsük el a beállításokat.

*/15 * * * * php -f /data/nextcloud/cron.php

Ezzel már majdnem készen is vagyunk, de a webes felület beállításai között is át kell állítani az Alapvető beállítások -> Háttérfeladatok résznél Cron-ra. Majd ellenőrizhetjük, hogy a következő negyed órában sikeresen lefutott e a cron. Erre jó példa a lentebbi kép.

Php finomhangolása

/etc/php/7.2/apache2/php.ini-ben a lentebbi beállításokat kell beállítanunk a nextcloud optimális működéséhez.

# Opcache engedélyezése
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

# Futásidejű memória növelése.
memory_limit = 512M

# Maximális feltöltési limit növelése, tetszőlegesen, de a post_max_size nem lehet kisebb az upload_max_filesize nál csak vele megegyező vagy nagyobb, különben nem fog normálisan működni a fájlfeltöltés, mert megszakad.
upload_max_filesize = 2000M
post_max_size = 2000M

# A php folyamatok, futásidejének növelése. Erre szükség lehet pl. ha a fentebbi példában egy nagyobb fájlt töltünk felfele a webes felületen keresztül és lassabb internetkapcsolatunk van, amivel eltarthat fél óráig is, mire befejeződik.
max_execution_time = 3600
max_input_time = 3600

# Megfelelő időzóna beállítása, a pontos idő megjelenítése véget.
date.timezone = “Europe/Budapest”

Redis beállítása cacheléshez

A telepítés egyszerrű csak a redis-server és a php-redis csomagokat kell feltennünk, majd a redis szervert a telepítő automatán el is indítja, ezt követően elég újraindítani az apachet és a nextgencloud config.php fájljában beállítani a szükséges konfigurációt és már működik is.

apt install redis-server php-redis

A redis sikeres futásának ellenőrzése.

ps ax | grep redis
14890 ? Ssl 0:00 /usr/bin/redis-server 127.0.0.1:6379
15196 pts/1 S+ 0:00 grep redis

A lentebbi konfigot adjuk hozzá a nextcloud gyökerében található config/config.php tartalmához.

'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
      ),

Ha mindent jól csináltunk az eredményt ellenőrizhetjük a nextcloud Alapbető beállítások -> Biztonsági és telepítési figyelmeztetéseknél. Erre a lenti kép egy jó példa.

Szép url-ek beállítása

Alap esetben az url-ek tartalmazzák az index.php rész is, amit el tudunk távolítani a lentebbi beállításokkal. Így rövidebb és praktikusabb linkeket tudunk használni a címsorban és a megosztásokkor is.
A szokásos config/config.php hez adjuk hozzá a következőket.

'overwrite.cli.url' => 'https://cloud.domain.hu' ,
'htaccess.RewriteBase' => '/' ,

Majd futtassuk az alábbi parancsot, hogy frissüljön a .htaccess file tartalma is. Ezt követően már készen is vagyunk vele.
sudo -u www-data php /data/nextcloud/occ maintenance:update:htaccess

Végszó

Nagyjából ennyiből áll egy nextcloud felhő feltelepítése nulláról, egy frissen telepített Debian 9-re. Remélem mások is hasznát veszik az írásomnak. Ha esetleg ötleted vagy javaslatod van, azt komment formájában lent jelezd felém és még fejleszthetünk rajta.

Források:
https://docs.nextcloud.com/server/13/admin_manual/contents.html
https://lukasmestan.com/install-mcrypt-extension-in-php7-2/