Support for bind mounts #21

Open
opened 2025-09-18 06:00:59 -04:00 by edersong · 5 comments
edersong commented 2025-09-18 06:00:59 -04:00 (Migrated from github.com)

I use bind mounts on all of my containers, but repliqate seems that not support it, so opened this Issue to request a support for bind mounts also.

/18/2025 11:56:00 AM
INFO
repliqate
[18-09-2025 11:56:00 INF] [Repliqate.Plugins.AgentRestic.AgentRestic] Restic backup started for /glasskeep
9/18/2025 11:56:00 AM
INFO
repliqate
[18-09-2025 11:56:00 INF] [Repliqate.Plugins.AgentRestic.AgentRestic] Mount null (/volumes/glasskeep/data) is not a volume but instead a bind, skipping
I use bind mounts on all of my containers, but repliqate seems that not support it, so opened this Issue to request a support for bind mounts also. ``` /18/2025 11:56:00 AM INFO repliqate [18-09-2025 11:56:00 INF] [Repliqate.Plugins.AgentRestic.AgentRestic] Restic backup started for /glasskeep 9/18/2025 11:56:00 AM INFO repliqate [18-09-2025 11:56:00 INF] [Repliqate.Plugins.AgentRestic.AgentRestic] Mount null (/volumes/glasskeep/data) is not a volume but instead a bind, skipping ```
redbeardymcgee commented 2025-10-06 13:23:33 -04:00 (Migrated from github.com)

This may already be possible, but I am still testing it. Looked safe with my first container, gotify. I already had created the volumes manually before I dove into understanding automatic volume creation by docker (or podman).

The following configuration mounted my existing directory within the container. Adding the necessary labels to backup the volume with repliqate should be trivial. I haven't finished setting up to test actual backups and restores yet.

services:
  gotify:
    image: gotify/server
    container_name: gotify
    restart: unless-stopped
    volumes: 
      - gotify_data:/app/data

volumes:
  gotify_data:
    driver: local
    driver_opts:
      device: /opt/containers/config/gotify
      o: bind
      type: local
This may already be possible, but I am still testing it. Looked safe with my first container, `gotify`. I already had created the volumes manually before I dove into understanding automatic volume creation by docker (or podman). The following configuration mounted my existing directory within the container. Adding the necessary labels to backup the volume with `repliqate` should be trivial. I haven't finished setting up to test actual backups and restores yet. ```yaml services: gotify: image: gotify/server container_name: gotify restart: unless-stopped volumes: - gotify_data:/app/data volumes: gotify_data: driver: local driver_opts: device: /opt/containers/config/gotify o: bind type: local ```
redbeardymcgee commented 2025-10-24 09:57:25 -04:00 (Migrated from github.com)

I have confirmed that backups are created with this setup. I have not confirmed restoration from these backups yet.

services:
  gotify:
    image: gotify/server
    labels:
      repliqate.enabled: true
      repliqate.engine: restic
      repliqate.schedule: "@monthly 3AM 15"
      repliqate.retention: 1y
      repliqate.backup_id: gotify
    container_name: gotify
    restart: unless-stopped
    volumes:
      - gotify_data:/app/data

volumes:
  gotify_data:
    driver: local
    driver_opts:
      device: /opt/containers/config/gotify
      o: bind
      type: local
I have confirmed that backups are created with this setup. I have not confirmed restoration from these backups yet. ```yaml services: gotify: image: gotify/server labels: repliqate.enabled: true repliqate.engine: restic repliqate.schedule: "@monthly 3AM 15" repliqate.retention: 1y repliqate.backup_id: gotify container_name: gotify restart: unless-stopped volumes: - gotify_data:/app/data volumes: gotify_data: driver: local driver_opts: device: /opt/containers/config/gotify o: bind type: local ```
bcurran3 commented 2025-12-08 16:31:03 -05:00 (Migrated from github.com)

This is what I get when I setup repiqate to backup one of my containers:

