NAS met Docker voor Nextcloud: installeer je eigen clouddienst
Een eigen cloud maakt je onafhankelijk van dienstverleners waar je je persoonlijke data aan moet toevertrouwen. Op een NAS met Docker zet je gemakkelijk een Nextcloud-instantie op, waarmee data letterlijk onder eigen dak blijven. Het installeren van Nextcloud langs deze weg is minder moeilijk dan je zou denken.
Lees verder na de advertentie
Als je een NAS hebt die geschikt is voor Docker, dan kost het niet veel tijd om daar een eigen cloudserver voor familie, werkgroep of bedrijf op te zetten. De Nextcloud-dienst voor het synchroniseren van bestanden, afspraken en contacten is ook buitenshuis beschikbaar met een (Dyn)DNS-domein of een vast ip-adres en wat port-forwards in de router.
Hoe dat concreet gaat, laten we zien aan de hand van een Synology DiskStation DS218+ met firmware 6.1.6. Dat werkt op andere apparaten in dezelfde klasse vergelijkbaar, met hooguit wat verschillen op detailniveau. In uitgave 5, 2018 hebben we verschillende modellen x86-NAS met Docker-optie getest.
Eerste stappen
Tip!
Ontworpen voor creators en professionals: configureer jouw eigen ASUS ProArt P16 nu.
We gaan ervan uit dat de NAS goed geconfigureerd is en vanuit internet met een DynDNS-naam of via een eigen domeinnaam bereikbaar is. Als administrator van de NAS kun je de meeste stappen vervolgens via de browser doen. Daarbij gebruiken we de menunamen van het systeembeheer van Synology’s NAS-besturingssysteem DSM. Alleen ergens halverwege de stappen moet je een uitstapje maken naar de commandline.
Je hoeft niet alles te weten over Docker, de belangrijkste basisprincipes noemen we al doende in het kort. Vragen over Docker bespreken we verder in de FAQ in het magazine of in andere artikelen.
- Ontdek hoe je veilig blijft zonder nieuwe pc te kopen.
- Big Tech onder de loep
- Alles over Wi-Fi 8
De eerste stap is de Docker-uitbreiding installeren met het Package Center van Synology. Vervolgens maak je drie containers aan: een SQL-database als basis, de meest recente versie van Nextcloud en als extra de Docker-tool Watchtower voor het automatisch updaten van de containers.
Start Docker via het bijbehorende pictogram in het NAS-menu. Als je klikt op ‘Register’, kun je de images downloaden die je voor het maken van de eerste twee containerinstanties nodig hebt. Je kunt door de hele lijst scrollen, maar handiger zoeken op de termen ‘mysql’ en ‘nextcloud’. Dan krijg je meerdere resultaten van verschillende implementaties. Kies de eerste met het predicaat ‘Officiële image’. Dan weet je zeker dat die van een bedrijf komt dat achter de tool staat en daar (betaalde) support voor biedt. Je kunt er dan vanuit gaan dat het om goed onderhouden images gaat.

Nextcloud gebruikt een externe database voor zijn configuratie en informatie over het bestandssysteem. Het kan overweg met MySQL, MariaDB en PostgreSQL. We gebruiken MariaDB omdat dat niet onder Oracles knoet zit.
Selecteer bij de image-downloads als tag ‘latest’, zodat je altijd de nieuwste versie hebt. Het downloaden van de in totaal bijna 1000 MB kan afhankelijk van je internetsnelheid even duren. Terwijl Nextcloud nog aan het downloaden is, kun je al wel met de inmiddels gedownloade database-image aan de slag.
Database voorbereiden
De gedownloade images staan bij ‘Image’. Klik daar op ‘mariadb:latest’ en op ‘Starten’. De ‘Algemene instellingen’ moet je alleen wijzigen als je zoveel mogelijk van redelijk krappe NAS-RAM (2 GB in de basisuitvoering) wilt vrijhouden als buffer voor parallelle bestandsoperaties. Een al wat langer draaiende en voor Nextcloud gereserveerde database nam bij ons zo’n 230 MB in beslag. Een veilige waarde voor de geheugenlimiet is dan ook 500 MB.
Bij de ‘Geavanceerde instellingen’ activeer je eerst ‘Automatisch opnieuw starten inschakelen’. Dat geldt ook voor de volgende container. Op het tabblad ‘Volume’ geef je voor de container aan waar hij zijn bestanden inclusief zijn configuratie neer mag zetten op de NAS-opslagruimte. Met die volume-mapping scheidt Docker de gebruiksdata van de programmabestanden van de container, wat op zijn beurt onnodige back-ups voorkomt. Voeg een map met de naam sql toe, selecteer die en zet vervolgens bij ‘Pad koppelen’ het doel /var/lib/mysql.

