Adéu Dropbox, hola Nextcloud

Adéu Dropbox, hola Nextcloud

Bé, doncs ja ho tinc muntat i vull compartir l'experiència. Açò era una cosa que tenia pendent des de feia temps però que no he tingut temps de fer el hacker fins fa una setmana degut als exàmens de l'EOI. Per motius de seguretat i d'experimentar, he decidit comprar-me un dock de discs durs SATA (de 2'5 pulgades o de 3'5 pulgades) i muntar-los al FreeBSD 11 que tinc al meu http://nuvolet.benicass.im que funciona sobre la Raspberry Pi 2 a casa, i tenir el meu núvol privat multiusuari gràcies a Nextcloud.

Dropbox és un núvol comercial que ofereix crec que 2Gb gratis però si volem més espai cal pagar alguna tarifa de les que ofereix en la seua pàgina. Jo vaig probar els seus serveis durant un any, de juny de 2016 fins ara, juny de 2017. Però ara vull provar mantenir el meu propi núvol, per coherència, ja que sempre estem parlant de privacitat i de seguretat, però al mateix temps mantenim les nostres dades personals i privades a núvols d'empreses comercials, i açò massa coherent no és, veritat?

Doncs bé, en aquest article t'explique com tinc muntant aquest núvol a la meua Rasbperry de casa amb FreeBSD 11-STABLE, funcionant amb MySQL i Nginx 24x7.

INSTAL·LACIÓ DE NEXTCLOUD A FREEBSD 11-STABLE

Instal·lem l'Nginx amb:

# pkg install nginx

Instal·lem la última versió del sevidor MySQL amb:

# pkg install mysql56-server

A continuació, instal·lem PHP7 i els mòduls mínims per a l'OwnCloud:

# pkg install php70 php70-mysqli php70-xml php70-gd php70-curl php70-zlib php70-zip php70-hash php70-tokenizer php70-extensions php70-pdo_mysql php70-openssl php70-gmp php70-ldap php70-exif php70-fileinfo php70-gd php70-mbstring php70-bcmath php70-bz2 php70-mcrypt pecl-APCu pecl-intl

Ara copiem la configuració per defecte del php.ini al nostre entorn en producció:

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

I ara editem eixe fitxer /usr/local/etc/php.ini i descomentem la següent línia per a evitar que els usuaris puguen executar arbitràriament codi PHP:

cgi.fix_pathinfo=0

Regenerem informació de la caché del sistema sobre els nostres fitxers executables amb:

# rehash

HABILITEM ELS SERVEIS IMPRESCINDIBLES

Ara habilitem els serveis de nginx, php-fpm y MySQL amb l'ordre sysrc, que farà que els serveis estiguen habilitats i activats des de l'inici del sistema una vegada arrenquem sempre la màquina:


# sysrc nginx_enable=yes mysql_enable=yes php_fpm_enable=yes
nginx_enable: -> yes
mysql_enable: -> yes
php_fpm_enable: -> yes
root@rpi2:/home/freebsd #

CONFIGURACIÓ DEL SERVIDOR MYSQL

Nextcloud pot funcionar amb Sqlite, però quan vols enmagatzemar moltes dades o oferir serveis a distints usuaris, és sempre molt millor fer servir MySQL, com és lògic. Primer de tot, haurem de tenir el MySQL habilitat al /etc/rc.conf i corrent. Per a arrencar-ho per primera vegada podem reiniciar la màquina o executar:

/usr/local/etc/rc.d/mysql-server start

Ara, lo primer de tot serà configurar la contrasenya de l'usuari root amb:
mysql_secure_installation

I ara que ja tenim la seguretat de l'usuari root feta, creem una base de dades, creem un usuari i li donem els permisos per a la base de dades del nostre núvol:

root@rpi2:/home/freebsd # mysql -u root -p
Enter password:
mysql> CREATE DATABASE nom_bbdd;
mysql> CREATE USER el_teu_usuari@localhost IDENTIFIED BY 'contrasenya';
mysql> GRANT ALL PRIVILEGES ON nom_bbdd.* TO 'el_teu_usuari'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

GENEREM UN CERTIFICAT SSL PER A L'HTTPS AL PORT 443

