Samba

Samba (+ optional zeroconf, wsdd2 & time machine) on alpine [x86 + arm]

Examples of the environment variable based configuration:

environment:
  ACCOUNT_bob: bobpass
  UID_bob: 1001
  GROUPS_bob: family
  # example for hashed password (user: foo | password: bar) - generated using create-hash.sh script.
  ACCOUNT_foo: "foo:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:86C156FC198B358CCCF6278D8BD49B6A:[U          ]:LCT-61B0859A:"
  UID_foo: 1002
  GROUPS_foo: family

  SAMBA_VOLUME_CONFIG_shared_home: "[Home]; path=/shares/homes/%U; valid users = alice, bob, foo; guest ok = no; read only = no; browseable = yes"
  SAMBA_VOLUME_CONFIG_alicehidden: "[Alice Hidden Share]; path=/shares/alice-hidden; valid users = alice; guest ok = no; read only = no; browseable = no"
  SAMBA_VOLUME_CONFIG_bobonly: "[Bob Share]; path=/shares/bob; valid users = bob; guest ok = no; read only = no; browseable = yes"
  SAMBA_VOLUME_CONFIG_public: "[Public]; path=/shares/public; valid users = alice, bob, foo; guest ok = no; read only = no; browseable = yes; force group = family"
  SAMBA_VOLUME_CONFIG_public_ro: "[Public ReadOnly]; path=/shares/public; guest ok = yes; read only = yes; browseable = yes; force group = family"
  SAMBA_VOLUME_CONFIG_timemachine: "[TimeMachine]; path=/shares/timemachine/%U; valid users = alice, bob, foo; guest ok = no; read only = no; browseable = yes; fruit:time machine = yes; fruit:time machine max size = 500G"

📜 Source: https://github.com/ServerContainers/samba
📦 Image: https://github.com/servercontainers/samba/pkgs/container/samba

name: samba
services:
  samba:
    image: ghcr.io/servercontainers/samba
    container_name: samba
    network_mode: host

    # uncomment to solve bug: https://github.com/ServerContainers/samba/issues/50 - wsdd2 only - not needed for samba
    # cap_add:
    #   - CAP_NET_ADMIN

    environment:
      MODEL: 'TimeCapsule'
      AVAHI_NAME: StorageServer

      SAMBA_CONF_LOG_LEVEL: 3

      # uncomment to disable optional services
      WSDD2_DISABLE: 1
      AVAHI_DISABLE: 1

      GROUP_family: 1500

      ACCOUNT_${ADMIN_USER}: ${ADMIN_PASSWORD}
      UID_${ADMIN_USER}: 1000
      GROUPS_${ADMIN_USER}: family

      # Public shares
      SAMBA_VOLUME_CONFIG_media_adminonly: "[media]; path=/shares/media ; valid users = ${ADMIN_USER}; guest ok = no; read only = no; browseable = yes"
      SAMBA_VOLUME_CONFIG_family_media_adminonly: "[family-media]; path=/shares/family-media; valid users = ${ADMIN_USER}; guest ok = no; read only = no; browseable = yes"

      # System shares
      SAMBA_VOLUME_CONFIG_mnt_adminonly: "[mnt]; path=/shares/mnt; valid users = ${ADMIN_USER}; guest ok = no; read only = no; browseable = no"
      SAMBA_VOLUME_CONFIG_backup_adminonly: "[backup]; path=/shares/backup; valid users = ${ADMIN_USER}; guest ok = no; read only = no; browseable = no"
      SAMBA_VOLUME_CONFIG_downloads_adminonly: "[downloads]; path=/shares/downloads; valid users = ${ADMIN_USER}; guest ok = no; read only = no; browseable = no"

    volumes:
      # kics-scan ignore-line
      - /etc/avahi/services/:/external/avahi

      - /mnt:/shares/mnt
      - ${STORAGE_MEDIA}:/shares/media
      - ${STORAGE_FAMILYMEDIA}:/shares/family-media
      - ${STORAGE_BACKUP}:/shares/backup
      - ${STORAGE_DOWNLOADS}:/shares/downloads

    restart: unless-stopped