52 Gollum

Gollum is a simple wiki system built on top of Git. A Gollum Wiki is simply a git repository (either bare or regular) of a specific nature:

  • A Gollum repository’s contents are human-editable, unless the repository is bare.
  • Pages are unique text files which may be organized into directories any way you choose.
  • Other content can also be included, for example images, PDFs and headers/footers for your pages.

Gollum pages:

  • May be written in a variety of markups.
  • Can be edited with your favourite system editor or IDE (changes will be visible after committing) or with the built-in web interface.
  • Can be displayed in all versions (commits).
Gollum Screenshot

As you’ll note in the (real world) screenshot above, my requirements for a personal wiki are:

  • Portable across my devices
  • Supports images
  • Full-text search
  • Supports inter-note links
  • Revision control

Gollum meets all these requirements, and as an added bonus, is extremely fast and lightweight.

oauth2 proxyto GitHub, GitLab, Google, etc

52.1 Ingredients


Docker swarm clusterpersistent shared storage
Traefik
keepalived

52.2 Preparation

Setup data locations

We’ll need an empty git repository in /var/data/gollum for our data:

mkdir /var/data/gollum
cd /var/data/gollum
git init

Prepare environment

  1. Choose an oauth provider, and obtain a client ID and secret
  2. Create gollum.env, and populate with the following variables (you can make the cookie secret whatever you like)
OAUTH2_PROXY_CLIENT_ID=
OAUTH2_PROXY_CLIENT_SECRET=
OAUTH2_PROXY_COOKIE_SECRET=

Setup Docker Swarm

Create a docker swarm config file in docker-compose syntax (v3), something like this:

with my patreon patronspremixgit pulldocker stack deploy
version: '3'

services:
  app:
    image: dakue/gollum
    volumes:
     - /var/data/gollum:/gollum
    networks:
    - internal
    command: |
      --allow-uploads
      --emoji
      --user-icons gravatar

  proxy:
    image: a5huynh/oauth2_proxy
    env_file : /var/data/config/gollum/gollum.env
    networks:
      - internal
      - traefik_public
    deploy:
      labels:
        - traefik.frontend.rule=Host:gollum.example.com
        - traefik.docker.network=traefik_public
        - traefik.port=4180
    volumes:
      - /var/data/config/gollum/authenticated-emails.txt:/authenticated-email\
s.txt
    command: |
      -cookie-secure=false
      -upstream=http://app:4567
      -redirect-url=https://gollum.example.com
      -http-address=http://0.0.0.0:4180
      -email-domain=example.com
      -provider=github
      -authenticated-emails-file=/authenticated-emails.txt

networks:
  traefik_public:
    external: true
  internal:
    driver: overlay
    ipam:
      config:
        - subnet: 172.16.9.0/24
my list

52.3 Serving

Launch Gollum stack

Launch the Gollum stack by running docker stack deploy gollum -c <path-to-docker-compose.yml>

Authenticate against your OAuth provider, and then start editing your wiki!

52.4 Chef’s Notes

1. In the current implementation, Gollum is a “single user” tool only. The contents of the wiki are saved as markdown files under /var/data/gollum, and all the git commits are currently “Anonymous”