digitalboard.core/roles/send
Simon Bärlocher bb64ccf71e
fix(send): assert S3 credentials when storage backend is s3
When send_storage_backend=s3 the role previously deployed the container
with whatever was in send_s3_* (often empty strings from the defaults).
The container would then start, accept uploads, and fail to persist
anything silently. Same pattern as the validate blocks in coturn,
talk, bookstack and opnform: fail fast at task time with a clear error
that points at the four missing variables.

Skipped entirely when send_storage_backend=local (the default).
2026-05-26 16:16:36 +02:00
..
defaults feat(send): add role for self-hosted Send file-share service 2026-05-26 16:16:36 +02:00
handlers feat(send): add role for self-hosted Send file-share service 2026-05-26 16:16:36 +02:00
meta docs(send): add meta/argument_specs.yml 2026-05-26 16:16:36 +02:00
tasks fix(send): assert S3 credentials when storage backend is s3 2026-05-26 16:16:36 +02:00
templates fix(send): use Traefik v3 OR-syntax for multi-domain Host rule 2026-05-26 16:16:36 +02:00
vars feat(send): add role for self-hosted Send file-share service 2026-05-26 16:16:36 +02:00
README.md feat(send): add role for self-hosted Send file-share service 2026-05-26 16:16:36 +02:00

Send

Deploys a self-hosted Send instance (timvisee fork of the discontinued Mozilla Send) with a Redis backend behind Traefik, using Docker Compose.

Requirements

  • Docker + docker compose plugin on the target host
  • Traefik (role digitalboard.core.traefik) reachable via an external Docker network named proxy (default)
  • DNS for each entry in send_domains pointing at the reverse proxy
  • Optional: a Garage S3 bucket if send_storage_backend: s3

Role Variables

Important defaults (see defaults/main.yml for the full list):

Variable Default Description
send_domains ["send.local.test"] FQDNs the router accepts; first entry is the canonical BASE_URL
send_image registry.gitlab.com/timvisee/send:latest Send container image
send_max_file_size 1073741824 Max upload size in bytes (1 GiB)
send_max_expire_seconds 604800 Max share lifetime (7 d)
send_storage_backend local local (volume) or s3
send_s3_* "" S3 endpoint/bucket/key/secret (when backend is s3)
send_use_ssl true Issue Traefik labels for the websecure entrypoint

Dependencies

None.

Example Playbook

- hosts: send_servers
  become: true
  roles:
    - digitalboard.core.send

With S3 (Garage) backend:

send_storage_backend: s3
send_s3_endpoint: "http://{{ hostvars['backend']['garage_s3_domain'] }}"
send_s3_bucket: "send"
send_s3_access_key: "{{ lookup('digitalboard.core.garage_credentials', 'send', host='backend')['key_id'] }}"
send_s3_secret_key: "{{ lookup('digitalboard.core.garage_credentials', 'send', host='backend')['secret_key'] }}"

License

MIT