Cloud na Raspberry Pi4 s USB disky v RAID1

Pro zálohu dat budeme potřebovat minimálně 2 disky stejné velikosti. S ohledem na cenu, kdy SSD disk např. o kapacitě 2TB stojí více jak 5.000 Kč a běžný HDD 2,5″ disk o stejné kapacitě méně jak 2.000 Kč zvolíme  levnější variantu.

Kromě disků budeme potřebovat ještě následující komponenty:

Sestavení HW je tak jednoduché, že jej netřeba popisovat – na obrázcích níže je použitá starší verze rozšiřující karty SupTronics X822 pro Raspberry Pi 3, ale upravená pro Raspberry Pi 4 (stačilo jen Raspberry Pi na desce přesunout).

Instalace operačního systému:

Stáhněte si Raspberry Pi OS Lite a pomocí programu Raspberry Pi Imager jej přeneste, jako obraz, na microSD kartu. Připojte monitor a klávesnici, zapněte Raspberry Pi 4 a počkejte než se nainstaluje Raspbian.

Jako 1. krok povolte SSH, aby jste mohli se k Raspberry Pi připojit vzdáleně.

sudo raspi-config

Aktualizace operačního systému a firmware:

sudo apt update
sudo apt full-upgrade

sudo rpi-update
sudo reboot

Vytvoření soft RAIDu:

Příprava oddílů
sudo fdisk /dev/sda
Příkazem n vytvořte nový oddíl. Pokud se zobrazí chyba, že oddíl již existuje, odstraňte jej pomocí příkazu d pozor dojde ke ztrátě veškerých dat na disku!
Poté zadejte p pro primární oddíl. U dalších otázek už jen potvrzujte defaultní hodnoty dokud se neobjeví „Created a new partition“.
Nyní zadejte w pro zapsání změn na disk.

Zopakujete postup pro druhý disk:
sudo fdisk /dev/sdb

Restartujte Raspberry Pi
sudo reboot

Instalace MDADM
sudo apt-get install mdadm

Zjištění připojovacích bodů pro každý disk (v našem případě sda1 a sdb1).
sudo blkid

Vytvoření pole
sudo mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1

Kontrola nastavení
sudo mdadm --detail /dev/md0

Vytvoření souborového systému EXT4
sudo mkfs.ext4 -v -m .1 -b 4096 -E stride=32,stripe-width=64 /dev/md0

Připojení souborového systému
sudo mkdir -p /mnt/raid1
sudo mount /dev/md0 /mnt/raid1/

Zajistíme připojení jednotky při každém spuštění přidáním do fstab a původní fstab zálohujeme
sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab
Těsně před spodními komentáři přidáme následující řádek
/dev/md0 /mnt/raid1/ ext4 defaults,noatime 0 1
Nyní uložíme konfikuraci Ctrl+O a ukončíme editor Ctrl+X.

Pro správné spuštění RAID nutné ještě zadat následující
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Příprava pro NextCloud:

Instalace databázového serveru:
sudo apt-get install mariadb-server
Nastavení zabezpečení databáze:
sudo mysql_secure_installation
Budeme vyzváni, abyste nastavili heslo pro kořenový účet, odebrali anonymního uživatele, omezili přístup rootovského uživatele na lokální počítač a odstranili testovací databázi.
... Enter current password for root (enter for none): ... Set root password? Y New password: Re-enter new password: ... Remove anonymous users? Y ... Disallow root login remotely? Y ... Remove test database and access to it? Y ... Reload privilege tables now? Y ... Thanks for using MariaDB!
Restartujeme databázi:
sudo systemctl restart mariadb

Přihlášení do MariaDB:
sudo mysql
Vytvoření databáze s názvem „nextcloud“:
CREATE DATABASE `nextcloud`;
Vytvoření uživatele „franta“ s heslem „heslo123“ (uživatele a heslo zvolte jiné, bezpečnější):
CREATE USER `franta`@`localhost` IDENTIFIED BY 'heslo123';
GRANT ALL PRIVILEGES ON nextcloud.* TO `franta`@`localhost`;
FLUSH PRIVILEGES;
quit

