Forum

Project: Raspberry ...
 
Notifications
Clear all

[Sticky] Project: Raspberry Pi met Nextcloud op een SSD (cookbook)

Abib
 Abib
(@abib)
Noble Member

Weer even tijd vrij kunnen maken om nu eindelijk eens Nextcloud op een Raspberry Pi server te installeren. De basis is er.

Doel: Raspberry Pi met een Nextcloud server

Plan:

  1. Besturingssysteem: Diet-Pi
  2. SSD voor opslag met zo mijn mogelijk belasting van de SD kaart
  3. Nextcloud als applicatie op de Pi met 
    1. Lighttpd als http server
    2. LetsEncrypt voor https connecties ; http verbindingen niet toestaan
    3. Data en Nextcloud configuratie bewaren op een wijze die eenvoudig te backuppen is.
    4. Gebruikerstoegang beveiligen met 2FA en/of autorisatie via derden
    5. Participeren in federatie
    6. Veilige en snelle toegang zowel lokaal als van internet
  4. Lokale Back-up naar NAS in lokaal netwerk
  5. Restore programma (kookboek voor snelle herbouw Pi en indien nodige, restauratie van de data die op de NAS is gebackup’d

Omgevingsfactoren om rekening mee te houden:

  • Internet router wordt gebruikt voor DHCP, lokale DNS en port-forwarding
  • QNAP NAS kan opgeslagen data veilig versleuteld extern opslaan voor een geografisch verspreidde back-up. Dus de Pi hoeft alleen een backup naar deze NAS af te handelen
  • Gebruikersgegevens worden lokaal aangemaakt. Gebruikersbeheer via LDAP, bijvoorbeeld op de QNAP, behoort tot de mogelijkheden

Stap 1 - Installeer het basissysteem

Installatie instructies zijn beschreven op https://dietpi.com/docs/install/  

Op deze site kun je de juiste image voor je systeem downloaden en met bijvoorbeeld balenaEtcher flashes naar SD kaart of SSD. Voor dit project doen we het laatste. Merk op dat diet-pi standaard SSH ondersteuning biedt met de hostname dietpi. Standaard login is root met wachtwoord dietpi (het standaard wachtwoord kun je wijzigen in dietpi.txt) Tijdens de eerste login moet je dit wachtwoord gelijk wijzigen.

Overweeg om meerdere (logische) schijven te gebruiken voor het scheiden van besturingssysteem en gebruikersdata. Diet-Pi maakt gebruik van de locatie /mnt/dietpi_userdata/ voor de opslag van gebruikersdata, die zowel naar een directory op dezelfde schijf als naar een andere partitie (op een andere schijf) kan verwijzen. We kiezen hier voor een aparte data partitie en omdat onze SSD lekker groot is zijn we niet te zuinig met de systeempartitie. We gebruiken DiskGenius op een Windows PC om twee ext4 partities aan te maken, een van 100G voor het systeem, en de rest voor de data. Dit doen we nadat Balena Etcher de image van het dietpi systeem erop heeft gezet. We vergroten de systeempartitie en voegen de data partitie inn het vrijblijvende deel toe als nieuwe partitie. Gemak dient de mens bij het beheer van je systeem, een dit staat toe dat je een reinstall kan uitvoeren van het systeem zonder de dataschijf te beschadigen (merk op…. BalenaEtcher zal de datapartitie verwijderen als je een image terugzet).t Het organiseren van een goede back-up van de userdata directory/partitie blijft belangrijk! 

Stap 2 - Gebruik een SSD in plaats van een SD card

Wanneer het starten van SSD niet lukt, volg dan de stappen als beschreven in “Basissysteem Diet-Pi installeren op een SSD”

Stap 3 - Configureer dietpi

Start na de installatie van dietpi het systeem op gebruik een ssh sessie met root als gebruikersnaam en dietpi als wachtwoord om de configuratie af te ronden. Volg de instructies en wijzig het Global Software password en het console password voor dietpi/root. Log vervolgens altijd in met gebruiker dietpi op de console en gebruik su of sudo om root rechten te krijgen wanneer noodzakelijk. Laat het systeem niet aanstaan zolang het standaard wachtwoord niet veranderd is!

Gebruik het commando dietpi-config en kies optie 6) security options om de houtnaam te wijzigen van dietpi naar een naam van je voorkeur.

