Zelf hosten van je eigen blog (met Ghost)

Je eigen blog opzetten en hosten kan een hele toer zijn. Tegenwoordig is het best eenvoudig. Heb je een Synology? Dan heb ik hier een guide die je er stapsgewijs doorheen helpt.

Zelf hosten van je eigen blog (met Ghost)

Zelf je eigen blog hosten klinkt misschien als een hele toer, maar eigenlijk valt het best wel mee. Ja, je moet wel een beetje handig zijn met computers, en je schoonmoeder zal het vast niet voor elkaar krijgen zonder hulp. Er is genoeg over geschreven en als je toch ergens vast loopt, is er genoeg hulp te krijgen op diverse fora.

In deze blogpost neem ik als voorbeeld het zelf hosten van je blog op een Synology NAS, en heb ik gekozen voor Ghost blog software. Het leuke is, dat je met deze methode met hetzelfde gemak straks ook Wordpress, Joomla of Drupal zou kunnen starten. En wat helemaal mooi is, je hebt het eerste deel van deze handleiding dan al uitgevoerd, dus dat scheelt weer tijd! Dan kan je letterlijk binnen 5 minuten een volledig onafhankelijk zelf gehost blog draaiende hebben.

Wanneer je het voorbereidend werk meetelt, een Synology NAS[1] in bezit hebt, en je hebt deze geüpdatet naar op zijn minst versie 5.2, kun je binnen 15 minuten al aan het tikken zijn en je eerste blogpost schrijven.

Het is een aardige handleiding geworden, en ik raad dan ook aan om deze van start tot eind te doorlopen. Hieronder toch maar even een inhoudsopgave, zodat het allemaal wat overzichtelijker wordt hopelijk.

INHOUDSOPGAVE

  1. Je Synology voorbereiden
    1.1 Internetverkeer goed doorsturen
    1.2 Package Center
    1.2.1 Docker installeren
    1.3 Binnenkomend verkeer op Synology naar de juiste containers sturen
    1.3.1 Start Docker
    1.3.2 Software zoeken en downloaden
    1.3.3 Software starten in eigen container
    1.3.4 Nginx container configureren
    1.3.4.1 Controleren Nginx container
    1.3.5 Nginx container starten
  2. Ghost blog installeren en instellen
    2.1 Ghost blog zoeken, downloaden, instellen
    2.2 Ghost blog starten
    2.2.1 Ghost is wel gestart, maar ik kan er niet bij via de browser!
    2.3 Lekker bloggen!

Wat het makkelijker maakt straks om je blog direct online aan te bieden, is dat je alvast een domeinnaam hebt gekocht en deze naar je ip-adres van je router hebt doorgestuurd of dit laten doen. Ik heb bijvoorbeeld www.timhuesken.nl gekocht voor €9 per jaar.

1. Je Synology voorbereiden

Er zijn een aantal dingen die we willen instellen op de Synology, zodat je blog straks direct te vinden is, ook van buitenaf. We gaan zorgen dat internetverkeer netjes bij je Synology terecht komt door de poorten goed in te stellen op je router, en we gaan de onderliggende software instellen die ons straks in staat stelt om met een simpele opdracht het blog te starten.

1.1 Router instellen voor je Synology

Zorg ervoor dat je Synology een verbinding met het internet heeft, en dat binnenkomend verkeer op poort 80 netjes naar je Synology wordt doorgestuurd. Wanneer iemand naar een website gaat, wordt er door elke browser standaard uitgegaan dat men naar poort 80 wilt gaan, tenzij anders aangegeven. Om straks wat gerommel met poorten te voorkomen, is het verstandig om een poort door te sturen op je router. In dit geval poort 80 naar het interne netwerk (naar het ip-adres van je Synology) op poort 8080 (dit mag ook een andere poort zijn). Dit geldt vanaf DSM 6.x, ofwel xpenology 6.x ook voor de https poort 443. Ik kwam er recent achter dat dit dan niet meer goed werkt. Pak dus bijvoorbeeld poort 4433.

Kort gezegd: Router > poort doorsturen >

  • externe poort 80, doorsturen naar interne poort 8080
  • externe poort 443 doorsturen naar interne poort 4433[1:1]