Ara anem a generar un certificat SSL per a que el tràfic del nostre núvol estiga cifrat. Podem generar un certificat SSL CA (d'alguna entitat certificadora) però en aquest cas anem a autofirmar un certificat, que serà suficient per a un cifrat normal:

# mkdir -p /usr/local/etc/nginx/cert/
# cd /usr/local/etc/nginx/cert/
# openssl req -new -x509 -days 365 -nodes -out /usr/local/etc/nginx/cert/owncloud.crt -keyout /usr/local/etc/nginx/cert/owncloud.key

I ara, modifiquem els permisos per a que nomès l'usuari root (qui ha creat els fitxers) siga l'únic que pot veure el contingut dels fitxers i modificar-los:

# chmod 600 *

DESCARREGUEM I INSTAL·LEM NEXTCLOUD

Anirem a la web oficial i descarregarem Nextcloud, des de https://download.nextcloud.com/
Entrem al servidor, i baixem la última versió (24 març 2017 al meu cas): https://download.nextcloud.com/server/releases/

Li donem permisos als fitxers i directoris per a que Nginx puga tindre accés total:

# chown -R www:www /usr/local/www/nextcloud/

CONFIGUREM PHP-FPM

Ara anem a configurar php-fpm per a que faja servir un socket de Unix i no un port de la comunicació de xarxa, perquè és més segur, per a fer-ho editarem el fitxer /usr/local/etc/php-fpm.d/www.conf, buscarem una línea on diga listen = 127.0.0.1:9000 i afegirem un punt i coma ";" abans de la línia, per a comentar-la, i just baix afegirem:

listen = /var/run/php-fpm.sock

Aleshores, el fitxer /usr/local/etc/php-fpm.d/www.conf queda així:

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

I a continuació descomentem les següents tres línies:

listen.owner = www
listen.group = www
listen.mode = 0660

I reiniciem el servei del php-fpm amb:

# service php-fpm restart

CONFIGUREM NGINX AMB PHP-FPM

Editem el fitxer de configuració de l'Nginx /usr/local/etc/nginx/nginx.conf per a configurar el php-fpm, una vegada obrim el fitxer amb # vi /usr/local/etc/nginx/nginx.conf ficarem el valor de www i de worker_processes amb el nom de CPUs o nuclis que té la nostra màquina.
Açò podem saber-ho executant:

# sysctl hw.ncpu
hw.ncpu: 4
root@rpi2:/home/freebsd #

Com veiem, la nostra Raspberry Pi 2 té 4 CPUs.

ENMAGATZENAREM TOTES LES DADES A UN ESPILL DE DISCS SATA EXTERNS

Per al disc dur del dock extern que veiem a la imatge, muntem el disc dur en el diretori de dades del Nextcloud

mount /dev/ufs/discodurUSB /usr/local/www/nextcloud/data/

o per al nou disc d'1TB que tinc com a disc número 1 farem:


mount /dev/ufs/discodurUSB2 /usr/local/www/nextcloud/data/

O per al nou d'1TB que tinc com a backup:


mount /dev/da0 /usr/local/www/nextcloud/data/

Adéu Dropbox, hola Nextcloud

Si voleu saber com he formatejat i per què he fet servir el sistema UFS2 (que és el que millor fa servir FreeBSD) podeu llegir aquest article "Formatejar un disc dur SATA i donar-li format UFS2" on ho explique.

Li donem permisos de propietari i grup al directori nostre del Nextcloud, per tal de que puguem afegir i esborrar fitxers i directoris des de la web:

[root@nuvolet /usr/local/www/nextcloud/data]# chown -R www joancatala/
[root@nuvolet /usr/local/www/nextcloud/data]# chgrp -R www joancatala/

I també afegim el nostre usuari (des d'on volem fer pujades de fitxers via SCP) al grup 'www'.

TREBALLANT AMB NEXTCLOUD, DES DE LA TERMINAL

Nextcloud té unes utilitats per a fer distintes tasques des de la terminal. El primer que he fet, una vegada pujats (via SCP) més de 100Gb al disc dur SATA, és executar la següent ordre per a que Nextcloud reindexe tots els nous fitxers i els mostre des de la web, ja que per defecte, si deixes directoris i fitxers a l'arrel de Nextcloud, no t'apareixeran a la web:

[root@nuvolet /usr/local/www/nextcloud]# sudo -u www php occ files:scan joancatala
The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php
Starting scan for user 1 out of 1 (joancatala)

+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 9 | 9 | 00:00:01 |
+---------+-------+--------------+
[root@nuvolet /usr/local/www/nextcloud]#

Si volem esborrar els fitxers eliminats des de la web (la paperera, com si diguèrem) farem la següent ordre:

sudo -u www php occ trashbin:cleanup joancatala

Si, per exemple, volem habilitar o deshabilitar l'aplicació de la Galeria de fotos:

sudo -u www php occ app:enable gallery
sudo -u www php occ app:disable gallery

Si si volem veure tots els paràmetres de configuració:

sudo -u www php occ config:list

Finalment, si volem saber tots els comandos, farem:

sudo -u www php occ

I ací en aquesta pàgina tenim un llistat d'altres opcions amb el Nextcloud des de la terminal.

Adéu Dropbox, hola Nextcloud

Finalment ja puc gaudir del meu propi núvol personal, al sistema operatiu FreeBSD 11-STABLE corrent sobre la Raspberry Pi 2 i enmagatzemant totes les meues dades als meus discs durs SATA que veieu a les imatges de dalt.

Adéu Dropbox, hola Nextcloud

Si reinicie la Raspberry, puc muntar els discs amb:


[root@nuvolet /home/joan]# mount /dev/da1 /mnt/discdur2/
[root@nuvolet /home/joan]# mount /dev/da0 /usr/local/www/nextcloud/data/

Espere que trobes útil aquest article i que et motive a compartir també els teus coneixements i experiències amb el Programari Lliure per a fer més gran la Comunitat. Perquè jo crec que nomès la Cultura i el Coneixement poden canviar el món i millorar-lo.