Vervolgens is het tijd om /mnt/dietpi-userdata te koppelen aan de data partitie. Gebruik het commando sudo dietpi-drive_manager of kies voor de zekerheid root access met su root om problemen met rechten te voorkomen. Je kunt er nu voor kiezen de partitie te munten. De partitie is gelinkt aan een unieke identity voor de schijf. Laat dit serienummer ook het mountpunt zijn, dus de schijf wordt benaderbaar op /mnt/

Na het mounten van de schijf heb je de keuze om User Data en Swap File naar deze schijf over te zetten. Kies in ons geval voor alleen userdata, die nu beschikbaar komt op /mnt//dietpi-userdata. Alle data blijft beschikbaar via /mnt/dietpi-userdata die nu een hardlink naar /mnt//dietpi-userdata heeft, zoals eenvoudig te controleren is met een ls -l /mnt.

We zijn nu klaar om de gewenste software te installeren.

Stap 4 - Installeer Nextcloud

Voorlopig houden we de dietpi alleen nog beschikbaar op het lokale LAN, dit geeft ons de gelegenheid Nextcloud te installeren met een basisbeveiliging voordat we de boel openzetten naar internet.

Zorg dat je ingelogd bent onze account dietpi en gebruik het sudo dietpi-software commando om software te installeren.

In het menu kun je zien dat http al standaard geïnstalleerd is. Dit kun je wijzigen naar een Apache of NGINX webserver. Wij willen httpd.

Kies Browse Software en selecteer Nextcloud (software package 114), en Install. Bevestig de keuze om de installatie te starten.

Zie verder: https://dietpi.com/docs/software/cloud/#nextcloud

Krijg toegang tot de web interface via de volgende URL: 

Initiële gebruikuikersgegevens zijn:

  • Username = admin
  • Password =

Onder Apps/Security, installeer Two Factor Authentication. Creëer ook een nieuwe gebruiker die als admin gebruikt kan worden. Schakel 2-factor authenticatie voor dit account in en gebruik deze voortaan om Nextcloud te beheren. Schakel daarna het account admin uit.

Maak een gebruikersaccount aan die niet in de admin groep zit voor het dagelijkse gebruik. Gebruik ook hiervoor 2-factor authenticatie.

Installeer ook de app Brute-force IP whitelist. 

De Nextcloud server is nu in de basis beschermd tegen misbruik en we kunnen hem toegankelijk maken via internet om SSL certificaten in te stellen.

Stap 5 - LetsEncrypt SSL certificaat installeren voor ondersteuning https verbindingen

Eerst moeten http (port 80) en https (port 443) doorverwezen worden naar de Pi server. De methode is afhankelijk van je DSL/glasvezel router. Je kunt er ook voor kiezen om IPv6 door te sturen. Zorg dat je de DNS instellingen van je domeinnaam kunt bewerken.

Gebruik het sudo dietpi-software commando om CertBot te installeren

Na installatie kan de configuratie starten met sudo dietpi-letsencrypt. Vul de benodigde gegevens in en selecteer de redirect on optie om http verkeer altijd om te leiden naar https. Mochten er problemen zijn met de automatische vernieuwing van het certificaat, dan Kann het commando certbot renew uitkomst bieden. Zie deze post voor een mogelijke oplossing bij problemen.

Stap 6 - configureer webserver en redirect de hostname voor Nextcloud naar de Nextcloud website.

De Raspberry beschikt over een mooie quadcore CPU, dus we kunnen multithreading aanzetten. Ook willen we de hostname van onze site cloud.domein.tl doorverwijzen naar de Nextcloud website. In de toekomst willen we eventueel een tweede website naar een andere folder structuur verwijzen, bijvoorbeeld city.domein.tl naar Owncloud. 

Pas daartoe de configuratie aan van lighttpd. Ga naar de configuratie directory met cd /etc/lighttpd/

