Skip to content

Digital Ocean Spaces api error SignatureDoesNotMatch #894

@jiqiren

Description

@jiqiren
access-key-id: redacted
secret-access-key: redacted

dbs:
  - path: /gotosocial/sqlite.db
    replica:
      url: s3://redacted.sfo3.digitaloceanspaces.com/db

Bug Description

Connects fine to local sqlite db but write to Digital Ocean Spaces fails with Signature issues.

time=2025-12-13T01:38:00.891Z level=INFO msg=litestream version=v0.5.3 level=""
time=2025-12-13T01:38:00.892Z level=INFO msg="initialized db" path=/gotosocial/sqlite.db
time=2025-12-13T01:38:00.893Z level=INFO msg="replicating to" type=s3 sync-interval=1s bucket=dustyninja-backup path=db region=sfo3 endpoint=https://sfo3.digitaloceanspaces.com
time=2025-12-13T01:38:00.893Z level=INFO msg="starting L0 retention monitor" interval=15s retention=5m0s
time=2025-12-13T01:38:00.897Z level=INFO msg="starting compaction monitor" level=1 interval=30s
time=2025-12-13T01:38:00.897Z level=INFO msg="starting compaction monitor" level=2 interval=5m0s
time=2025-12-13T01:38:00.897Z level=INFO msg="starting compaction monitor" level=3 interval=1h0m0s
time=2025-12-13T01:38:00.897Z level=INFO msg="starting compaction monitor" level=9 interval=24h0m0s
time=2025-12-13T01:38:30.887Z level=INFO msg="signal received, litestream shutting down"
time=2025-12-13T01:38:30.967Z level=ERROR msg="monitor error" db=sqlite.db replica=s3 error="no position, waiting for data"
time=2025-12-13T01:41:56.191Z level=INFO msg=litestream version=v0.5.3 level=debug
time=2025-12-13T01:41:56.195Z level=INFO msg="initialized db" path=/gotosocial/sqlite.db
time=2025-12-13T01:41:56.195Z level=INFO msg="replicating to" type=s3 sync-interval=1s bucket=dustyninja-backup path=db region=sfo3 endpoint=https://sfo3.digitaloceanspaces.com
time=2025-12-13T01:41:56.196Z level=INFO msg="starting L0 retention monitor" interval=15s retention=5m0s
time=2025-12-13T01:41:56.196Z level=INFO msg="starting compaction monitor" level=1 interval=30s
time=2025-12-13T01:41:56.196Z level=DEBUG msg="db not ready, skipping" level=1 path=/gotosocial/sqlite.db
time=2025-12-13T01:41:56.196Z level=INFO msg="starting compaction monitor" level=2 interval=5m0s
time=2025-12-13T01:41:56.196Z level=DEBUG msg="db not ready, skipping" level=2 path=/gotosocial/sqlite.db
time=2025-12-13T01:41:56.196Z level=INFO msg="starting compaction monitor" level=3 interval=1h0m0s
time=2025-12-13T01:41:56.197Z level=DEBUG msg="db not ready, skipping" level=3 path=/gotosocial/sqlite.db
time=2025-12-13T01:41:56.197Z level=INFO msg="starting compaction monitor" level=9 interval=24h0m0s
time=2025-12-13T01:41:56.197Z level=DEBUG msg="db not ready, skipping" level=9 path=/gotosocial/sqlite.db
time=2025-12-13T01:41:57.334Z level=DEBUG msg=sync db=sqlite.db txid=0000000000000001 offset=32 snap=true
time=2025-12-13T01:42:11.207Z level=DEBUG msg="enforcing l0 retention" db=sqlite.db retention=5m0s
time=2025-12-13T01:42:24.961Z level=DEBUG msg="db sync" db=sqlite.db status=ok
time=2025-12-13T01:42:26.199Z level=DEBUG msg="enforcing l0 retention" db=sqlite.db retention=5m0s
time=2025-12-13T01:42:39.233Z level=DEBUG msg=verify saltMatch=true prevWALOffset=1277232
time=2025-12-13T01:42:41.201Z level=DEBUG msg="enforcing l0 retention" db=sqlite.db retention=5m0s
time=2025-12-13T01:42:52.545Z level=DEBUG msg=verify.2 lastPageMatch=true
time=2025-12-13T01:42:56.198Z level=DEBUG msg="enforcing l0 retention" db=sqlite.db retention=5m0s
time=2025-12-13T01:43:06.235Z level=DEBUG msg=sync db=sqlite.db txid=0000000000000002 offset=1281352 chkpt=true
time=2025-12-13T01:43:06.275Z level=DEBUG msg="db sync" db=sqlite.db status=ok
time=2025-12-13T01:43:06.314Z level=DEBUG msg=checkpoint db=sqlite.db mode=PASSIVE result=0,1695,1695
time=2025-12-13T01:43:06.352Z level=DEBUG msg=verify saltMatch=false prevWALOffset=6979312
time=2025-12-13T01:43:06.364Z level=DEBUG msg=verify.2 lastPageMatch=true
time=2025-12-13T01:43:06.375Z level=DEBUG msg=sync db=sqlite.db txid=0000000000000003 offset=32 chkpt=true
time=2025-12-13T01:43:06.378Z level=DEBUG msg="db sync" db=sqlite.db status=ok
time=2025-12-13T01:43:06.380Z level=DEBUG msg=verify saltMatch=true prevWALOffset=32
time=2025-12-13T01:43:06.381Z level=DEBUG msg=sync db=sqlite.db txid=0000000000000004 offset=4152
time=2025-12-13T01:43:06.381Z level=DEBUG msg=verify saltMatch=true prevWALOffset=32
time=2025-12-13T01:43:06.382Z level=DEBUG msg=sync db=sqlite.db txid=0000000000000004 offset=4152 chkpt=true
time=2025-12-13T01:43:06.384Z level=DEBUG msg=checkpoint db=sqlite.db mode=PASSIVE result=0,1,1
time=2025-12-13T01:43:06.386Z level=DEBUG msg=verify saltMatch=false prevWALOffset=32
time=2025-12-13T01:43:06.387Z level=DEBUG msg=sync db=sqlite.db txid=0000000000000004 offset=4152 chkpt=true snap=true reason="wal header salt reset, snapshotting"
time=2025-12-13T01:43:06.422Z level=DEBUG msg="replica sync" db=sqlite.db replica=s3 txid=0000000000000003
time=2025-12-13T01:43:06.519Z level=DEBUG msg="no compaction" level=1 path=/gotosocial/sqlite.db
time=2025-12-13T01:43:06.613Z level=ERROR msg="monitor error" db=sqlite.db replica=s3 error="write ltx file: s3: upload to db/0000/0000000000000001-0000000000000001.ltx: upload multipart failed, upload id: 2~KQSv4kC57uibbEPFLoycIYFyGSmDSky, cause: operation error S3: UploadPart, https response error StatusCode: 403, RequestID: 54bb5be5-d558-291953972, HostID: , api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method."
time=2025-12-13T01:43:11.214Z level=DEBUG msg="enforcing l0 retention" db=sqlite.db retention=5m0s
time=2025-12-13T01:43:26.210Z level=DEBUG msg="enforcing l0 retention" db=sqlite.db retention=5m0s