Wanneer je dit hebt geregeld, ga je naar het beheersgedeelte van je Synology, vaak te vinden op het ip-adres van je Synology, poort 5000. Bijvoorbeeld zal de volgende URL je hier brengen: http://192.168.1.2:5000. Log in met het beheerdersaccount en wachtwoord en ga naar het 'Package Center'.

1.2 Package Center

In het Package Center van Synology staan allemaal kant-en-klare apps met allerlei soorten software. Omdat er nog geen package is voor Ghost, gaan we dit op een andere manier oplossen. Er is namelijk een stukje software, Docker, wat je Synology zal omtoveren tot een apparaat wat eigenlijk alle software die er is, zou kunnen gaan draaien. Het bouwt als het ware een virtuele omgeving bovenop het bestaande bestuurssysteem en leent de basis functies van dit bestuurssysteem binnen de verschillende 'zandbakken' die je kunt opstarten. Binnen Docker noemen ze dit 'containers'.

Zo'n container moet je zien als een afgebakende omgeving, waar jij bepaald wat er wordt gedaan en uitgevoerd. Hier gaan we straks Ghost laten draaien. Docker is daarnaast in staat om op een veilige manier te communiceren met de wereld buiten de zandbak, waardoor jij nu bijvoorbeeld in staat bent om deze blogpost te lezen!

1.2.1 Docker installeren

Zoek in het Package Center naar het pakket van Docker en klik op installeren. Zodra dit gebeurt is, ben je er eigenlijk al klaar voor om je blog op te gaan starten.

