# This file contain an example of cozy-stack configuration file. # It provides a description for all available fields to configure the stack. # # It is possible to pass environnment variable to this configuration using the # template language of golang, delimited by "{{" and "}}". See: # # https://golang.org/pkg/text/template/. # # The env map is available in the ".Env" variable. For instance # ".Env.COUCHDB_PASSPHRASE" will access to "COUCHDB_PASSPHRASE" environment # variable. The template is evaluated at startup of the stack. # server host - flags: --host # # Specifies on which IP/domain the server will listen on. It also defines which # IP versions will be available (IPv4 and/or IPv6). The server will be available # only on the IP version you have defined in host. For domains it will favour # the IPv4 version if available. # # There are two values with custom behaviours: # - "localhost" -> will listen on both "127.0.0.1" on IPv4 and "[::1]" on IPv6 # - "0.0.0.0" and "[::]" -> will listen on both "0.0.0.0" on IPv4 and "[::]" on IPv6 host: localhost # server port - flags: --port -p port: 8080 # how to structure the subdomains for apps - flags: --subdomains # values: # - nested, like https://../ (well suited for self-hosted with Let's Encrypt) # - flat, like https://-./ (easier when using wildcard TLS certificate) subdomains: nested # defines a list of assets that can be fetched via the /remote/:asset-name # route. remote_assets: bank: https://myassetserver.com/remote_asset.json # path to the directory with the assets - flags: --assets # default is to use the assets packed in the binary # assets: "" # administration endpoint parameters. this endpoint should be protected admin: # server host - flags: --admin-host host: localhost # server port - flags: --admin-port port: 6060 # secret file name containing the derived passphrase to access to the # administration endpoint. this secret file can be generated using the `cozy- # stack config passwd` command. this file should be located in the same path # as the configuration file. secret_filename: cozy-admin-passphrase # vault contains keyfiles informations # See https://docs.cozy.io/en/cozy-stack/cli/cozy-stack_config_gen-keys/ # to generate the keys vault: # the path to the key used to encrypt credentials # credentials_encryptor_key: /path/to/key.enc # the path to the key used to decrypt credentials # credentials_decryptor_key: /path/to/key.dec # file system parameters fs: # file system url - flags: --fs-url # default url is the directory relative to the binary: ./storage # url: file://localhost/var/lib/cozy # url: swift://openstack/?UserName={{ .Env.OS_USERNAME }}&Password={{ .Env.OS_PASSWORD }}&ProjectName={{ .Env.OS_PROJECT_NAME }}&UserDomainName={{ .Env.OS_USER_DOMAIN_NAME }}&Timeout={{ .Env.GOSWIFT_TIMEOUT }} # url: s3://{{ .Env.S3_ENDPOINT }}?access_key={{ .Env.S3_ACCESS_KEY }}&secret_key={{ .Env.S3_SECRET_KEY }}®ion={{ .Env.S3_REGION }}&use_ssl=true # S3 buckets are created automatically by default. See docs/s3.md. # To use pre-created buckets and optional connections per concrete bucket: # s3: # auto_create_buckets: false # buckets: # default: # name: company-storage # files: # name: company-files # url: s3://{{ .Env.S3_VFS_ENDPOINT }}?access_key={{ .Env.S3_VFS_ACCESS_KEY }}&secret_key={{ .Env.S3_VFS_SECRET_KEY }}®ion={{ .Env.S3_REGION }} # exports: # name: company-backups # Swift FS can be used with advanced parameters to activate TLS properties. # For using swift with https, you must use the "swift+https" scheme. # # root_ca: /ca-certificates.pem # client_cert: /client_cert.pem # client_key: /client_key # pinned_key: 57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6 # insecure_skip_validation: true # can_query_info: true # default_layout: 2 # 1 for layout v2 and 2 for layout v3 # auto_clean_trashed_after: # context_a: 30D # context_b: 3M # versioning: # max_number_of_versions_to_keep: 20 # min_delay_between_two_versions: 15m # contexts: # cozy_beta: # max_number_of_versions_to_keep: 10 # min_delay_between_two_versions: 1h # couchdb parameters couchdb: # CouchDB URL - flags: --couchdb-url url: http://localhost:5984/ # CouchDB advanced parameters to activate TLS properties: # # root_ca: /ca-certificates.pem # client_cert: /client_cert.pem # client_key: /client_key # pinned_key: 57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6 # insecure_skip_validation: true # Multiple CouchDB clusters: # clusters: # - url: http://couchdb1:5984/ # instance_creation: true # - url: http://couchdb2:5984/ # instance_creation: false # - url: http://couchdb3:5984/ # instance_creation: true # jobs parameters to configure the job system jobs: # path to the imagemagick convert binary # imagemagick_convert_cmd: convert # path to the ghostscript binary # ghostscript_cmd: gs # Specify whether the given list of jobs is an allowlist or blocklist. In case # of an allowlist, all jobs are deactivated by default and only the listed one # are activated. # # allowlist: false # workers individual configrations. # # For each worker type it is possible to configure the following fields: # - concurrency: the maximum number of jobs executed in parallel. when set # to zero, the worker is deactivated # - max_exec_count: the maximum number of retries for one job in case of an # error # - timeout: the maximum amount of time allowed for one execution of a job # # List of available workers: # # - "clean-clients": delete unused OAuth clients # - "drive-activity": publishing the activity digest of organization drives # - "export": exporting data from a cozy instance # - "import": importing data into a cozy instance # - "konnector": launching konnectors # - "service": launching services # - "migrations": transforming a VFS with Swift to layout v3 # - "notes-save": saving notes to the VFS # - "rag-index": send data to the RAG server for being indexed # - "rag-query": send a query to the RAG server # - "push": sending push notifications # - "sms": sending SMS notifications # - "sendmail": sending mails # - "share-group": for cozy to cozy sharing # - "share-replicate": idem # - "share-track": idem # - "share-upload": idem # - "thumbnail": creatings and deleting thumbnails for images # - "thumbnailck": generate missing thumbnails for all images # - "trash-files": async deletion of files in the trash # - "clean-old-trashed": deletion of old files and directories after some time # - "unzip": unzipping tarball # - "zip": creating a zip tarball # # When no configuration is given for a worker, a default configuration is # used. When a false boolean value is given, the worker is deactivated. # # To deactivate all workers, the workers field can be set to "false" or # "none". workers: # thumbnail: # concurrency: {{mul .NumCPU 4}} # max_exec_count: 2 # timeout: 15s # konnector: # concurrency: {{.NumCPU}} # max_exec_count: 2 # timeout: 200s # service: # concurrency: {{.NumCPU}} # max_exec_count: 2 # timeout: 200s # export: # concurrency: 4 # max_exec_count: 1 # timeout: 200s # push: false # sms: false # sendmail: false # Sets the default duration of jobs database documents to keep defaultDurationToKeep: "2W" # Keep 2 weeks # konnectors execution parameters for executing external processes. konnectors: cmd: ./scripts/konnector-node-run.sh # run connectors with node # cmd: ./scripts/konnector-node-run.sh # run connectors with node in dev mode # cmd: ./scripts/konnector-rkt-run.sh # run connectors with rkt # cmd: ./scripts/konnector-nsjail-node8-run.sh # run connectors with nsjail # rag are the URL of the RAG server(s) for AI. rag: # A cozy will use the rag server named by its rag.server feature flag, else # the one of its context, or if the context is not declared, default. default: url: http://localhost:8000 api_key: $3cr3t # Ask the LLM for one tool call at a time (parallel_tool_calls: false). # Off by default: some LLM gateways refuse the parameter. single_tool_call: false beta: url: http://localhost:8001 api_key: $3cr3t # mail service parameters for sending email via SMTP mail: # mail noreply address - flags: --mail-noreply-address noreply_address: noreply@localhost noreply_name: My Twake reply_to: support@example.org # mail smtp host - flags: --mail-host host: smtp.home # mail smtp port - flags: --mail-port port: 587 # mail smtp username - flags: --mail-username username: {{.Env.COZY_MAIL_USERNAME}} # mail smtp password - flags: --mail-password password: {{.Env.COZY_MAIL_PASSWORD}} # Use SSL connection (SMTPS) # Means no STARTTLS # flags: --mail-use-ssl use_ssl: false # disable mail STARTTLS # Means using plain unencrypted SMTP # flags: --mail-disable-tls disable_tls: false # skip the certificate validation (may be useful on localhost) skip_certificate_validation: false # Local Name # The hostname sent to the SMTP server with the HELO command # Defaults to localhost # flags: --mail-local-name local_name: cozy.domain.example # It is also possible to override the mail server per context. contexts: beta: # If the host is set to "-", no mail will be sent on this context host: smtp.example.org port: 587 username: {{.Env.COZY_BETA_MAIL_USERNAME}} password: {{.Env.COZY_BETA_MAIL_PASSWORD}} # campaign mail service parameters for sending campaign emails via SMTP # If campaign_mail.host is empty, the default mail config will be used. campaign_mail: # SMTP server host # Defaults to empty string host: smtp.home # SMTP server port # Defaults to 25 port: 587 # SMTP server username # Defaults to empty string username: {{.Env.COZY_MAIL_USERNAME}} # SMTP server password # Defaults to empty string password: {{.Env.COZY_MAIL_PASSWORD}} # Use SSL connection (SMTPS) # Means no STARTTLS # Defaults to false use_ssl: false # Disable STARTTLS for SMTP server # Means using plain unencrypted SMTP # Defaults to true disable_tls: false # Skip the certificate validation (may be useful on localhost) # Defaults to false skip_certificate_validation: false # Local Name # The hostname sent to the SMTP server with the HELO command # Defaults to empty string local_name: cozy.domain.example # It is also possible to override the campaign mail config per context. contexts: beta: # If the host is set to "-", no mail will be sent on this context host: smtp.example.org port: 587 username: {{.Env.COZY_BETA_MAIL_USERNAME}} password: {{.Env.COZY_BETA_MAIL_PASSWORD}} # location of the database for IP -> City lookups - flags: --geodb # See https://dev.maxmind.com/geoip/geoip2/geolite2/ geodb: "" # minimal duration between two password reset password_reset_interval: 15m # redis namespace to configure its usage for different part of the stack. redis # is not mandatory and is specifically useful to run the stack in an # environment where multiple stacks run simultaneously. redis: # the redis clients created can be configured to be used with a cluster of # redis. if addrs field is left empty, redis is not used. # either a single address or a seed list of host:port addresses # of cluster/sentinel nodes separated by whitespaces. addrs: # localhost:1234 localhost:4321 # the sentinel master name - only failover clients. master: # redis password password: # databases number for each part of the stack using a specific database. databases: jobs: 0 cache: 1 lock: 2 sessions: 3 downloads: 4 konnectors: 5 realtime: 6 log: 7 rate_limiting: 8 # advanced parameters for advanced users # dial_timeout: 5s # read_timeout: 3s # write_timeout: 3s # pool_size: max(25, 10 * runtime.NumCPU()) # pool_size cannot be below 25 # pool_timeout: 3s # idle_timeout: 5m # enables read only queries on slave nodes. # read_only_slave: false # Registries used for applications and konnectors registries: default: - https://apps-registry.cozycloud.cc/ # Wizard used for moving a Cozy from one place/hoster to another move: url: https://move.cozycloud.cc/ # OnlyOffice server for collaborative edition of office documents office: default: onlyoffice_url: https://documentserver.example.org/ onlyoffice_inbox_secret: inbox_secret onlyoffice_outbox_secret: outbox_secret # [internal usage] Cloudery configuration # clouderies: # default: # api: # url: https://manager.example.org/ # token: xxxxxx # [internal usage] Common settings # common_settings: # default: # url: https://sign-up.example.org/ # token: f95880b7fa9e8a51e103ac5383bc5956d849267e99b336f31df8bd86c2e9ec50 # The autocomplete API of the calendar side service, used to suggest the # recipients of a sharing when common_contacts is enabled. The key is the context # name, with no fallback on default. Otherwise, suggestions search the local and # organization contacts in CouchDB, independently of centralized_org_directory. # contacts_search: # my-context: # url: https://calendar-side-service.example.org:81/api/people/search # token: abcdef # All the deprecated apps listed here will see their OAUTH2 Authorization # flow interupted and redirected to a page proposing to move to the new # cozy application. # # The keys for `store_urls` can be: iphone/android/other deprecated_apps: apps: # - software_id: "github.com/cozy/some-app" # name: "some-app" # store_urls: # iphone: https://some-apple-store-url # android: https://some-android-store-url # The list of authorized hosts to redirect to when using the authentication # confirm endpoint. authorized_hosts_for_confirm_auth: - sometool.example.org # Authentication can be configured per context. The keys under "authentication" # are context names. authentication: beta: disable_password_authentication: false oidc: client_id: aClientID client_secret: s3cret3 scope: openid profile redirect_uri: https://oauthcallback.mycozy.cloud/oidc/redirect authorize_url: https://identity-provider/path/to/authorize token_url: https://identity-provider/path/to/token userinfo_url: https://identity-provider/path/to/userinfo userinfo_instance_field: cozy_number id_token_jwk_url: https://identity-provider/path/to/jwk allow_app_token_exchange: true app_token_exchange: # OIDC id_token audience. twake-mail-web: # Must be a Cozy linked application software_id. The local OAuth # scope is derived from this linked app manifest. software_id: registry://mail # Optional OIDC claim containing the target Cozy instance domain. instance_claim: workplaceFqdn notifications: # Activate development APIs (iOS only) development: false # Firebase Cloud Messaging API # fcm_credentials_file: /etc/cozy/fcm_credentials.json # APNS/2 certificates for iOS notifications # ios_certificate_key_path: path/to/certificate.p12 # ios_certificate_password: mycertificatepasswordifany # ios_key_id: my_key_id_if_any # ios_team_id: my_team_id_if_any # Huawei notifications # huawei_get_token: http://localhost:3001/api/notification-token/huawei # huawei_send_message: https://push-api.cloud.huawei.com/v1//messages:send # Configure the SMS per context contexts: beta: provider: api_sen url: https://sms.example.org/api/send token: {{.Env.COZY_BETA_SMS_TOKEN}} flagship: contexts: cozy_beta: skip_certification: true apk_package_names: - io.cozy.drive.mobile - io.cozy.flagship.mobile apk_certificate_digests: - 'xNnH7T1BSDh6erMzNysfakBVLLacbSbOMxVk8jEPgdU=' play_integrity_decryption_keys: - 'bVcBAv0eO64NKIvDoRHpnTOZVxAkhMuFwRHrTEMr23U=' play_integrity_verification_keys: - 'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElTF2uARN7oxfoDWyERYMe6QutI2NqS+CAtVmsPDIRjBBxF96fYojFVXRRsMb86PjkE21Ol+sO1YuspY+YuDRMw==' apple_app_ids: - 3AKXFMV43J.io.cozy.drive.mobile - 3AKXFMV43J.io.cozy.flagship.mobile # Allowed domains for the CSP policy used in hosted web applications csp_allowlist: # script: https://allowed1.domain.com/ https://allowed2.domain.com/ # img: https://allowed.domain.com/ # style: https://allowed.domain.com/ # font: https://allowed.domain.com/ # frame_ancestors: https://allowed.domain.com/ # It is also possible to configure the CSP policy per context. The values are # cumulative with the global csp allowlist. contexts: beta: img: https://allowed2.domain.com/ # It can useful to disable the CSP policy to debug and test things in local # disable_csp: true log: # logger level (debug, info, warning, panic, fatal) - flags: --log-level level: info # send logs to the local syslog - flags: --log-syslog syslog: false # It is possible to customize some behaviors of cozy-stack in function of the # context of an instance (the context field of the settings document of this # instance). Here, the "beta" context is customized with. contexts: beta: # Indicates if debug related features should be enabled in front # applications. debug: false # URL of the external signup (SaaS) application managing this context. When # set, phone and recovery_email become read-only through PUT /settings/instance # and the POST /settings/email flow is disabled, since the signup app owns the # user profile. The email is always protected from PUT /settings/instance # regardless of this setting (it must go through POST /settings/email or the # CLI). signup_url: https://signup.example.org # Enable the contacts service feed, collected contacts and external search. # Local organization lookup remains available without the service. common_contacts: false # Keep directory copies until the sharing UI supports organization lookup. # Independent of common_contacts: B2B events can maintain the org directory. centralized_org_directory: false # How long the Stack counts the file changes of an organization drive # before publishing them on the activity exchange (ADR 010). drive_activity: window: 30s # Redirect to a specific route of Cozy-Home after the onboarding # Format: appslug/#/path/to/route onboarded_redirection: home/#/discovery/?intro # Redirect to the photos application after login default_redirection: drive/#/folder # This domain will be used as a suggestion for the members of a sharing # when they are asked for the URL of their Cozy instance sharing_domain: mycozy.cloud # Allow to customize the cozy-bar link to the help help_link: https://forum.cozy.io/ # claudy actions list claudy_actions: - desktop - mobile # konnectors slugs to exclude from cozy-collect exclude_konnectors: - a_konnector_slug # If enabled, this option will skip permissions verification during # webapp/konnectors installs & updates processes permissions_skip_verification: false # By default, only the store app can install and update applications. But, # if this setting is enabled, it allows other applications with the right # permission to install and update applications. allow_install_via_a_permission: true # Tells if the photo folder should be created or not during the instance # creation (default: true) init_photos_folder: true # Tells if the administrative folder should be created or not during the # instance creation (default: true) init_administrative_folder: true # Allows to override the default template "Cozy" title by your own title templates_title: "My Personal Cloud" # Use a different noreply mail for this context noreply_address: noreply@example.org noreply_name: My Twake Beta reply_to: support@example.org # Configure the error page support_address: support@example.org support_page_url: http://support.example.org # Change the limit on the number of members for a sharing max_members_per_sharing: 50 # Use a different wizard for moving a Cozy move_url: https://move.example.org/ # Feature flags features: - hide_konnector_errors # Platform banners (io.cozy.banners) for the instances of this context. # See docs/banners.md. banner: # Off by default, so the rules can ship before the clients that render # them. Turning it back off stops the writes and leaves the documents # already materialized in place. enabled: true # The categories the stack.banner.commands queue is allowed to write, or # "*" for all of them. Its publisher is authenticated by its broker # credentials and bindings, so this says what it may say, not who it # is. The quota category is always refused: the stack measures disk # usage itself. command_categories: - billing - trial # List of applications that can be automatically updated even if the # permissions have changed additional_platform_apps: - superapp # Provides custom logo used in some cozy app (e.g. Home footer) # Use type key if you want defined a logo as main logos: coachco2: light: - src: /logos/main_cozy.png alt: Twake Workplace dark: - src: /logos/main_cozy.png alt: Twake Workplace home: light: - src: /logos/main_cozy.png alt: Twake Workplace type: main - src: /logos/1_partner.png alt: Partner n°1 type: secondary dark: - src: /logos/main_cozy.png alt: Twake Workplace type: main - src: /logos/1_partner.png alt: Partner n°1 type: secondary # Sharing configuration for cozy-to-cozy sharing trust rules sharing: # Auto-accept sharing invitations from trusted domains or contacts(default: false) auto_accept_trusted: true # Auto-accept sharing invitations from trusted contacts (default: false) auto_accept_trusted_contacts: true # List of trusted domains for automatic sharing acceptance trusted_domains: - example.com - mycompany.twake.app # Allow shared drive members with write access to update or revoke # share-by-link permissions created by other members (default: false) allow_writers_to_manage_links: false # Antivirus configuration for scanning uploaded files using ClamAV antivirus: # Enable or disable antivirus scanning enabled: false # ClamAV daemon TCP address (clamd must be running) address: localhost:3310 # Maximum time to wait for a scan to complete timeout: 300s # Files larger than this size will be skipped (in bytes, 100MB default) max_file_size: 104857600 # Action when an infected file is detected: "warn" or "block" on_infected: warn # Notification settings notifications: # Send email notification when infected file is detected email_on_infected: true # Allowed actions per scan status # If not specified, permissive defaults are used actions: pending: - download - share - preview - delete clean: - download - share - preview - delete infected: - delete error: - download - share - preview - delete skipped: - download - share - preview - delete # Default context - used as fallback when instance context is not specified # or when a context doesn't have sharing configuration default: sharing: # Conservative defaults for production auto_accept_trusted: false auto_accept_trusted_contacts: false trusted_domains: [] # WARNING: Closed-network deployments only. # Allows safehttp callers to reach private CIDRs, bypassing SSRF protections # for those addresses (including non-standard ports). # This affects sharing, move/import/export, WebDAV, BI, common settings, # Bitwarden icon fetching, and all other safehttp-backed outbound calls. # Default behavior (empty list) keeps all private addresses blocked. # safe_http: # trusted_private_networks: # - 10.0.0.0/8 # - 172.16.0.0/12 # - 192.168.0.0/16 rabbitmq: enabled: true nodes: default: enabled: true url: amqp://guest:guest@localhost:5672/ tls: # root_ca: /etc/ssl/certs/ca.pem insecure_skip_validation: false exchanges: - name: auth kind: topic durable: true declare_exchange: false queues: - name: stack.user.password.updated declare: true declare_dlx: true declare_dlq: true dlx_name: stack.auth.dlx dlq_name: stack.dead.letter.user.password.updated dl_routing_key: password.updated.dead prefetch: 8 delivery_limit: 5 bindings: - user.password.updated - name: stack.user.created declare: true declare_dlx: true declare_dlq: true dlx_name: stack.auth.dlx dlq_name: stack.dead.letter.user.created dl_routing_key: user.created.dead prefetch: 8 delivery_limit: 5 bindings: - user.created - name: stack.user.phone.updated declare: true declare_dlx: true declare_dlq: true dlx_name: stack.auth.dlx dlq_name: stack.dead.letter.user.phone.updated dl_routing_key: user.phone.updated.dead prefetch: 8 delivery_limit: 5 bindings: - user.phone.updated - name: billing kind: topic durable: true declare_exchange: false queues: - name: stack.domain.subscription.changed declare: true declare_dlx: true declare_dlq: true dlx_name: stack.billing.dlx dlq_name: stack.dead.letter.domain.subscription.changed dl_routing_key: domain.subscription.changed.dead prefetch: 8 delivery_limit: 5 bindings: - domain.subscription.changed - name: b2b kind: topic durable: true declare_exchange: false queues: - name: stack.user.lifecycle.queue declare: true declare_dlx: true declare_dlq: true dlx_name: stack.b2b.dlx dlq_name: stack.dead.letter.user.lifecycle dl_routing_key: domain.user.deleted.dead prefetch: 8 delivery_limit: 5 bindings: - domain.user.deleted - name: stack.b2b.group.lifecycle declare: true declare_dlx: true declare_dlq: true dlx_name: stack.b2b.dlx dlq_name: stack.dead.letter.b2b.group.lifecycle dl_routing_key: b2b.group.dead prefetch: 8 delivery_limit: 5 bindings: - b2b.group.created - b2b.group.updated - b2b.group.deleted - b2b.group.member.added - b2b.group.member.removed - name: stack.app.commands.queue declare: true declare_dlx: true declare_dlq: true dlx_name: stack.b2b.dlx dlq_name: stack.dead.letter.app.commands dl_routing_key: app.installation.requested.dead prefetch: 8 delivery_limit: 5 bindings: - app.installation.requested # Banner commands. The exchange is a deployment choice: an existing one # with dedicated bindings works too, as long as both repositories name the # same one. The dead letter queue is where a malformed or unauthorized # command lands, so it has to exist for those to be inspectable. - name: platform kind: topic durable: true declare_exchange: false queues: - name: stack.banner.commands declare: true declare_dlx: true declare_dlq: true dlx_name: stack.platform.dlx dlq_name: stack.dead.letter.banner.commands dl_routing_key: banner.commands.dead prefetch: 8 delivery_limit: 5 bindings: - banner.materialize - banner.clear # twake:contacts:common is a fanout exchange owned by the contacts side # service, so the binding key is empty. Only the contexts with # common_contacts set write what it carries. - name: twake:contacts:common kind: fanout durable: true declare_exchange: false queues: - name: stack.contacts.common declare: true declare_dlx: true declare_dlq: true dlx_name: stack.contacts.dlx dlq_name: stack.dead.letter.contacts.common dl_routing_key: contacts.common.dead prefetch: 8 delivery_limit: 5 bindings: - "" # Commands of other apps on the shared drives of organization instances. # The replies go to the activity exchange, which must exist with a queue # bound by the app, or the publish fails and the command is retried. - name: drive kind: topic durable: true declare_exchange: false queues: - name: stack.drive.commands declare: true declare_dlx: true declare_dlq: true dlx_name: stack.drive.dlx dlq_name: stack.dead.letter.drive.commands dl_routing_key: drive.commands.dead prefetch: 8 delivery_limit: 5 bindings: - drive.org_drive.ensure