Op het tabblad ‘Netwerk’ zet je een vinkje bij ‘Gebruik hetzelfde netwerk als Docker Host’. Dan meldt de SQL-database zich op zijn standaardpoort onder het NAS-adres in het LAN en kun je hem ook voor andere doeleinden gebruiken. Dat werkt echter alleen als je geen andere SQL-uitbreiding op de NAS hebt draaien. In dat geval moet je de netwerkmodus dan op ‘bridge’ laten staan en de containerdatabase op een andere nog vrije poort mappen.
Als laatste stap moet je bij ‘Milieu’ – een minder geslaagde vertaling van ‘Environment’ – de omgevingsvariabele MYSQL_ROOT_PASSWORD toevoegen en een wachtwoord opgeven. Het kan zijn dat je het tabblad ‘Milieu’ niet kunt zien, dan moet je het venster van de ‘Geavanceerde instellingen’ aan de rechterkant even wat groter maken. Klik op ‘Volgende’ om de container aan te maken en op ‘Toepassen’ bij de samenvatting om de container uit te voeren.
Database bereikbaar maken
Om ervoor te zorgen dat Nextcloud de database kan gebruiken, moet je een SQL-gebruiker met een eigen wachtwoord aanmaken en die gebruiker de juiste rechten geven. Om dat te doen, ga je bij het Docker-venster naar ‘Container’ en selecteer je de database. Klik op ‘Details’ en ga naar het tabblad ‘Terminal’. Klik op ‘Maken’ en typ in de root-shell de volgende commando’s in:
Met de % in het laatste commando krijgt de gebruiker ‘nextcloud’ overal vandaan toegang. Dan kun je bij eventuele noodoperaties ook vanuit het LAN bij de Nextcloud-database. Met exit beëindig je het SQL-serviceprogramma.
Deze weg is wat lastiger dan Nextcloud simpelweg het rootwachtwoord voor de MariaDB-instantie geven, maar op deze manier kun je de SQL-database ook voor andere diensten in het LAN laten gebruiken.
Nextcloud installeren
De Nextcloud-container maak je op dezelfde manier aan als die van de database. Als je het geheugengebruik wilt beperken, stel je eveneens een limiet van 500 MB in. Op het ‘Volume’-tabblad voeg je voor de volume-mapping de map ‘cloud’ toe en koppelt daar de map /var/www/html aan.
Op het tabblad ‘Netwerk’ blijft de voorinstelling ‘bridge’ bestaan. Bij ‘Poortinstellingen’ verander je ‘Lokale poort’ van ‘Automatisch’ naar ‘8080’. Daar werkt later de container met het ip-adres van de NAS mee. Installeer de container met ‘Toepassen’, ‘Volgende’ en weer ‘Toepassen’, maar ga met de browser dan niet meteen kijken of Nextcloud al op zijn lokale adres in je netwerk reageert. Als je dat doet zou Nextcloud zijn ip-adres in het netwerk als trusted-domain gebruiken in plaats van zijn domeinnaam en moet je dat later in het configuratiebestand weer gaan bijwerken.

Stel daarom eerst twee reverse-proxy-regels in de NAS in – de details volgen – en twee port-forwards voor HTTP (80) en HTTPS (443) in je router die naar het LAN-adres van je NAS met die poorten gaan.
Internettoegang tot de NAS
Toegang tot de standaardpoorten voor HTTP (80) en HTTPS (443) worden door de in de NAS geïntegreerde webserver nginx standaard naar de poorten voor de configuratiepagina’s doorgestuurd (oftewel 5000/5001). Omdat de standaardpoorten niet van nginx te scheiden zijn, gebruiken we die verder.
Dat heeft twee voordelen: ten eerste kan nginx ook met HTTPS overweg, wat Nextcloud uit zichzelf niet doet. Ten tweede kun je de functie van de NAS voor het krijgen en vernieuwen van Let’s-Encrypt-certificaten gebruiken, zodat browsers en CalDAV/CardDAV-tools geen waarschuwingsmeldingen geven. Certificaten voor Let’s Encrypt installeren op een Synology NAS kan met de ingebouwde functies.