[Docker installeren Docker installeren op je Synology

Om ervoor te zorgen dat het internetverkeer je blog netjes weet te vinden, zijn er nog wel wat instellingen nodig die we moeten uitvoeren wanneer we het blog willen gaan starten.

1.3 Binnenkomend verkeer op Synology naar de juiste containers sturen

We hebben hiervoor de router al juist ingesteld en ervoor gezorgd dat de basis voor je Ghost blog er staat. Nu moeten we alleen nog zorgen dat we straks ook onze container gemakkelijk op de juiste manier kunnen instellen.

Het internetverkeer komt aan op je Synology, maar we moeten dit nog naar de juiste container leiden, en ervoor zorgen dat deze container straks ook snapt wat het met deze verzoeken moet doen.

Om het verkeer naar de juiste zandbakken van Docker te leiden, is er een simpele ingreep nodig. Start Docker op binnen je beheersomgeving van je Synology. Je kunt deze vinden door linksboven de lijst met apps op te vragen. Hier staat Docker tussen.

1.3.1 Start Docker

[Docker starten op jDocker starten op je Synology

Nadat je Docker hebt gestart zul je een overzichts pagina zien waar nu nog weinig informatie zal staan.

[Kale Docker overzicKale Docker overzichtspagina

1.3.2 Software zoeken in downloaden

Klik nu op Register en zoek naar jwilder of nginx. We zijn op zoek naar de 'Automated Nginx reverse proxy for docker containers' van jwilder. Klik het zoekresultaat aan en klik als laatste op downloaden.

[Zoeken naar jwilderZoeken naar jwilder/nginx docker image

1.3.3 Software starten in eigen container

Wanneer de software is gedownload, kunnen we naar de volgende stap, en dat is 'Image'. Zoek binnen dit gedeelte naar de software die we hebben laten downloaden, selecteer deze door er 1 keer op te klikken en kies voor 'Starten'. Kies daar voor Starten met Docker uitvoeren voor nu.

[Start de docker imaStart de docker image met instructies

1.3.4 Nginx container configureren

We krijgen nu een simpel scherm te zien waar wordt gevraagd een opdrachtregel in te vullen. Vul hier de volgende code in:

docker run -d --name nginx -p 8080:80 -p 4433:443 -v /volume1/docker/nginx/certs:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

Deze opdrachtregel is uniform en maakt het makkelijker voor nu om snel te starten. Je hoeft nu namelijk alleen nog even door de opties heen te lopen en ze te controleren. Invoeren hoeft nu niet meer. Dit is zo, omdat we voor de optie zonder wizard hebben gekozen bij de vorige actie.

EDIT:

Het kan zijn dat je de opdrachtregel niet via de wizard kan invoeren zoals hier beschreven. Het kan echter wel gedaan worden m.b.v. de command-line via een SSH verbinding.

 

[Voer de Docker imagVoer de Docker image instructies in op de opdrachtregel

1.3.4.1 Controleren Nginx container

Doorloop nu de informatie door een aantal keer op volgende te klikken en bekijk de gegevens even. Misschien heb je een tik-fout gemaakt?

[Controleer hetgeen Controleer hetgeen je hebt opgegeven, misschien zijn er tikfouten gemaakt

1.3.5 Nginx container starten

Wanneer je bij het laatste scherm bent aangekomen, vergeet dan niet het vinkje 'Voer deze container uit nadat de wizard is voltooid' aan te vinken zoals hier beneden aangegeven.

[Start de nginx contStart de nginx container

Voila, je hebt nu een webserver die verzoeken van het internet afvangt en deze netjes kan doorsturen naar de juiste container(s).

Ik heb je dit laten doorlopen zodat je straks met het grootste gemak meerdere blogs zou kunnen starten, mocht je dit graag willen. Of bijvoorbeeld andere software wilt gaan draaien en het internetverkeer op een nette manier snel en efficiënt naar de juiste container wilt gaan loodsen.

Credits ook voor Jason Wilder, die een volledig ingestelde image van Nginx beschikbaar heeft gesteld, die in staat is om dit allemaal in goede banen te leiden, zonder tussenkomst van jou, de beheerder. Anders zou je namelijk bij iedere blog of website die je zou willen aanbieden, de hele regels voor het routeren van het verkeer, iedere keer opnieuw handmatig moeten gaan aanmaken.

Dit is de voorbereiding die nodig is om nu (eindelijk?!) je Ghost blog te kunnen gaan opstarten en lekker te kunnen gaan bloggen.

2. Ghost blog installeren en instellen

Je Synology is nu helemaal voorbereid om je eigen Ghost blog te gaan hosten. Eventueel kun je ook allerlei andere software gaan laten draaien, maar daar heb ik het in deze blogpost nu niet over.

Ik heb dit blog draaien op Ghost, waar ik een tijdje geleden tegenaan liep toen ik Wordpress eigenlijk wel een beetje zat was. Ik had behoefte aan iets nieuws (esthetisch ben ik ook erg gecharmeerd van de standaard looks van Ghost - dat Casper als thema standaard mee levert) en Ghost is technisch gezien moderner, lichter qua server belasting en gewoon lekker simpel en kaal. Dat is ook zo'n beetje hun motto, 'Just a blogging platform'.

2.1 Ghost blog zoeken, downloaden, instellen

Goed, we gaan nu wat sneller door de stappen van het maken van een Docker container heen, want eigenlijk is het niet veel spannender dan wat we eerder hebben gezien bij de voorbereiding.

Start Docker op je Synology en zoek in het register naar Ghost. Als het goed is zie je de volgende resultaten:

[Download de ghost iDownload de ghost image in het register

Ga nu naar het onderdeel Image en selecteer Ghost en kies voor 'Starten met Docker uitvoeren', want we gaan weer met een opdrachtregel starten, voor het gemak en de snelheid.

docker run --name mijn-ghostblog -d -p 84:2368 -e VIRTUAL_PORT=84 -e VIRTUAL_HOST=www.jouwdomeinnaam.nl,jouwdomeinnaam.nl -e NODE_ENV=production -v /volume1/docker/ghost/mijn-ghostblog:/var/lib/ghost ghost

Voordat je de container start, lees onderstaand even rustig door:

Hierboven staat in de code www.jouwdomeinnaam.nl,jouwdomeinnaam.nl. Voor mijzelf heb ik hier natuurlijk www.timhuesken.nl ingevuld, maar als je dus zelf een blog wilt starten is dit nu de plek waar je jouw eigen domein invuld.

Wat doet dit commando verder?

  • Het maakt een container met de naam mijn-ghostblog aan en laat deze permanent draaien -d als daemon
  • Wij vertellen Docker dat de container verkeer op poort 84 wil ontvangen -p 84:2368 en dat de container intern het verkeer naar Ghost doorstuurt op poort 2368, wat een standaard poort voor Ghost is.
  • Omdat we aangeven dat de -e VIRTUAL_HOST=www.jouwdomeinnaam.nl,jouwdomeinnaam.nl is, zal Nginx alle aanvragen voor deze URLs netjes doorsturen naar deze container. Dit is dus mogelijk omdat we de Nginx software van Jason Wilder gebruiken
  • De container zal via Nginx het verkeer op poort 84 ontvangen dankzij -e VIRTUAL_PORT=84.
  • We geven aan dat de basis van Ghost, Node.js, onze Ghost installatie in Productie mode moet gaan draaien met behulp van -e NODE_ENV=production. Hier kunnen we dadelijk gebruik van maken bij het instellen van Ghost.
  • En als laatste maar niet geheel onbelangrijk; -v /volume1/docker/ghost/mijn-ghost-blog:/var/lib/ghost zorgt ervoor dat op mijn Synology er een folder wordt gelinkt aan de folder binnen Ghost, waar alle belangrijke informatie staat. En dit laatste is ook direct het mooie van Docker. Ik kan straks de container weggooien, of als deze om wat voor reden dan ook niet meer wil werken... Ik heb dankzij deze link al mijn gegevens nog!
  • Het allerlaatste stukje aan het eind van de regel ghost, na de gelinkte folder, is niets meer dan de opdracht aan Docker om de image van Ghost te gebruiken.

Misschien geeft bovenstaand iets meer inzicht in hoe Docker nu in elkaar steekt en wat je er eigenlijk allemaal mee kunt bouwen. Maar goed, dat is voor een andere keer. Laten we nu eindelijk eens het blog gaan starten!

2.2 Ghost blog starten

Wanneer je eerder genoemde opdrachtregel weer door de 'Start met Docker uitvoeren' haalt, en kiest om de container uit te voeren wanneer de wizard voltooid is, kun je nu naar www.jouwdomeinnaam.nl gaan en zul je Ghost zien draaien!

Mocht dit niet zo zijn, dan is er nog 1 dingetje wat we even moeten doen, en dat is het volgende:

2.2.1 Ghost is wel gestart, maar ik kan er niet bij via de browser!

Het kan zijn dat, en waarschijnlijk is dat ook zo, we nog even Ghost moeten instellen op de achtergrond.

Sinds de komst van versie 2.0.0 van ghost zijn er een aantal zaken veranderd. Zo is er geen config.js meer zoals eerst beschreven in deze blogpost. Wat er nu in de plaats is gekomen is de mogelijkheid om via een Docker variabele de url in te stellen: -e url=http://jouwdomeinnaam.nl. Hierdoor wordt de config.production.json voorzien van de waarde van het domein waarop Ghost moet worden aangeboden. Mocht dit niet lukken, kan je altijd je container via de ssh terminal benaderen door docker exec -it mijn-ghostblog bash in te voeren. Hierna kun je naar de juiste plek navigeren en met commando vi /var/lib/ghost/config.production.json een aanpassing doen. Ga met de cursor naar de juiste regel waar de url staat vermeldt, druk op insert, ga naar het stukje met http://localhost:2368 en vervang dit met http://jouwdomeinnaam.nl. Druk op escape, gevolgd door :w, ENTER, :q, exit, ENTER.

2.3 Lekker bloggen!

Ga naar Docker en rechtsklik op je Container van Ghost. Kies voor 'Actie' en klik vervolgens op 'Opnieuw opstarten'. That's it!

Je blog moet nu toch echt werken. Ga naar www.jouwdomeinnaam.nl, stel wat zaken in en volg de tutorial van Ghost!

Is het nu toch nog niet gelukt? Laat even een reactie achter hieronder en ik zal je proberen te helpen.

Eventueel zou je het volgende kunnen proberen:

  1. Installeer de node.js package van Synology via het Package Center (de play edities kunnen namelijk wel node.js draaien, wat Ghost blog weer als basis gebruikt)
  2. Open een SSH terminal via Putty naar je NAS
  3. Gebruik de volgende gids om Ghost blog te installeren

  1. Vanaf versie 6.x van Synology blijkt dat poort 443 ook wordt doorgezet naar de management pagina, en dat er niets aan te veranderen is. Daarom deze oplossing op basis van je eigen router. ↩︎ ↩︎