Radicale

Radicale is a lightweight CalDAV and CardDAV server for syncing calendars and contacts across devices.

This compose file deploys Radicale. Calendar and contact data is stored on an NFS volume, and the service is proxied through a Traefik reverse proxy with Cloudflare TLS certificates.

Docker Compose

# compose.yaml

services:
  radicale:
    image: tomsquest/docker-radicale
    container_name: radicale
    restart: unless-stopped
    # ports:
    # - 5232:5232
    networks:
      - radicale_proxy
    volumes:
      - type: volume
        source: docker-nfs
        target: /data
        volume:
          subpath: radicale/data
    init: true
    environment:
      TZ: Europe/London
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=radicale_proxy"

      - "traefik.http.services.radicale.loadbalancer.server.port=5232"

      - "traefik.http.routers.radicale.rule=Host(`radicale.${TRAEFIK_BASE_URL}`)"
      - "traefik.http.routers.radicale.entrypoints=websecure"
      - "traefik.http.routers.radicale.tls.certresolver=cloudflare"

volumes:
  docker-nfs:
    driver: local
    driver_opts:
      type: nfs
      o: addr=xxx.xxx.xxx.xxx,nolock,soft,rw,nfsvers=4.2
      device: :/mnt/nfs-volume

networks:
  radicale_proxy:
    name: radicale_proxy

Environment Variables

# .env

TRAEFIK_BASE_URL=

Traefik Configuration

# compose.yaml (excerpt)

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    ...
    networks:
      - traefik
      # here
      - radicale_proxy
    ...

networks:
  # here
  radicale_proxy:
    name: radicale_proxy