[Repliqate.Plugins.AgentRestic.AgentRestic] Mount null (/data/docker/vaultwarden/data) is not a volume but instead a bind, skipping

I would REALLY love to see repliqate backup binds. Personally I'd have to rejig close to 200 Ansible roles to make repliqate work with my containers which is no small feat.

Could be my ignorance, but I only see about 10% (if that) of the docker-compose scripts that I run across binding via docker volumes. I bind everything to directly accessible local persistent storage. I thought this was common. Binding to volumes only came to the forefront of my attention when bumping into repliqate.

I appear to be an edge case here, but I don't feel that way...

@WiggleWizard - could you please post your thoughts on this issue?

This is what I get when I setup repiqate to backup one of my containers: > [Repliqate.Plugins.AgentRestic.AgentRestic] Mount null (/data/docker/vaultwarden/data) is not a volume but instead a bind, skipping I would REALLY love to see repliqate backup binds. Personally I'd have to rejig close to 200 Ansible roles to make repliqate work with my containers which is no small feat. Could be my ignorance, but I only see about 10% (if that) of the docker-compose scripts that I run across binding via docker volumes. I bind everything to directly accessible local persistent storage. I thought this was common. Binding to volumes only came to the forefront of my attention when bumping into repliqate. I appear to be an edge case here, but I don't feel that way... @WiggleWizard - could you please post your thoughts on this issue?
WiggleWizard commented 2025-12-09 08:23:24 -05:00 (Migrated from github.com)

Only reason repliqate doesn't have bind mount support right now is because I personally use volumes as it's easier for my own stack. However I do see a lot of people using bind mounts so support for it needs to be added, for sure.

It would probably take a few days to add but I'm currently in the middle of figuring out some IPC shinanigans with repliqate. Once that's done I'll get work done on bind mount support.

Only issue with bind mounts is setting them up with repliqate would be a little bit of a pain; you'd have to explicitly expose backup endpoints for each bind mount on repliqate, which kinda goes against the whole "automation" aspect of repliqate on a smaller scale. I've got some creative ideas to alleviate that sort of leg work though.

If you don't mind, would you be able to post a few examples of your setups? I'd like to understand your use case more, as I don't personally use bind mounts, so it's a little difficult for me to visualize.

Only reason repliqate doesn't have bind mount support right now is because I personally use volumes as it's easier for my own stack. However I do see a lot of people using bind mounts so support for it needs to be added, for sure. It would probably take a few days to add but I'm currently in the middle of figuring out some IPC shinanigans with repliqate. Once that's done I'll get work done on bind mount support. Only issue with bind mounts is setting them up with repliqate would be a little bit of a pain; you'd have to explicitly expose backup endpoints for each bind mount on repliqate, which kinda goes against the whole "automation" aspect of repliqate on a smaller scale. I've got some creative ideas to alleviate that sort of leg work though. If you don't mind, would you be able to post a few examples of your setups? I'd like to understand your use case more, as I don't personally use bind mounts, so it's a little difficult for me to visualize.
bcurran3 commented 2025-12-09 11:56:07 -05:00 (Migrated from github.com)

This is great news. Thank you for taking my request seriously.

I posted an example in https://github.com/lminlone/repliqate/issues/23#issuecomment-3632229854 but here's another. It might look daunting at first, but I think it's very readable.

---
# ANE
ansible_nas_app_name: "Vaultwarden"
vaultwarden_enabled: false
vaultwarden_available_externally: false
vaultwarden_traefik_whitelist: "{{ lan }}"

# directories
vaultwarden_data_directory: "{{ docker_home }}/vaultwarden"

# network
vaultwarden_port_http: "19080"
vaultwarden_port_websockets: "3012"
vaultwarden_hostname: "vaultwarden"
vaultwarden_ip_whitelist: "0.0.0.0/0"

