If you’re looking on how to run an equivalent website on your server, this is the place. The software is SilverBullet.

Your actually have to run the software 2 times, one in editing mode, and one in read-only mode. The editing mode will require authentication, the read-only will be open to the internet.

Of course, if you only want to use SilverBullet for yourself, feel free to remove the while read-only part entirely.

Setting up

You’ll need 2 URLs with an A field to your server. Check with your registar the exact process.

Then, you have to setup a place to store your notes (it’s basic markdown, don’t expect a lot disk usage). If you’re setting up for a specific user, create for example the folder /home/user/notes.

Finally, the docker/caddy container must be up and running. So go follow that guide and come back once that is done.

environment variables

CADDY_NETWORK='caddy docker network - eg : caddy'
SB_NOTES_FOLDER='folder where your notes will live, has to exist'
SB_USER='username for the editable site'
SB_PASSWORD='password for the editable site, in clear text, sorry'
SB_INDEX_PAGE='the name of the index page - eg : hello'
SB_RW_PORT='the internal port for the editable site - eg: 3000'
SB_RW_URL='the URL for the editable site'
SB_RO_PORT='the internal port for the read-only site - eg: 3001'
SB_RO_URL='the URL for the read-only site'

docker-compose file

name: silverbullet 

services:
  rw:
    image: ghcr.io/silverbulletmd/silverbullet:latest
    restart: unless-stopped
    volumes:
      - $SB_NOTES_FOLDER:/space
    environment:
      - SB_PORT=$SB_RW_PORT
      - SB_USER=$SB_USER:$SB_PASSWORD
      - SB_INDEX_PAGE=$SB_INDEX_PAGE
    networks:
      caddy: {}
    labels:
      caddy: $SB_RW_URL
      caddy.reverse_proxy: "{{upstreams $SB_RW_PORT}}"

  ro:
    image: ghcr.io/silverbulletmd/silverbullet:latest
    restart: unless-stopped
    volumes:
      - $SB_NOTES_FOLDER:/space
    environment:
      - SB_PORT=$SB_RO_PORT
      - SB_READ_ONLY=true
      - SB_INDEX_PAGE=$SB_INDEX_PAGE
    networks:
      caddy: {}
    labels:
      caddy: $SB_RO_URL
      caddy.reverse_proxy: "{{upstreams $SB_RO_PORT}}"

networks:
  caddy:
    external: true
    name: $CADDY_NETWORK