S3 Providers
Walsync works with any S3-compatible storage. Here’s how to configure popular providers.
Tigris (Fly.io)
Section titled “Tigris (Fly.io)”Tigris is an S3-compatible object store from Fly.io with global distribution and no egress fees.
# Create a bucketfly storage create my-walsync-bucket
# Credentials are shown after creationexport AWS_ACCESS_KEY_ID=tid_xxxxxxxxxxxxxexport AWS_SECRET_ACCESS_KEY=tsec_xxxxxxxxxxxxxexport AWS_ENDPOINT_URL_S3=https://fly.storage.tigris.devWhy Tigris?
- Zero egress fees
- Global distribution
- Native Fly.io integration
- S3-compatible API
AWS S3
Section titled “AWS S3”export AWS_ACCESS_KEY_ID=AKIA...export AWS_SECRET_ACCESS_KEY=...export AWS_REGION=us-east-1# No endpoint needed for AWS S3Recommended IAM Policy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-walsync-bucket", "arn:aws:s3:::my-walsync-bucket/*" ] } ]}Best practices:
- Use IAM roles instead of access keys when possible
- Enable bucket versioning
- Enable server-side encryption
Cloudflare R2
Section titled “Cloudflare R2”R2 offers zero egress fees and S3 compatibility.
export AWS_ACCESS_KEY_ID=... # R2 access keyexport AWS_SECRET_ACCESS_KEY=... # R2 secret keyexport AWS_ENDPOINT_URL_S3=https://<account-id>.r2.cloudflarestorage.comGet your account ID and create API tokens in the Cloudflare dashboard under R2.
MinIO (Self-Hosted)
Section titled “MinIO (Self-Hosted)”MinIO is a self-hosted S3-compatible object store.
export AWS_ACCESS_KEY_ID=minioadminexport AWS_SECRET_ACCESS_KEY=minioadminexport AWS_ENDPOINT_URL_S3=http://localhost:9000Docker Compose with MinIO:
version: '3.8'services: minio: image: minio/minio command: server /data --console-address ":9001" ports: - "9000:9000" - "9001:9001" volumes: - minio-data:/data environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin
walsync: image: walsync command: watch /data/app.db --bucket my-bucket environment: AWS_ACCESS_KEY_ID: minioadmin AWS_SECRET_ACCESS_KEY: minioadmin AWS_ENDPOINT_URL_S3: http://minio:9000 depends_on: - minio
volumes: minio-data:Backblaze B2
Section titled “Backblaze B2”export AWS_ACCESS_KEY_ID=... # B2 application key IDexport AWS_SECRET_ACCESS_KEY=... # B2 application keyexport AWS_ENDPOINT_URL_S3=https://s3.us-west-002.backblazeb2.comReplace us-west-002 with your bucket’s region.
DigitalOcean Spaces
Section titled “DigitalOcean Spaces”export AWS_ACCESS_KEY_ID=...export AWS_SECRET_ACCESS_KEY=...export AWS_ENDPOINT_URL_S3=https://nyc3.digitaloceanspaces.comReplace nyc3 with your Spaces region.
Wasabi
Section titled “Wasabi”export AWS_ACCESS_KEY_ID=...export AWS_SECRET_ACCESS_KEY=...export AWS_ENDPOINT_URL_S3=https://s3.wasabisys.com# Or region-specific: https://s3.us-east-1.wasabisys.comTesting Your Configuration
Section titled “Testing Your Configuration”Verify your S3 connection:
# List databases (should work with valid credentials)walsync list --bucket my-bucket
# Or test with AWS CLIaws s3 ls s3://my-bucket --endpoint-url $AWS_ENDPOINT_URL_S3