Shared Physics
by Roman Kudryashov
Shared Physics

GitGhost: An Automated Git + HTML Backup Script

Published on 1 min read

GitGhost is a python/shell script lets you automate git-based .html backups of your Ghost CMS content and metadata. You can find the full code here:

https://github.com/sharedphysics/GitGhost

I created GitGhost after noticing that a lapsed card on my AWS account meant that my entire Ghost installation was almost erased. My server-based backups would have been erased too, which drove home the need for 3rd-party backups.

Getting Started

GitGhost works by accessing your Ghost API to pull down JSON content, then iterating through that content to create a browsable directory with .html files. It also creates a full .json backup for you to manipulate later if needed.

Create a Custom API

In the Custom Integrations area (yourdomain/ghost/#/settings/integrations), click on + add a custom integration and give it a name.

Copy the Content API Key and the API URL.

Set Up the Python Script

In GitGhost.py line 6, set your request.get() url to be: [YOUR DOMAIN]/ghost/api/v3/content/posts/?key=[CONTENT API KEY]&include=tags,authors&limit=all'

GitGhost has a few dependencies. Run pip install -r requirements.txt in your GitGhost directory to set them up.

If you want to configure what metadata is being written, you can adjust it from available variables here: (https://ghost.org/docs/api/v3/content/)

Running the Script Locally

To run the script one time & save locally, type the following in your GitGhost directory: python3 GitGhost.py

Running & Committing to GitHub

To run the script & commit to github, clone this GitGhost repo & give it a new name. I recommend [YOURSITE-Backups] because that will make it super clear what you're pushing to.

Copy/open the new repo to your computer and cd into it.

Make the automate.sh script actionable by typing: chmod +x automate.sh Then run the script as ./automate.sh

Coming Soon

  • Write a full backup backup.json for full restores
  • Writing more metadata from posts.
  • Writing settings as a backup.
  • Creating a .html index to navigate your posts locally, because why not?

Thanks for reading

Was this useful? Interesting? Have something to add? Let me know.

Seriously, I love getting email and hearing from readers. Shoot me a note at hi@romandesign.co and I promise I'll respond.


You can also sign up for email or RSS updates when there's a new post.

Thanks,
Roman