De toegang tot de NAS-configuratie in plaats van de cloudfunctie gebeurt dan later met een gerichte poort: http://NAS-adres:5000 respectievelijk 5001 (HTTPS). Als je makkelijker wilt doen, kun je de cloud met een apart subdomein scheiden van de NAS, bijvoorbeeld cloud.example.com. Dan werkt de toegang via de normale domeinnaam nog met de standaardpoorten.
Maak in het Toepassingsportaal van de NAS-interface een reverse-proxy-regel aan die de HTTPS-toegang afvangt. Zet de domeinnaam bij ‘Hostnaam’ en activeer HSTS en HTTP/2. De bestemming is localhost en de poort 8080, waar Nextcloud mee werkt. Met een tweede regel voor HTTP (80) stuur je niet-versleutelde toegang door naar HTTPS door het domein als bron met poort 80 op te geven en als doel poort 443.

Nextcloud configureren
Nu pas ga je in de browser naar het clouddomein voor de Nextcloud-instellingen. Voer daar vervolgens een beheerdersaccount met een wachtwoord in en ga dan naar ‘Opslag & database’.
Daar selecteer je Mysql/MariaDB’. Bij de database-instellingen vul je de gebruikersnaam (nextcloud), het bijbehorende wachtwoord en de databasenaam (nextcloud) in. Als adres geef je het interne ip-adres van de NAS op met de standaard SQL-poort, dus bijvoorbeeld 192.168.0.99:3306. Hier werkt ‘localhost’ niet, omdat je de Docker-SQL-database in het netwerk gestopt hebt. Vervolgens kun je op ‘Installatie afronden’ klikken.
Configuratie afronden
Nextcloud moet achtergrondtaken verrichten en doet dat standaard bij elke pagina-aanroep. Die taken blijven echter vaak langere tijd uit als Nextcloud niet gebruikt wordt. Daarom kun je die beter door een webcron-functie laten uitvoeren waarbij een externe server (in dit geval de NAS) regelmatig een Nextcloud-pagina oproept.
Log als beheerder in bij Nextcloud en ga naar het instellingenmenu via het tandwieltje of de cirkel met je initiaal rechtsboven. Daar ga je bij ‘Beheer’ naar ‘Basis-instellingen’ en zet bij ‘Achtergrondtaken’ de optie ‘Webcron’ aan.
Kijk met de File Station van de Synology NAS of er een gedeelde map met de name ‘web’ is, die door de NAS-uitbreiding Web Station aangemaakt is. Als het goed is, staat daar dan een eenregelig script. Als dat niet zo is, moet je een ‘Nieuwe gedeelde map maken’ en een share met de naam ‘webdienst’ aanmaken waarop alleen administrators toegang hebben (‘Toegang beperken tot uitsluitend beheerders’), die zowel mogen lezen als schrijven.
Maak met een editor een bestand aan met de naam webcron.sh en zet daar de regel curl http://www.ct.nl/cron.php in. Dat bestand kopieer je met File Station naar de web(dienst)-share.
Ga bij het Configuratiescherm naar Taakplanner en vervolgens naar ‘Maken / Geplande taak / Door de gebruiker gedefinieerd script’. Op het tabblad ‘Planning’ stel je als frequentie ‘Elke 15 minuten’, waardoor de taak elk kwartier uitgevoerd zal worden, en de laatste uitvoeringstijd zet je op 23:45. Bij ‘Taakinstellingen’ zet je de volledige padnaam van het script: /volume1/web
[dienst]
/webcron.sh.
Daarmee is de basisinstallatie van Nextcloud klaar en kun je er via de browser verder mee aan de slag om uitbreidingen te installeren en gebruikers aan te maken.
Auto-updates en meer
Met behulp van een Docker-tool zoals Watchtower kun je automatisch alle draaiende containers (ook Watchtower zelf) laten updaten. De installatie daarvan is wel iets omslachtiger. Verder kun je Nextcloud nog handiger maken met allerlei uitbreidingen. Daarmee komen ook meer synchronisatiemogelijkheden met smartphones beschikbaar.
(Ernst Ahlers, c’t magazine)
Met uitbreidingen (apps) maak je Nextcloud nog veelzijdiger:
Blijf op de hoogte van de nieuwste informatie en tips! Schrijf je in voor de nieuwsbrief:
- Ontdek hoe je veilig blijft zonder nieuwe pc te kopen.
- Big Tech onder de loep
- Alles over Wi-Fi 8
Tip!
Ontworpen voor creators en professionals: configureer jouw eigen ASUS ProArt P16 nu.


Praat mee