# docker
vaultwarden_container_name: vaultwarden
vaultwarden_image_name: "ghcr.io/dani-garcia/vaultwarden"
vaultwarden_image_tag: "latest"
vaultwarden_cpu_shares: "1024"
vaultwarden_memory: "512m"
vaultwarden_backup_container_name: vaultwarden-backup
vaultwarden_backup_image_name: "bruceforce/vaultwarden-backup"
vaultwarden_backup_image_tag: "latest"
vaultwarden_backup_cpu_shares: "1024"
vaultwarden_backup_memory: "512m"

# app
# Keep this token secret, this is password to access admin area of your server!
# This token can be anything, but it's recommended to use a long, randomly generated string of characters,
# for example running openssl rand -base64 48
vaultwarden_admin_token: your_token_goes_here
# To create a user set this to "true", and reprovision the container by re-running the anarion-nas playbook.
# Once you have created your user, set to "false" and run one more time.
# Target just Vaultwarden by running: ansible-playbook -i inventory nas.yml -b -K -t vaultwarden
vaultwarden_allow_signups: false
## Mail specific settings, set SMTP_FROM and either SMTP_HOST or USE_SENDMAIL to enable the mail service.
## To make sure the email links are pointing to the correct host, set the DOMAIN variable.
## Note: if SMTP_USERNAME is specified, SMTP_PASSWORD is mandatory
vaultwarden_SMTP_host: "smtp.domain.tld"
vaultwarden_SMTP_from: "vaultwarden@domain.tld"
vaultwarden_SMTP_from_name: "Vaultwarden"
vaultwarden_SMTP_security: "starttls" # ("starttls", "force_tls", "off") Enable a secure connection. Default is "starttls" (Explicit - ports 587 or 25), "force_tls" (Implicit - port 465) or "off", no encryption (port 25)
vaultwarden_SMTP_port: "587"          # Ports 587 (submission) and 25 (smtp) are standard without encryption and with encryption via STARTTLS (Explicit TLS). Port 465 (submissions) is used for encrypted submission (Implicit TLS).
vaultwarden_SMTP_username: "username"
vaultwarden_SMTP_password: "password"
vaultwarden_SMTP_timeout: "15"
vaultwarden_websocket_enabled: "false"

# autoheal
vaultwarden_autoheal: "false"
vaultwarden_backup_autoheal: "false"

# dockflare
vaultwarden_dockflare_tunnel: "false"
vaultwarden_dockflare_access_group: ""

# homepage
vaultwarden_homepage_group: "Apps"
vaultwarden_homepage_icon: "vaultwarden.png"
vaultwarden_homepage_href: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}"
vaultwarden_homepage_showstats: "false"
vaultwarden_backup_homepage_group: "Apps"
vaultwarden_backup_homepage_icon: "vaultwarden.png"
vaultwarden_backup_homepage_href: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}"
vaultwarden_backup_homepage_showstats: "false"

# repliqate
vaultwarden_repliqate_enabled: "false"
vaultwarden_repliqate_engine: "restic"
vaultwarden_repliqate_schedule: "@daily 3am"
vaultwarden_repliqate_backup_id: "vaultwarden"
vaultwarden_repliqate_retention: "30d"