En bewerk het bestand lighttpd.conf met je favoriete teksteditor (vi uiteraard, installeer de teksteditor wanneer deze niet beschikbaar is via dietpi-software). Voeg aan dit bestand de volgende text toe, aangepast voor jouw domeinnaam voor nextcloud (merk op, de sectie voor owncloud is een voorbeeld voor het toevoegen van een tweede website):

#Set multithreading to 4 processors
server.max-worker = 4
#
# Add document root for cloud.domein.tl to nextcloud
#
$HTTP["host"] == "cloud.domein.tl" {
  server.document-root = "/var/www/nextcloud/" 
}
# Add document root for city.domein.tl to owncloud
#
$HTTP["host"] == "city.domein.tl" {
  server.document-root = "/var/www/owncloud/" 
}

De nextcloud omgeving is nu het best te benaderen door gebruik te maken van de internet hostnaam. Wanneer de lokale naam van de server gebruikt wordt loop je de kans op een foutmelding omdat het SSL certificaat van LetsEncrypt niet overeenkomt met de lokale naam.

Nu de basis draait kan de aandacht naar verdere stappen: back-up en NextCloud configuratie. 

 

Stap 7 - NAS Shares koppelen over NFS

We willen back-ups maken naar de QNAP NAS en maken hierbij gebruik van NFS omdat dit het beste werkt in een Linux omgeving. Denk hierbij aan gebruikersrechten die je via rsync wilt behouden.

We maken een nieuwe share aan met de naam dietpi_systeem en een share met de naam dietpi_data. Voor beide shares geven we alleen administrators lees en schrijfrechten, toegang tot de Microsoft Networking-host laten we leeg, en toegang tot de NFS-host is met sync no wdelay, secure, en alleen voor de dietpi hostnaan of IP adres waarmee hij op het lokale LAN bekend is. 

  • Host/IP/Netwerk: dietpi.home of het vaste interne IP adres van deze server.
  • Squash-optie: Lezen/schrijven
  • De overige opties houden we standaard.

Merk op dat hiermee toegang wordt verleend aan een apparaat op het netwerk, en niet aan een gebruiker.

Wanneer de shares aangemaakt zijn gaan we ze koppelen in DietPi. Dit doen we met

sudo DietPi-Drive_Manager

Of we openen de drive manager vanuit DietPi-Launcher

Kies Add network drive, en dan NFS

Type de hostname of het IP adres van de NAS zoals deze op het LAN bekend is, bijv. qnap.home, en selecteer <OK>. Kies een naam voor de folder onder /mnt waarop de NFS server gekoppeld wordt. Bijvoorbeeld nfs_qnap en loop door de stappen om dit proces af te sluiten.

Je ziet nu in de lijst met verbindingen /mnt/nfs_qnap verbonden met qnap.home  

De onderliggende shares dietpi_systeem en dietpi_data zijn beschikbaar als directories onder /mnt/nfs_qnap en wanneer de deze een keer gebruikt worden komen ze ook te voorschijn in Drive_Manager.

We hebben nu twee locaties om data naar te back-uppen, bijvoorbeeld via rsync.

 

Stap 8 - Back-ups maken

We willen een back-up maken van de Nextcloud SQL database, en van de gebruikersdata. We doen dit s’nachts als iedereen slaapt, dus laten even de noodzaak om de service te stoppen buiten beschouwing. We maken gebruik van de dietpi configuratie om ons leven makkelijk te maken.

Voor de gebruikersdata maken we gebruik van rsync om de nextcloud_data directory naar de dietpi_data share te kopiëren. Aangezien we de belangrijke data van de NAS extern archiveren, kunnen we met het rsync commando verwijderde bestanden synchroniseren.

Hiertoe starten we de configuratie met sudo dietpi-sync. Als data geven we op:
Source: /mnt/<USB-schijf-ID>/dietpi_userdata/nextcloud_data 
Destination: /mnt/nfs_qnap/dietpi_data/dietpi_userdata/nextcloud_data

Merk op dat de appdata_<nextcloud-code> enorm veel bestanden bevat en zeker bij de eerste sync veel tijd zal vragen. Daaropvolgend rsyncs zijn incremental, en geven dus alleen wijzigingen door waarmee de opdracht aanzienlijk sneller is afgerond.