Instalace webového serveru:
sudo apt-get install apache2 apache2-utils

Instalace PHP (skriptovací programovací jazyk):
sudo apt-get install php php-common
sudo apt-get install php libapache2-mod-php php-cli php-fpm php-json php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
sudo systemctl reload apache2

Přesunutí uložiště pro weby na raid1 a vytvoření symbolického odkazu

sudo mv /var/www /mnt/raid1/
sudo chmod -R 777 /mnt/raid1/www
sudo ln -s /mnt/raid1/www /var/www

Instalace NextCloud:

cd /var/www/

Na následující url adrese si zjistíme nejnovější verzi NextCloudu: https://download.nextcloud.com/server/releases/ a následující příkaz upravíme na verzi, kterou budeme chtít nainstalovat.

curl https://download.nextcloud.com/server/releases/nextcloud-21.0.1.tar.bz2 | sudo tar -jxv
cd /
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod 0755 /var/www/nextcloud

Úprava nastavení Apache2:

sudo nano /etc/apache2/sites-available/000-default.conf

Upravíme řádek začínající DocumentRoot takto:
DocumentRoot /var/www/nextcloud
a za tento řádek přidáme následující řádky:
<Directory />
Options FollowSymLinks
AllowOverride ALL
</Directory>

Nyní uložíme konfikuraci Ctrl+O a ukončíme editor Ctrl+X.

Restartujeme Apache2
sudo systemctl reload apache2

Úprava nastavení PHP:

sudo nano /etc/php/7.3/apache2/php.ini

Postupně vyhledáme následující řádky:
output_buffering =
memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M
a upravíme je takto:
output_buffering = Off
memory_limit = 512M
post_max_size = 2048M
upload_max_filesize = 2048M

Restartujeme Apache2
sudo systemctl reload apache2

Nyní v prohlížeči zadáme tuto url adresu: http://ip_raspberry kde na úvodní obrazovce:
1.) nastavíme uživatelské jméno a heslo správce NextCloudu
2.) složku pro ukládání dat změníme na:
/var/www/nextcloud/data
3.) zadáme přihlašovací údaje a název databáze nextcloud kterou jsme si vytvořili v předchozích krocích.
a klikneme na Dokončit nastavení.

Pokud se vše zadaří tak po chvíli můžete začít používat svůj NextCloud.

BONUS: nastavení HTTPS pomocí OpenSSL

Předpokládejme, že budeme náš NextCloud používat pro takové to domácí zálohování, tedy budeme k němu přistupovat z počítačů a chytrých telefonů jen přes domácí Wifi (NextCloud doporučuji ponechat připojený k našemu domácím routru přes LAN). Tedy budeme k němu přistupovat jen přes IP adresu.

Nejprve si vygenerujeme certifikát s vlastním podpisem:
sudo mkdir -p /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
budeme vyzvání zadání několika údajů, např. takto:
Country Name (2 letter code) [AU]: CZ
State or Province Name (full name) [Some-State]: Praha
Locality Name (eg, city) []: Praha 10
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Maxinoha
Organizational Unit Name (eg, section) []: IT
Common Name (e.g. server FQDN or YOUR name) []: raspberrypi
Email Address []: nevyplňujte

Nyní budeme pokračovat nastavením Apache2:
sudo a2enmod ssl
sudo nano /etc/apache2/sites-available/default-ssl.conf
následující řádky:
DocumentRoot /var/www/html
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

změníme na:
DocumentRoot /var/www/nextcloud
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

a nesmíme zapomenout za řádek:
DocumentRoot /var/www/nextcloud
přidat následující řádky:
<Directory />
Options FollowSymLinks
AllowOverride ALL
</Directory>
uložíme novou konfikuraci Ctrl+O a ukončíme editor Ctrl+X
povolíme novou konfiguraci a restartujeme Apache2
sudo a2ensite default-ssl.conf
sudo service apache2 restart

Můžeme vyzkoušet, že to funguje v prohlížeči zadáním url adresy: https://ip_raspberry
Počítejte s tím, že Vám prohlížeč zobrazí varování, že by se mohlo jednat o neplatný certifikát – pokračujte dále na nespolehlivý web 😉