Docker Configuration

Stack: "edge"

This stack sets up the edge authentication via authelia, the caddy content delivery web proxy and the dashy dashboard.

Compose file in Docker Desktop
name: edge

services:
  caddy:
    image: caddy:2.11.1
    restart: unless-stopped
    ports:
      - "10.77.10.21:80:80"
      - "10.77.10.21:443:443"
    volumes:
      - D:/DockerData/Binds/edge/caddy/Caddyfile:/etc/caddy/Caddyfile:rw
      - D:/DockerData/Binds/antora/privsite:/data_private
      - D:/DockerData/Binds/antora/pubsite:/data_public
      - D:/DockerData/Binds/antora/playsite:/data_play
      - D:/DockerData/Binds/edge/caddy/data:/data
      - D:/DockerData/Binds/edge/caddy/config:/config
    healthcheck:
      test: ["CMD-SHELL", "wget -q -O /dev/null --spider http://127.0.0.1:2019/config/ || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    depends_on:
      authelia:
        condition: service_healthy
      dashy:
        condition: service_healthy
    networks:
      edge:
        aliases:
          - proxy.internal

  authelia:
    image: authelia/authelia:4.38.19
    restart: unless-stopped
    volumes:
      - D:/DockerData/Binds/edge/authelia:/config:rw
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:9091/api/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 20s
    environment:
      - TZ=America/New_York
    depends_on:
      redis:
        condition: service_healthy
    networks:
      edge:
        aliases:
          - authelia.internal

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--appendonly", "yes"]
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s
    networks:
      - edge

  dashy:
    image: lissy93/dashy:3.1.0
    restart: unless-stopped
    volumes:
      - D:/DockerData/Binds/edge/dashy/conf.yml:/app/user-data/conf.yml:rw
    environment:
      - NODE_ENV=production
      - BROWSERSLIST_IGNORE_OLD_DATA=true
    healthcheck:
      test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:8080/ || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      edge:
        aliases:
          - dashy.internal

networks:
  edge:
    external: true
    name: edge

volumes:
  caddy_data:
  caddy_config:
  redis_data:

Other files/configuration:

 — D:\DockerData\Binds\edge\authelia\

 — D:\DockerData\Binds\edge\caddy\

Table 1. D:\DockerData\Binds\edge\caddy\Caddyfile

xinclude::Xtest.t[]

 — D:\DockerData\Binds\edge\dashy\

D:\DockerData\Binds\edge\dashy\conf.yml
pageInfo:
  title: Portal
  description: Internal Services for the Home
  navLinks: []
sections:
  - name: Applications
    items:
      - title: Under Oath
        description: A Campaign Set in Viniculum
        url: https://caldris.4mailx.cc
        id: 0_1255_underoath
      - title: Log Out
        url: https://auth.4mailx.cc/logout
        target: sametab
        id: 1_1255_logout
  - name: Services
    items:
      - title: UniFi Router
        url: https://10.77.10.1
        id: 0_836_unifirouter
      - title: Reolink NVR
        url: https://reolink.gn.com
        target: newtab
        id: 1_836_reolinknvr
appConfig:
  theme: glass
  layout: auto
  iconSize: medium
  startingView: default
  defaultOpeningMethod: newtab
  statusCheck: false
  statusCheckInterval: 20
  faviconApi: allesedv
  routingMode: hash
  enableMultiTasking: false
  widgetsAlwaysUseProxy: false
  webSearch:
    disableWebSearch: false
    searchEngine: duckduckgo
    openingMethod: newtab
    searchBangs: {}
  enableFontAwesome: false
  enableMaterialDesignIcons: false
  hideComponents:
    hideHeading: false
    hideNav: false
    hideSearch: false
    hideSettings: false
    hideFooter: false
  auth:
    enableHeaderAuth: false
    headerAuth:
      userHeader: Remote-User
      proxyWhitelist: []
  showSplashScreen: true
  preventWriteToDisk: false
  preventLocalSave: true
  disableConfiguration: false
  disableConfigurationForNonAdmin: false
  allowConfigEdit: true
  enableServiceWorker: false
  disableContextMenu: false
  disableUpdateChecks: true
  disableSmartSort: false
  enableErrorReporting: false

Stack: "kroki"

Compose file in Docker Desktop
version: "3.8"

services:

  kroki:
    image: yuzutech/kroki:0.30.1
    restart: unless-stopped
    ports:
      - "8000:8000"

    environment:
      KROKI_CACHE_ENABLED: "true"
      KROKI_CACHE_DIR: /cache
      KROKI_CACHE_MAX_SIZE: 100000000

      KROKI_MERMAID_HOST: mermaid
      KROKI_MERMAID_PORT: 8002

    volumes:
      - kroki_cache:/cache

    depends_on:
      - mermaid

    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "-", "http://localhost:8000/plantuml/svg/eNpzzMlMTlXQtVNwyk_iAgAbygOn"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 15s


    networks:
      - edge


  mermaid:
    image: yuzutech/kroki-mermaid:0.30.1
    restart: unless-stopped
    networks:
      - edge


networks:
  edge:
    external: true


volumes:
  kroki_cache:

No external host configuration required, although that image, as it stands does not include asciidoctor-kroki. If you look at the batch file below for Antora you’ll see the call to yarn that merges it with the instance at invocation time.


Stack: "antora"

Deployed via the command-line, Antora doesn’t need a full stack running full time in- or out- of Docker. It’s invoked via a batch file containing the following:

build.cmd
@echo off
@echo Building Viniculum Documentation and Lore
git --git-dir=D:\DockerData\Binds\antora\src\.git --work-tree=D:\DockerData\Binds\antora\src add *
git --git-dir=D:\DockerData\Binds\antora\src\.git --work-tree=D:\DockerData\Binds\antora\src commit -m "Latest"
docker run --rm -v D:/DockerData/Binds/antora/src:/workspace -v D:/DockerData/Binds/antora/site:/site antora/antora:3.1.4 sh -lc "yarn global add asciidoctor-kroki && antora /workspace/site.yml --to-dir=/site --stacktrace"


@echo Done ...

Other files and binds

You’ll need:

D:\DockerData\Binds\antona\site\ (can be created empty. The Antora process will populate it.)

D:\DockerData\Binds\antona\src\ workspace folder containging the (minimum of)

¦   antora.yml
¦   site.yml
+---modules
¦   +---ROOT
¦       ¦   nav.adoc
¦       +---attachments
¦       +---examples
¦       +---images
¦       +---pages
¦       ¦       index.adoc
¦       ¦
¦       +---partials
+---ui
+---ui-supplemental

With a minimum:

antora.yml
name: caldris
title: Under Oath
version: latest
nav:
  - modules/ROOT/nav.adoc
  - modules/pcref/nav.adoc
  - modules/lore/nav.adoc
  - modules/geo/nav.adoc
  - modules/gmref/nav.adoc
  - modules/misc/nav.adoc
site.yml
site:
  title: Under Oath
  start_page: caldris::index.adoc

runtime:
  log:
    level: info
    format: pretty


content:
  sources:
    - url: .
      branches: HEAD

ui:
  bundle:
    url: ./ui/ui-bundle.zip
  supplemental_files: ./ui-supplemental


asciidoc:
  extensions:
    - asciidoctor-kroki
  attributes:
    kroki-server-url: http://host.docker.internal:8000
    kroki-fetch-diagram: true