I'm running this blog for nearly three years now. One of my first posts was the description how to setup Ghost for GitHub pages. In the past I've installed lots of tools on my Mac to run Ghost and Buster locally.
I still like this setup hosting only the static files at GitHub without maintaining an online server. But over time you also have to update Ghost, the Node version used and so on. That's why I have revisited my setup to make it easier for me to update Ghost by running all tools in Docker containers.
- Docker for Mac
git(is already installed)
docker-compose(already installed with D4M)
You can find my setup and all files in my GitHub repo StefanScherer/ghost-buster-docker.
As I'm upgrading from my local Ghost installation to this dockerized version I already have some content, the static files and my GitHub pages repo. Please refer to my old blog post how to create your repo. The following commands should give you an idea how to setup the two folders
git clone https://github.com/YOURNAME/ghost-buster-docker cd ghost-buster-docker mkdir content git clone https://github.com/YOURNAME/YOURNAME.github.io static
To simplify running Ghost and Buster I've created a
docker-compose.yml with all the published ports and volume mount points.
There are three services
version: '2.1' services: ghost: image: ghost:0.11.4 volumes: - ./content:/var/lib/ghost ports: - 2368:2368 buster: image: stefanscherer/buster command: /buster.sh volumes: - ./static:/static - ./buster.sh:/buster.sh preview: image: nginx volumes: - ./static:/usr/share/nginx/html:ro ports: - 2369:80
Edit content with Ghost
To create new blog post or edit existing posts you spin up the
ghost container with
docker-compose up -d ghost
and then open up your browser at
https://stefanscherer.github.io/ghost to login and edit content. As you can see the folder
content is mapped into the
ghost container to persist your Ghost blog data and images on your host machine.
Generate static files
To generate the static HTML pages we use the second service with Buster installed. This is no real service, so we do not "up" but "run" it with
docker-compose run buster
Now you have updated files in the
static folder. You may edit the local script
buster.sh to fix some links that Buster broke in the past in my pages.
Preview static files
From time to time it is useful to check the generated static HTML files before pushing them to GitHub pages. The third service is useful to run a webserver with the created static pages.
docker-compose up -d preview
Open your browser at
http://localhost:2369 and check if everything looks good. In my setup I've added Disqus and first wanted to try out the results of modifying the
post.hbs file of the theme.
Deploy static files
If you are happy with the new static files it's time to push them. I've added a small script
deploy.sh to do the final steps on the host as only
git is used here. As I'm using GitHub with SSH and a passphrase I don't want to put that into a container. Have a look at the shell script and you will see that it's only a
git add && git commit && git push script.
I think this setup will help me in the future to update Ghost more easily.
As always, please leave a comment if you have questions or improvements or want to share your thoughts. You can follow me on Twitter @stefscherer.