Environment

docker:
root@sfo3-01:~# docker image ls | grep lite
litestream/litestream 0.5 f8c8fd6a60b3 32 hours ago 44.5MB

litestream.yml is at beginning of this post.

Litestream version:

v0.5.3

Operating system & version:
Debian 13 trixie

Installation method:
Docker

Storage backend:
S3

Steps to Reproduce

Follow guide to use S3 on Digital Ocean Spaces:
https://litestream.io/guides/digitalocean/

Expected behavior:
replicate to Digital Ocean Spaces

Actual behavior:
Some kind of signature error when trying to upload files from litestream.

Configuration

access-key-id: redacted
secret-access-key: redacted

dbs:
  - path: /gotosocial/sqlite.db
    replica:
      url: s3://redacted.sfo3.digitaloceanspaces.com/db

Logs

Log output
time=2025-12-13T01:43:06.613Z level=ERROR msg="monitor error" db=sqlite.db replica=s3 error="write ltx file: s3: upload to db/0000/0000000000000001-0000000000000001.ltx: upload multipart failed, upload id: 2~KQSv4kC57uibbEPFLoycIYFyGSmDSky, cause: operation error S3: UploadPart, https response error StatusCode: 403, RequestID: 54bb5be5-d558-291953972, HostID: , api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method."

I use s3cmd with exactly the same key/secret from same host to upload copies of sqlite file to S3. I do this once per day via cron.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions