Skip to content
/ favre Public

A Docker container for automatically synchronizing files among swarm nodes at scale.

License

Notifications You must be signed in to change notification settings

coryaent/favre

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Favre

Codacy grade Libraries.io dependency status for latest release Docker Image Size (tag)

Favre is a wrapper around Csync2 for automatic, eventually-consistent file synchronization within a Docker Swarm.

Configuration

Many of the configuration options available for Csync2 are available for Favre. These environmental variables will be rendered into a file /run/csync2/csync2.cfg prior to running csync2.

CSYNC2_AUTO: defaults to younger

CSYNC2_DB_DIR: advised to persist with docker volume, default /var/lib/csync2; this is where Csync2 stores its state

CSYNC2_KEY_FILE: mandatory, no default, should be stored as a docker secret

CSYNC2_INCLUDE: paths to include in the sync; more than one line can be rendered by setting CSYNC2_INCLUDE_0, CSYNC2_INCLUDE_1, etc.

CSYNC2_EXCLUDE: patterns to exclude from sync; more than one line can be rendered in the same manner as CSYNC2_EXCLUDE_0, CSYNC2_EXCLUDE_1, etc.

CSYNC2_BACKUP_DIRECTORY: optional, no default

CSYNC2_BACKUP_GENERATIONS: optional, no default

CSYNC2_SYSTEM_DIR: optional, defaults to /run/csync2

CSYNC2_DAEMON_VERBOSITY: optional, defaults to -v

CSYNC2_CLIENT_VERBOSITY: optional, defaults to -v

CSYNC2_SYNC_INTERVAL: mandatory, defaults to 5000 (ms)

FAVRE_TASKS_ENDPOINT: must be set to "tasks.{{.Service.Name}}." for discovery

Compose

It is imperative that hostname not be changed. The values from a reverse DNS lookup must be marshalled to match this hostname.

version: "3.8"

services:
  sync:
    image: coryaent/favre
    hostname: "{{.Service.Name}}.{{.Task.Slot}}.{{.Task.ID}}"
    secrets:
      - favre_key
    environment:
      CSYNC2_KEY_FILE: /run/secrets/favre_key
      CSYNC2_INCLUDE: /sync
      FAVRE_TASKS_ENDPOINT: "tasks.{{.Service.Name}}."
    networks:
      - internal
    volumes:
      - state:/var/lib/csync2/
      - sync:/sync/
    deploy:
      mode: global
      endpoint_mode: dnsrr

secrets:
  favre_key:
    external: true

networks:
  internal:
    attachable: false
    driver: overlay
    driver_opts:
      encrypted: "true"

volumes:
  state:
    driver: local
  sync:
    driver: local