# watchtower
vaultwarden_watchtower_enable: "false"
vaultwarden_backup_watchtower_enable: "false"
- name: Start {{ ansible_nas_app_name }}
  block:
    - name: Create {{ ansible_nas_app_name }} Directories
      ansible.builtin.file:
        path: "{{ item }}"
        state: directory
        mode: "0755"
      with_items:
        - "{{ vaultwarden_data_directory }}"
        - "{{ vaultwarden_data_directory }}/data"

    - name: Create {{ ansible_nas_app_name }} Container
      community.docker.docker_container:
        container_default_behavior: "compatibility"
        name: "{{ vaultwarden_container_name }}"
        hostname: "{{ vaultwarden_container_name }}"
        image: "{{ vaultwarden_image_name }}:{{ vaultwarden_image_tag }}"
        pull: true
        ports:
          - "{{ vaultwarden_port_http }}:80"
          - "{{ vaultwarden_port_websockets }}:3012"
        volumes:
          - "{{ vaultwarden_data_directory }}/data:/data:rw"
        env:
          SIGNUPS_ALLOWED: "{{ vaultwarden_allow_signups | string }}"
          ADMIN_TOKEN: "{{ vaultwarden_admin_token }}"
          DOMAIN: "https://{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}"
          LOG_FILE: "/data/vaultwarden.log"
          SMTP_HOST: "{{ vaultwarden_SMTP_host }}"
          SMTP_FROM: "{{ vaultwarden_SMTP_from }}"
          SMTP_FROM_NAME: "{{ vaultwarden_SMTP_from_name }}"
          SMTP_SECURITY: "{{ vaultwarden_SMTP_security }}"
          SMTP_PORT: "{{ vaultwarden_SMTP_port }}"
          SMTP_USERNAME: "{{ vaultwarden_SMTP_username }}"
          SMTP_PASSWORD: "{{ vaultwarden_SMTP_password }}"
          SMTP_TIMEOUT: "{{ vaultwarden_SMTP_timeout }}"
          WEBSOCKET_ENABLED: "{{ vaultwarden_websocket_enabled }}"
          TZ: "{{ ansible_nas_timezone }}"
        labels:
          autoheal: "{{ vaultwarden_autoheal }}"
          com.centurylinklabs.watchtower.enable: "{{ vaultwarden_watchtower_enable }}"
          dockflare.enable: "{{ vaultwarden_dockflare_tunnel }}"
          dockflare.access.group: "{{ vaultwarden_dockflare_access_group }}"
          dockflare.hostname: "{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}"
          dockflare.service: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}"
          homepage.name: "{{ ansible_nas_app_name }}"
          homepage.group: "{{ vaultwarden_homepage_group }}"
          homepage.icon: "{{ vaultwarden_homepage_icon }}"
          homepage.href: "{{ vaultwarden_homepage_href }}"
          homepage.description: "{{ 'Unofficial Bitwarden compatible server written in Rust' if homepage_show_description else omit }}"
          homepage.siteMonitor: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}"
          homepage.server: "my-docker"
          homepage.container: "{{ vaultwarden_container_name }}"
          homepage.showStats: "{{ vaultwarden_homepage_showstats }}"
          repliqate.enabled: "{{ vaultwarden_repliqate_enabled }}"
          repliqate.engine: "{{ vaultwarden_repliqate_engine }}"
          repliqate.schedule: "{{ vaultwarden_repliqate_schedule }}"
          repliqate.backup_id: "{{ vaultwarden_repliqate_backup_id }}"
          repliqate.retention: "{{ vaultwarden_repliqate_retention }}"
          traefik.enable: "{{ vaultwarden_available_externally | string }}"
          traefik.http.routers.vaultwarden.rule: "Host(`{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}`)"
          traefik.http.routers.vaultwarden.tls.certresolver: "letsencrypt"
          traefik.http.routers.vaultwarden.tls.domains[0].main: "{{ ansible_nas_domain }}"
          traefik.http.routers.vaultwarden.tls.domains[0].sans: "*.{{ ansible_nas_domain }}"
          traefik.http.routers.frontend.middlewares: "{{ vaultwarden_hostname }}"
          traefik.http.routers.vaultwarden.middlewares: "{{ vaultwarden_hostname }}@docker"
          traefik.http.middlewares.vaultwarden.IPAllowList.sourcerange: "{{ vaultwarden_traefik_whitelist }}"
          traefik.http.services.vaultwarden.loadbalancer.server.port: "80"
