Q1, hoofdstuk 2: Een website opzetten met een domein en SSL in een Docker-container
Waarom Ghost CMS?
Mijn eerste website (1999) was gebouwd met StarOffice 4.0 en had HTML met frames. Rond 2002 stapte ik over naar een PHP-gebaseerd blogscript, heb kort Mambo/Joomla gebruikt en sinds 2009 gebruik ik WordPress voor de meeste van mijn websites. Tot voor kort.
WordPress is nog steeds een geweldig stuk software. Maar toen ik op zoek ging naar opties om een abonnementsmodel aan een van mijn sites toe te voegen, kwam ik Ghost tegen. Publicatiesoftware met ingebouwde nieuwsbrief- en abonnementsfunctionaliteit. Net als WordPress is Ghost open-source. Maar in tegenstelling tot WP heeft het geen uitgebreide bibliotheek met add-ons. Je zou kunnen zeggen dat dit een beperking is, maar omdat ik minder tijd wil besteden aan het onderhouden van mijn sites, sta ik open voor een eenvoudigere oplossing. En het lijkt gewoon alle functies te hebben die een van mijn sites nodig heeft.
Aangezien Ghost is gebouwd op Node.js, kan het niet worden geïnstalleerd op de meeste shared hostingpakketten. Perfect om de kracht van Docker te laten zien.
Ik faalde meerdere keren
Tot nu toe heb ik niet veel mislukkingen genoemd. Maar deze keer ging het meerdere keren mis! Waarom? Omdat het niet simpelweg kopiëren en plakken is, het is iets complexer.
Eerste stappen: de site opzetten
Ghost heeft, net als WordPress, een beheerde oplossing: Ghost (Pro). Dit is hun om de kosten te dekken. De open-source informatie vind je via Product > For Developers. Door op de installatie-instructies te klikken, word je doorgestuurd naar Docker Hub, een plek waar veel Docker-images zijn opgeslagen.
Het eerste deel van de beschrijving behandelt de CLI-installatie van Ghost, maar we slaan dat over en gaan direct naar het voorbeeld van een docker-compose.yml:
version: '3.1'
services:
ghost:
image: ghost:5-alpine
restart: always
ports:
- 2369:2368
environment:
# see https://ghost.org/docs/config/#configuration-options
database__client: mysql
database__connection__host: db
database__connection__user: root
database__connection__password: example
database__connection__database: ghost
# this url value is just an example, and is likely wrong for your environment!
mail__transport: SMTP
mail__options__host: xxx
mail__options__port: xx
mail__options__secureConnection: "true"
mail__options__auth__user: xx
mail__options__auth__pass: xx
mail__from: xxx
url: https://befrankwith.me
volumes:
- ghost:/var/lib/ghost/content
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db:/var/lib/mysql
volumes:
ghost:
db:
Wat gebeurt er in deze YML?
- image: ghost:5-alpine → Dit verwijst naar de afbeelding die je wilt installeren.
- ghost is de naam, 5 is de versie (je kunt ook een specifiekere versie gebruiken, zoals 5.85 of 5.85.1).
- alpine verwijst naar een lichte Linux-versie.
This image is based on the popular Alpine Linux project, available in the alpine official image. Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general. This variant is useful when final image size being as small as possible is your primary concern. The main caveat to note is that it does use musl libc instead of glibc and friends, so software will often run into issues depending on the depth of their libc requirements/assumptions. See this Hacker News comment thread for more discussion of the issues that might arise and some pro/con comparisons of using Alpine-based images.
Als ik naar de verschillende images kijk, is het verschil ongeveer 170MB vs. 150MB. Op basis van testen kun je later altijd wisselen en - omdat ik de helft begrijp uit deze quote - heb ik besloten om het weg te laten.
- Ports: Het eerste getal is de openbare poort. Als je meerdere (identieke) services draait, kun je dit aanpassen.
Kopieer dit naar Dockge in een nieuwe stack en vervang de placeholders.
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_USER: root
MYSQL_DATABASE: ghost
Wat met de SMTP-instellingen?
Alle e-mails die Ghost verstuurt - behalve nieuwsbrieven - gaan via het e-mailaccount dat je hier instelt. Dit geldt voor systeemmails zoals import voltooid en voor e-mails naar nieuwe aanmeldingen of reacties.
Start de stack
Nu kun je de stack starten. De site is bereikbaar op http://<<VPS-IP>>:2369 (of een andere poort als je deze hebt aangepast).
🔹 Let op: Als iets niet werkt, zoals e-mails die niet verzonden worden, pas dan de YML aan, sla op en herstart de stack.
Domeinnaam en SSL instellen
- Ga naar de DNS-instellingen van je domeinnaam en voeg een A-record toe dat verwijst naar het IP-adres van je VPS.
- Bijvoorbeeld:
example.befrankwith.me A <<IP>>
- Bijvoorbeeld:
- Ga naar je Nginx Proxy Manager (
<<IP>>:81
) en voeg de details toe. Gebruik het poortnummer voor Ghost uit de YML. - In de tab SSL kun je een certificaat aanvragen. Dit zou nu moeten werken.
Member discussion