Zo kun je je NAS als server gebruiken
Een nas biedt veel meer dan alleen netwerkopslag. Naast de standaardtoepassingen kun je gemakkelijk extra servertoepassingen installeren, zolang ze niet al te veeleisend zijn. Hoewel je veel toepassingen rechtstreeks op je nas zou kunnen installeren, bijvoorbeeld vanuit de bijgeleverde app-store, is het slimmer en veiliger om ze geïsoleerd te installeren, bijvoorbeeld in een Docker-container. We laten zien wat de mogelijkheden hiervan zijn en hoe je containers gebruikt op een nas van Synology of QNAP.
Op een NAS kun je prima toepassingen laten meedraaien waarvoor je anders bijvoorbeeld een pc, aparte server of Raspberry Pi zou moeten gebruiken. Er is niet alleen behoorlijk wat rekenkracht, maar ook veel opslag voorhanden én het apparaat staat altijd aan. Je zou natuurlijk toepassingen van de fabrikant zelf of van derden rechtstreeks op je NAS kunnen installeren, bijvoorbeeld vanuit de app-store, maar dat is niet altijd ideaal. Zo is niet iedere toepassing (in een actuele versie) beschikbaar en is de herkomst niet altijd vertrouwd. Ook kun je tegen installatie- en compatibiliteitsproblemen aanlopen. En de NAS zelf blijft ook niet ‘schoon’. Docker kan met zijn containertechnologie zulke problemen oplossen.
01 Wat is Docker?
Docker is gemaakt om het verspreiden van toepassingen te vereenvoudigen via images. Dat zijn een soort templates waarmee een container kan worden opgebouwd. Die bevat daarna alles wat een toepassing nodig heeft. Soms zijn meerdere containers nodig om het doel te bereiken. Denk aan een container met WordPress en een tweede met een MySQL-database. Gebruik je Docker via de opdrachtregel, dan is Docker Compose hierbij een uitkomst (zie kader). In deze masterclass richten we ons op de grafische gebruikersinterface van Synology en QNAP, waarmee je individuele containers kunt opzetten en eventueel koppelingen kunt maken. Overigens is Docker alleen op geschikte modellen beschikbaar, doorgaans zijn dat apparaten voorzien van een x86-processor. We gebruiken images van de officiële Docker Hub, maar eventueel kun je zowel bij Synology als QNAP ook alternatieven toevoegen.
©PXimport
Docker Compose
Voor toepassingen die meerdere containers vereisen, is Docker Compose vaak een redder in nood: in één configuratiebestand kun je de details voor alle containers definiëren. Voor het starten en stoppen van al die gestapelde containers volstaat vervolgens één opdracht: een simpele up of down. Bij Synology en QNAP kun je eventueel, als je inlogt via ssh, via de opdrachtregel Docker Compose gebruiken. In deze masterclass beperken we ons tot de grafische gebruikersinterface.
02 Netwerk en volumes
Enkele eigenschappen van Docker hebben vooraf wat uitleg nodig, zoals het netwerk. Het systeem waarop Docker draait – in dit geval de NAS – noemen we de host. Containers kunnen ditzelfde netwerk gebruiken, maar ook een geïsoleerd netwerk (met nat of bridgetechnologie). In dat laatste geval koppel je specifieke poorten van de container aan hostpoorten. Zo gebruikt de Nginx-container intern de standaard http-poort 80 die je aan een willekeurige vrije hostpoort koppelt, zoals 8888.
Het concept van volumes is ook belangrijk. Je kunt ze zien als mappen (bijvoorbeeld /config voor configuratiebestanden). Door deze buiten het bestandssysteem van de container te houden en te koppelen (ofwel te mounten) aan een (voor jou bereikbare) map op de NAS, blijven de gegevens daarin bijvoorbeeld bewaard bij een update en je kunt ze gemakkelijker bewerken. In deze masterclass passen we dit alles ook toe.
©PXimport
Wat voor toepassingen?
Docker op je NAS zul je wellicht niet voor alle toepassingen willen gebruiken. De NAS heeft al prima toepassingen voor bijvoorbeeld een vpn-server, downloads, back-ups en fotobeheer. Als je toch iets anders zoekt, kan Docker een uitkomst zijn. Dat geldt ook voor toepassingen die je niet of lastig kunt installeren op je NAS. Home Assistant bijvoorbeeld, het bekende pakket voor thuisautomatisering, vraagt handmatige aanpassingen op je NAS waarbij je via ssh moet inloggen. Het grijpt misschien dieper in dan je zou willen en je kunt niet zeker zijn dat het bij een update van de besturingssoftware op je NAS blijft werken. Soms is het heel lastig een geschikte toepassing te vinden die ook nog is gecompileerd voor jouw type NAS. Dat geldt bijvoorbeeld voor de UniFi Controller-software, voor het beheren van de netwerkproducten van Ubiquiti. Ook dan is Docker praktischer.
03 Installatie
Zowel bij Synology als QNAP kun je Docker direct installeren via de ingebouwde app-store. Bij Synology ga je hiervoor naar Package Center en zoek je Docker. Bij de installatie wordt standaard de map docker gemaakt. Hier kunnen we bepaalde volumes van containers aan koppelen, zodat die gegevens bewaard blijven en ook handmatig aangepast kunnen worden. Geef jezelf daarom toegang tot deze map. Ga hiervoor naar Configuratiescherm / Gedeelde map en selecteer de map docker. Kies Bewerken, ga naar het tabblad Machtigingen en geef jezelf lees- en schrijftoegang. Je kunt nu naar bijvoorbeeld \\diskstation\docker bladeren. Hier geven we straks iedere container een eigen map.
Bij QNAP zoek je Container Station in App Center. Als je het de eerste keer start, wordt gevraagd naar een map waar Container Station zelf al zijn data mag opslaan. Het is handig daarnaast ook nog zelf een map voor het koppelen van bepaalde volumes te maken. Ga hiervoor naar Configuratiescherm / Gedeelde mappen en maak een map, bijvoorbeeld appdata. Bij Configureer de toegangsprivileges voor gebruikers kies je Bewerken en geef jezelf met de optie RW lees- en schrijftoegang. Klik dan op Maken. Je kunt dan naar de nu nog lege map \\qnap\appdata bladeren. Het is ten slotte nog nodig om via Configuratiescherm / Gedeelde mappen op het tabblad Geavanceerde machtigingen de optie Schakel Geavanceerde mapmachtigingen in aan te zetten, zodat toegang tot diepere mappen (de bestanden gemaakt onder \appdata) geen rechtenconflict geeft.
©PXimport
04 Images downloaden
We nemen een installatie van de webserver Nginx als eenvoudig voorbeeld. We kiezen voor het image van LinuxServer.io (zie kader). De imagenaam is linuxserver/nginx. Je kunt hem opzoeken in de Docker Hub. Bij Synology open je Docker en kies je Register in het menu. Zoek met het trefwoord nginx, klik op het image genaamd linuxserver/nginx en dan Downloaden. Accepteer de voorgestelde tag (latest).
Bij QNAP open je Container Station. Ga dan naar Images en druk op Pull. Achter Registry is standaard al Docker Hub gekozen. Vul achter Image Name de imagenaam (linuxserver/nginx) in en klik op Pull om deze op de achtergrond te downloaden. Hierna vind je hem binnen ditzelfde onderdeel terug in de lijst.
©PXimport
LinuxServer.io
Diverse individuen en groepen zorgen voor het samenstellen, onderhouden en documenteren van images. We maken zelf graag gebruik van de images van LinuxServer.io. De containers zijn sterk op thuisgebruikers toegespitst, werken betrouwbaar en zijn goed gedocumenteerd. Deze pagina geeft een overzicht van het aanbod en de populariteit. Het is ook een goede plek om inspiratie op te doen voor leuke toepassingen die je via Docker kunt installeren.
©PXimport
05 Container maken (Synology)
Na het downloaden vind je het image terug onder Image en kun je de container starten. Het is handig de documentatie er bij te houden als referentie voor bepaalde instellingen. Klik dan op het image en kies Starten. Er opent een wizard voor de configuratie van de container. Klik op Geavanceerde instellingen. Ga naar het tabblad Volume en kies Map toevoegen. Blader in het dialoogvenster naar de map docker, maak daarin de nieuwe map nginx, wijs deze map aan en kies Selecteren. Onder het kopje Pad koppelen vul je /config in. Zoals ook in de documentatie staat, bevat deze map de websitecontent en configuratiebestanden. Ga naar Poortinstellingen. Vul onder Lokale poort in plaats van Automatisch een vaste waarde in voor koppeling met de containerpoort (bijvoorbeeld 8443 voor containerpoort 443 en 8888 voor containerpoort 80). Helemaal rechts staat (soms wat verscholen) het tabblad Milieu waar je omgevingsvariabelen kunt invoeren die worden meegenomen bij de configuratie van de container. Klik bijvoorbeeld voor de tijdzone op het plusteken, vul onder Variabele de tekst TZ in en met onder Waarde de tekst Europe/Amsterdam. Klik ten slotte op Toepassen en doorloop de wizard om de configuratie te voltooien. De welkomstpagina van Nginx kun je daarna bekijken op http://diskstation:8888 en https://diskstation:8443. Relevante bestanden zoals de indexpagina van de website en configuratie van Nginx zijn aangemaakt en toegankelijk via de bewuste map op je NAS, waar je ze ook kunt wijzigen.
©PXimport
06 Container maken (QNAP)
Bij QNAP maken we eerst handmatig in \\qnap\appdata een map nginx. Open dan Container Station en ga naar Images. Klik achter het image van Nginx op het plusteken om een container te maken. In het dialoogvenster kun je informatie zoals de naam en het gebruik van bronnen wijzigen. Ga naar Advanced Settings voor meer instellingen. Klik onder Environment op Add en voeg een omgevingsvariabele toe met als naam TZ en waarde Europe/Amsterdam. Onder Network volstaat de netwerkmodus NAT. Vul een hostpoort in (bijvoorbeeld 8443) om te koppelen aan containerpoort 443 (https-verkeer) en een tweede hostpoort (bijvoorbeeld 8888) voor de koppeling met containerpoort 80 (http-verkeer). Om volumes te koppelen, ga je naar Shared Folders en klik je bij het gedeelte Volume from host op Add. Blader in het linker invoerveld naar /appdata/nginx en vul onder Mount Point de tekst /config in. Klik ten slotte op Create en in het dialoogvenster met een samenvatting op Ok. De welkomstpagina zie je op bijvoorbeeld http://qnap:8888 en de map op je NAS bevat alle relevante bestanden.
©PXimport
07 Meer containers
Met bovenstaande instructies kun je gemakkelijk andere containers opzetten, bijvoorbeeld Heimdall (zie kader) met het image linuxserver/heimdall die eigenlijk dezelfde configuratiekenmerken heeft als het image van Nginx. Je kiest uiteraard wel andere poortnummers en een andere map op je NAS. Ook deze container kent het volume /config voor alle relevante bestanden. Soms zijn de koppelingen die je bij Synology tussen containers kunt maken handig. Neem bijvoorbeeld WordPress. Hiervoor maak je eerst een container met MySQL, met als tag versie 5.7.29 (versie 8.0 vereist namelijk aanpassingen in de container zelf). Koppel de poorten 3306 en 33060 aan bijvoorbeeld diezelfde poorten op de host. Voeg de omgevingsvariabele MYSQL_ROOT_PASSWORD toe met als waarde het gewenste wachtwoord voor de root-gebruiker van MySQL. Een tweede omgevingsvariabele MYSQL_DATABASE geef je als waarde wordpress. Die database wordt hierdoor automatisch gemaakt bij het starten. Maak hierna een container met het meest recente WordPress-image. Start deze container en koppel hierbij poort 80 aan een lokale poort (bijvoorbeeld 8123). Cruciaal is nu dat je bij Koppelingen op het plusteken drukt. Kies dan bij Containernaam de mysql-container en vul bij Alias de waarde mysql in. Dankzij deze koppeling zal, zodra je de container van WordPress start, de eerste configuratiestap (waarin je een database koppelt) niet nodig zijn en kun je direct de website-instellingen voor WordPress configureren als je naar http://diskstation:8123 gaat.
©PXimport
Heimdall-dashboard
Iedere dienst die je op je NAS installeert heeft vaak weer zijn eigen webinterface. Om nu en in de toekomst het overzicht te houden, is de webinterface Heimdall een uitkomst. Dat is in feite een simpele webserver die op een zelf in te delen dashboard alle diensten laat zien die je gebruikt, als een soort startpagina voor je thuisnetwerk. Je kunt daarbij diensten ook handig kunt groeperen in mappen. Heb je de container van Heimdall gestart? Ga dan naar de webpagina en voeg een applicatie toe. Vul bijvoorbeeld Synology in. Dat is één van de vele bekende apps waarvoor Heimdall direct een bijpassend icoontje laat zien en soms ook extra details. Voor SABnzbd kan het bijvoorbeeld je wachtrij en downloadsnelheid laten zien.
©PXimport
08 Processen volgen
Heb je containers gestart, dan zie je ze bij Synology samen met het processor- en geheugengebruik terug onder Overzicht. Bij QNAP ga je hiervoor naar Overview. Ook zijn er meer details over containers te vinden. Stel dat het starten van een container lang duurt, dan kun je opsporen of er iets fout is gegaan via een console. Bij Synology ga je hiervoor naar Container. Klik op de container en kies Details. Op het tabblad Logboek kun je zien wat er op de achtergrond gebeurt. Bij QNAP ga je naar Overview of Container en klik je op de naam van de container. Je ziet dan direct het consolescherm. Verder kun je zowel bij Synology als QNAP een terminalscherm openen.
©PXimport
09 Updates installeren
Er zullen regelmatig nieuwe images verschijnen met nieuwe versies van de toepassingen voor Docker. Je kunt ze relatief eenvoudig installeren én de gegevens behouden, zoals je dashboard in Heimdall en website in Nginx. Belangrijk is dat je de volumes hebt gekoppeld met een map op de NAS. Die gegevens worden namelijk nooit weggegooid. Bij Synology begin je met het downloaden van een nieuw image onder Register met de tag latest. Dit image zal het eerdere image op je NAS vervangen. Daarna ga je naar Container en klik je op de container. Kies Actie / Stoppen en dan Actie / Wissen. Start nu de container. Die wordt nu automatisch gerecreëerd op basis van de oude instellingen en gegevens, maar nu op basis van het nieuwe image.
Bij QNAP is de procedure iets omslachtiger. Stop eerst onder Overview de actieve container. Ga dan naar Images en haal de nieuwste versie van het image op. Maak vervolgens een nieuwe container op basis van het nieuwe image waarbij je precies dezelfde instellingen als voor de oude container gebruikt, inclusief de koppeling van het volume. Zowel Synology als QNAP biedt ook import- en exportmogelijkheden voor de instellingen en inhoud van containers.
©PXimport
Linux-containers: tegenhanger van Docker
Docker Station van QNAP ondersteunt naast Docker ook Linux-containers (LXC). Die gebruiken in feite dezelfde technologie, maar in het gebruik zijn er grote verschillen. In een Linux-container beschik je over een volledig Linux-besturingssysteem die de kernel met de host deelt, maar wel geïsoleerd is. Je kunt zo’n container inrichten en onderhouden als een ‘gewone’ Linux-server en bijvoorbeeld een typische LAMP-stack (Linux, Apache, MySQL en php) installeren. Nog een alternatief naast Docker en LXC zijn virtuele machines, waarmee je op enkele modellen van Synology en QNAP kunt werken. Kenmerkend is dat de hardware wordt geëmuleerd, zoals processor, netwerk, videokaart en opslag. Dat vraagt meer van het systeem, maar biedt ook voordelen, zoals een betere isolatie en de mogelijkheid bijvoorbeeld Windows te installeren.