# Add Websockets support?
#         traefik.http.routers.vaultwarden-ws.rule: "Host(`{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}`) && Path(`/notifications/hub`)"
#         traefik.http.routers.vaultwarden-ws.tls.certresolver: "letsencrypt"
#         traefik.http.routers.vaultwarden-ws.tls.domains[0].main: "{{ ansible_nas_domain }}"
#         traefik.http.routers.vaultwarden-ws.tls.domains[0].sans: "*.{{ ansible_nas_domain }}"
#         traefik.http.routers.vaultwarden-ws.service: "vaultwarden-ws"
##        traefik.http.routers.frontend.middlewares: "{{ vaultwarden_hostname }}-ws"
#         traefik.http.routers.vaultwarden-ws.middlewares: "{{ vaultwarden_hostname }}-ws@docker"
#         traefik.http.middlewares.vaultwarden-ws.IPAllowList.sourcerange: "{{ vaultwarden_traefik_whitelist }}"
#         traefik.http.services.vaultwarden-ws.loadbalancer.server.port: "3012"
          wud.tag.include: '^\\d+\\.\\d+\\.\\d+$'
          wud.tag.transform.type: "semver"
          wud.link.template: "https://github.com/dani-garcia/vaultwarden/pkgs/container/vaultwarden"
        cpu_shares: "{{ vaultwarden_cpu_shares }}"
        memory: "{{ vaultwarden_memory }}"
        restart_policy: unless-stopped

    - name: Access {{ ansible_nas_app_name }} at
      ansible.builtin.debug:
        msg: >-
              {{
                ['http://' + hostvars[inventory_hostname]['ansible_default_ipv4']['address'] + ':' + (vaultwarden_port_http | string)] +
                (['https://' + vaultwarden_hostname + '.' + ansible_nas_domain] if (vaultwarden_available_externally is true or vaultwarden_dockflare_tunnel is true) else [])
              }}
      when: vaultwarden_enabled is true

    - name: Create {{ ansible_nas_app_name }} Backup Container Directory
      ansible.builtin.file:
        path: "{{ item }}"
        state: directory
        mode: "0700"
      with_items:
        - "{{ vaultwarden_data_directory }}/backup"

    - name: Create {{ ansible_nas_app_name }} Backup Container
      community.docker.docker_container:
        container_default_behavior: "compatibility"
        name: "{{ vaultwarden_backup_container_name }}"
        hostname: "{{ vaultwarden_backup_container_name }}"
        image: "{{ vaultwarden_backup_image_name }}:{{ vaultwarden_backup_image_tag }}"
        pull: true
        volumes:
          - "{{ vaultwarden_data_directory }}/data:/data"
          - "{{ vaultwarden_data_directory }}/backup:/backup"
        env:
          DELETE_AFTER: "30"
          UID: "0"
          TIMESTAMP: "true"
          TZ: "{{ ansible_nas_timezone }}"
        links:
          - "{{ vaultwarden_container_name }}"
        labels:
          autoheal: "{{ vaultwarden_backup_autoheal }}"
          com.centurylinklabs.watchtower.enable: "{{ vaultwarden_backup_watchtower_enable }}"
          dockflare.enable: "false"
          homepage.name: "{{ ansible_nas_app_name }} Backup"
          homepage.group: "{{ vaultwarden_backup_homepage_group }}"
          homepage.icon: "{{ vaultwarden_backup_homepage_icon }}"
          homepage.href: "{{ vaultwarden_backup_homepage_href }}"
          homepage.description: "{{ 'A simple cron powered backup image for vaultwarden.' if homepage_show_description else omit }}"
          homepage.server: "my-docker"
          homepage.container: "{{ vaultwarden_backup_container_name }}"
          homepage.showStats: "{{ vaultwarden_backup_homepage_showstats }}"
          traefik.enable: "false"
          wud.tag.include: '^\d+\.\d+\.\d+$'
          wud.tag.transform.type: "semver"
          wud.link.template: "https://hub.docker.com/r/bruceforce/vaultwarden-backup"
        cpu_shares: "{{ vaultwarden_backup_cpu_shares }}"
        memory: "{{ vaultwarden_backup_memory }}"
        restart_policy: unless-stopped
  when: vaultwarden_enabled is true