Hetzelfde geld voor de systeem-backup. De eerste keer dat een back-up gemaakt wordt kan het ‘enige tijd’ in beslag nemen omdat er heel veel kleine bestanden worden overgezet. Daaropvolgende backups op basis van rsync gaan makkelijker.

Start de back-up configuratie met sudo dietpi-backup en geef de locatie voor de backup, in ons voorbeeld /mnt/nfs_qnap/dietpi_systeem/sysbak/ - we willen de backup in een folder op de NAS share hebben om de systeem back-up te onderscheiden van de backup van de MariaDB.

In filter vervangen we de + voor /mnt/dietpi_userdata door een -. We hebben immers al een rsync voor deze folder. Zet Amount op [1] om het bij 1 back-up te houden. Meerdere versies kan, maar heeft mogelijk tot gevolg dat een back-up langer duurt. Draai twee keer een backup handmatig, en kijk of het werkt en of de tweede backup sneller voltooit. Zet bij succes de Daily Back-up op [on].

Om een dagelijkse back-up te maken van de Nextcloud MySQL/MariaDB database, maken we tot slot een bestand genaamd backup-mysql-cronjob aan in de map /etc/cron.daily/ met de volgende inhoud (eindig het bestand met een enter om de regel af te sluiten!):

#!/bin/bash
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
mysqldump --single-transaction nextcloud > /mnt/nfs_qnap/dietpi_systeem/sqlbak/nextcloud-sqlbak_`date +"%Y%m%d"`.bak
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

 

Dit script zet achtereenvolgens de maintenance mode van Nextcloud aan (nu wel!), maakt een back-up van de SQL database (opdracht is geldig voor MySQL of Mariadb) naar een bestand op datum, en zet daarna de maintenance mode weer uit. Let erop dat je eens in de zoveel tijd oude bestanden verwijderd. Dit kan eventueel ook met een script, waarover later misschien meer.

 

Stap hopelijk nooit: Restore

Bij problemen kun je de volgende site gebruiken om de Nextcloud installatie terug te zetten vanuit de back-up: https://docs.nextcloud.com/server/23/admin_manual/maintenance/restore.html

Aangezien de data na te lopen is op de NAS geloven we wel dat deze beschrijving gaat werken en nemen het risico op iets meer handmatige restoratie werkzaamheden voor lief 🙂

 

Quote
Topic starter Posted : 08/10/2021 12:11 am
Lantern reacted
Lantern
(@lantern)
Illustrious Member Admin

Ik dit zeker eens goed lezen 🙂 want er staan zeker interessante stukjes in.

 

ReplyQuote
Posted : 09/10/2021 11:26 am
Abib
 Abib
(@abib)
Noble Member

/bump stappen 7, 8 en hopelijk nooit toegevoegd aan de starterpost 🙂 

ReplyQuote
Topic starter Posted : 24/02/2022 12:10 am
Lantern reacted
Abib
 Abib
(@abib)
Noble Member

Na de verhuizing dit project weer eens opgepakt. Nieuwe router, nieuw domein binnenshuis, nieuwe IP ranges.... een heerlijk recept voor problemen 🙂 Daarbovenop nog gekozen om lighttpd te vervangen door nginx. Dit gaat simpel door lighttpd (#84) te verwijderen en vervolgens de juiste nginx stack weer te installeren (LESP (#78) of LEMP (#79), ik gebruik beide). Je kunt ook nginx (#85) kaal installeren, maar ik wilde zeker weten dat webstack aan nginx verbonden is.

 

Door de wijzigingen in het interne netwerk zijn een aantal zaken onderuit gegaan die te maken hebben met de verbinding met de NAS.  Hierdoor werken de back-ups niet meer.

 

Eerst dus zaak om de NFS verbindingen opnieuw te configureren. Let hierbij op de bug waardoor nfs verbindingen niet stabiel zijn. Daarna de sync en back-up verbindingen controleren.

ReplyQuote
Topic starter Posted : 29/07/2023 2:31 pm
Lantern reacted