This is great news. Thank you for taking my request seriously. I posted an example in https://github.com/lminlone/repliqate/issues/23#issuecomment-3632229854 but here's another. It might look daunting at first, but I think it's very readable. ``` --- # ANE ansible_nas_app_name: "Vaultwarden" vaultwarden_enabled: false vaultwarden_available_externally: false vaultwarden_traefik_whitelist: "{{ lan }}" # directories vaultwarden_data_directory: "{{ docker_home }}/vaultwarden" # network vaultwarden_port_http: "19080" vaultwarden_port_websockets: "3012" vaultwarden_hostname: "vaultwarden" vaultwarden_ip_whitelist: "0.0.0.0/0" # docker vaultwarden_container_name: vaultwarden vaultwarden_image_name: "ghcr.io/dani-garcia/vaultwarden" vaultwarden_image_tag: "latest" vaultwarden_cpu_shares: "1024" vaultwarden_memory: "512m" vaultwarden_backup_container_name: vaultwarden-backup vaultwarden_backup_image_name: "bruceforce/vaultwarden-backup" vaultwarden_backup_image_tag: "latest" vaultwarden_backup_cpu_shares: "1024" vaultwarden_backup_memory: "512m" # app # Keep this token secret, this is password to access admin area of your server! # This token can be anything, but it's recommended to use a long, randomly generated string of characters, # for example running openssl rand -base64 48 vaultwarden_admin_token: your_token_goes_here # To create a user set this to "true", and reprovision the container by re-running the anarion-nas playbook. # Once you have created your user, set to "false" and run one more time. # Target just Vaultwarden by running: ansible-playbook -i inventory nas.yml -b -K -t vaultwarden vaultwarden_allow_signups: false ## Mail specific settings, set SMTP_FROM and either SMTP_HOST or USE_SENDMAIL to enable the mail service. ## To make sure the email links are pointing to the correct host, set the DOMAIN variable. ## Note: if SMTP_USERNAME is specified, SMTP_PASSWORD is mandatory vaultwarden_SMTP_host: "smtp.domain.tld" vaultwarden_SMTP_from: "vaultwarden@domain.tld" vaultwarden_SMTP_from_name: "Vaultwarden" vaultwarden_SMTP_security: "starttls" # ("starttls", "force_tls", "off") Enable a secure connection. Default is "starttls" (Explicit - ports 587 or 25), "force_tls" (Implicit - port 465) or "off", no encryption (port 25) vaultwarden_SMTP_port: "587" # Ports 587 (submission) and 25 (smtp) are standard without encryption and with encryption via STARTTLS (Explicit TLS). Port 465 (submissions) is used for encrypted submission (Implicit TLS). vaultwarden_SMTP_username: "username" vaultwarden_SMTP_password: "password" vaultwarden_SMTP_timeout: "15" vaultwarden_websocket_enabled: "false" # autoheal vaultwarden_autoheal: "false" vaultwarden_backup_autoheal: "false" # dockflare vaultwarden_dockflare_tunnel: "false" vaultwarden_dockflare_access_group: "" # homepage vaultwarden_homepage_group: "Apps" vaultwarden_homepage_icon: "vaultwarden.png" vaultwarden_homepage_href: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}" vaultwarden_homepage_showstats: "false" vaultwarden_backup_homepage_group: "Apps" vaultwarden_backup_homepage_icon: "vaultwarden.png" vaultwarden_backup_homepage_href: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}" vaultwarden_backup_homepage_showstats: "false" # repliqate vaultwarden_repliqate_enabled: "false" vaultwarden_repliqate_engine: "restic" vaultwarden_repliqate_schedule: "@daily 3am" vaultwarden_repliqate_backup_id: "vaultwarden" vaultwarden_repliqate_retention: "30d" # watchtower vaultwarden_watchtower_enable: "false" vaultwarden_backup_watchtower_enable: "false" ``` ``` - name: Start {{ ansible_nas_app_name }} block: - name: Create {{ ansible_nas_app_name }} Directories ansible.builtin.file: path: "{{ item }}" state: directory mode: "0755" with_items: - "{{ vaultwarden_data_directory }}" - "{{ vaultwarden_data_directory }}/data" - name: Create {{ ansible_nas_app_name }} Container community.docker.docker_container: container_default_behavior: "compatibility" name: "{{ vaultwarden_container_name }}" hostname: "{{ vaultwarden_container_name }}" image: "{{ vaultwarden_image_name }}:{{ vaultwarden_image_tag }}" pull: true ports: - "{{ vaultwarden_port_http }}:80" - "{{ vaultwarden_port_websockets }}:3012" volumes: - "{{ vaultwarden_data_directory }}/data:/data:rw" env: SIGNUPS_ALLOWED: "{{ vaultwarden_allow_signups | string }}" ADMIN_TOKEN: "{{ vaultwarden_admin_token }}" DOMAIN: "https://{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}" LOG_FILE: "/data/vaultwarden.log" SMTP_HOST: "{{ vaultwarden_SMTP_host }}" SMTP_FROM: "{{ vaultwarden_SMTP_from }}" SMTP_FROM_NAME: "{{ vaultwarden_SMTP_from_name }}" SMTP_SECURITY: "{{ vaultwarden_SMTP_security }}" SMTP_PORT: "{{ vaultwarden_SMTP_port }}" SMTP_USERNAME: "{{ vaultwarden_SMTP_username }}" SMTP_PASSWORD: "{{ vaultwarden_SMTP_password }}" SMTP_TIMEOUT: "{{ vaultwarden_SMTP_timeout }}" WEBSOCKET_ENABLED: "{{ vaultwarden_websocket_enabled }}" TZ: "{{ ansible_nas_timezone }}" labels: autoheal: "{{ vaultwarden_autoheal }}" com.centurylinklabs.watchtower.enable: "{{ vaultwarden_watchtower_enable }}" dockflare.enable: "{{ vaultwarden_dockflare_tunnel }}" dockflare.access.group: "{{ vaultwarden_dockflare_access_group }}" dockflare.hostname: "{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}" dockflare.service: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}" homepage.name: "{{ ansible_nas_app_name }}" homepage.group: "{{ vaultwarden_homepage_group }}" homepage.icon: "{{ vaultwarden_homepage_icon }}" homepage.href: "{{ vaultwarden_homepage_href }}" homepage.description: "{{ 'Unofficial Bitwarden compatible server written in Rust' if homepage_show_description else omit }}" homepage.siteMonitor: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ vaultwarden_port_http }}" homepage.server: "my-docker" homepage.container: "{{ vaultwarden_container_name }}" homepage.showStats: "{{ vaultwarden_homepage_showstats }}" repliqate.enabled: "{{ vaultwarden_repliqate_enabled }}" repliqate.engine: "{{ vaultwarden_repliqate_engine }}" repliqate.schedule: "{{ vaultwarden_repliqate_schedule }}" repliqate.backup_id: "{{ vaultwarden_repliqate_backup_id }}" repliqate.retention: "{{ vaultwarden_repliqate_retention }}" traefik.enable: "{{ vaultwarden_available_externally | string }}" traefik.http.routers.vaultwarden.rule: "Host(`{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.vaultwarden.tls.certresolver: "letsencrypt" traefik.http.routers.vaultwarden.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.vaultwarden.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" traefik.http.routers.frontend.middlewares: "{{ vaultwarden_hostname }}" traefik.http.routers.vaultwarden.middlewares: "{{ vaultwarden_hostname }}@docker" traefik.http.middlewares.vaultwarden.IPAllowList.sourcerange: "{{ vaultwarden_traefik_whitelist }}" traefik.http.services.vaultwarden.loadbalancer.server.port: "80" # Add Websockets support? # traefik.http.routers.vaultwarden-ws.rule: "Host(`{{ vaultwarden_hostname }}.{{ ansible_nas_domain }}`) && Path(`/notifications/hub`)" # traefik.http.routers.vaultwarden-ws.tls.certresolver: "letsencrypt" # traefik.http.routers.vaultwarden-ws.tls.domains[0].main: "{{ ansible_nas_domain }}" # traefik.http.routers.vaultwarden-ws.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" # traefik.http.routers.vaultwarden-ws.service: "vaultwarden-ws" ## traefik.http.routers.frontend.middlewares: "{{ vaultwarden_hostname }}-ws" # traefik.http.routers.vaultwarden-ws.middlewares: "{{ vaultwarden_hostname }}-ws@docker" # traefik.http.middlewares.vaultwarden-ws.IPAllowList.sourcerange: "{{ vaultwarden_traefik_whitelist }}" # traefik.http.services.vaultwarden-ws.loadbalancer.server.port: "3012" wud.tag.include: '^\\d+\\.\\d+\\.\\d+$' wud.tag.transform.type: "semver" wud.link.template: "https://github.com/dani-garcia/vaultwarden/pkgs/container/vaultwarden" cpu_shares: "{{ vaultwarden_cpu_shares }}" memory: "{{ vaultwarden_memory }}" restart_policy: unless-stopped - name: Access {{ ansible_nas_app_name }} at ansible.builtin.debug: msg: >- {{ ['http://' + hostvars[inventory_hostname]['ansible_default_ipv4']['address'] + ':' + (vaultwarden_port_http | string)] + (['https://' + vaultwarden_hostname + '.' + ansible_nas_domain] if (vaultwarden_available_externally is true or vaultwarden_dockflare_tunnel is true) else []) }} when: vaultwarden_enabled is true - name: Create {{ ansible_nas_app_name }} Backup Container Directory ansible.builtin.file: path: "{{ item }}" state: directory mode: "0700" with_items: - "{{ vaultwarden_data_directory }}/backup" - name: Create {{ ansible_nas_app_name }} Backup Container community.docker.docker_container: container_default_behavior: "compatibility" name: "{{ vaultwarden_backup_container_name }}" hostname: "{{ vaultwarden_backup_container_name }}" image: "{{ vaultwarden_backup_image_name }}:{{ vaultwarden_backup_image_tag }}" pull: true volumes: - "{{ vaultwarden_data_directory }}/data:/data" - "{{ vaultwarden_data_directory }}/backup:/backup" env: DELETE_AFTER: "30" UID: "0" TIMESTAMP: "true" TZ: "{{ ansible_nas_timezone }}" links: - "{{ vaultwarden_container_name }}" labels: autoheal: "{{ vaultwarden_backup_autoheal }}" com.centurylinklabs.watchtower.enable: "{{ vaultwarden_backup_watchtower_enable }}" dockflare.enable: "false" homepage.name: "{{ ansible_nas_app_name }} Backup" homepage.group: "{{ vaultwarden_backup_homepage_group }}" homepage.icon: "{{ vaultwarden_backup_homepage_icon }}" homepage.href: "{{ vaultwarden_backup_homepage_href }}" homepage.description: "{{ 'A simple cron powered backup image for vaultwarden.' if homepage_show_description else omit }}" homepage.server: "my-docker" homepage.container: "{{ vaultwarden_backup_container_name }}" homepage.showStats: "{{ vaultwarden_backup_homepage_showstats }}" traefik.enable: "false" wud.tag.include: '^\d+\.\d+\.\d+$' wud.tag.transform.type: "semver" wud.link.template: "https://hub.docker.com/r/bruceforce/vaultwarden-backup" cpu_shares: "{{ vaultwarden_backup_cpu_shares }}" memory: "{{ vaultwarden_backup_memory }}" restart_policy: unless-stopped when: vaultwarden_enabled is true ```
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lminlone/repliqate#21
No description provided.