Skip to main content
Harly stores resumes, candidate attachments, documents, and mailbox files through a storage adapter. Choose the adapter based on deployment topology, backup requirements, and whether the filesystem is durable.

Local volume

Use local storage for a single VPS with a durable Docker volume:
Back up the uploads volume together with PostgreSQL. Do not use local storage on a platform whose service filesystem is ephemeral.

S3-compatible storage

Use a bucket policy that limits Harly to the required prefix and actions. Turn on encryption, versioning, and lifecycle rules that match your retention policy. Back up the bucket independently from the Harly database.

Provider-specific notes

Cloudflare R2

R2 is S3-compatible with zero egress fees. Use the S3 adapter with R2 endpoints:
Enable Public Access on the bucket only if you want direct file URLs. Otherwise, let Harly issue presigned download responses.

AWS S3

Leave S3_ENDPOINT empty for standard AWS S3. Use a bucket policy that limits Harly to s3:PutObject, s3:GetObject, and s3:DeleteObject on the uploads prefix.

MinIO

MinIO works for local or on-premises S3-compatible storage:
MinIO does not enforce HTTPS by default. Use it only on trusted networks.

Verify an upload

1

Upload a test file

Upload a test resume from a candidate record.
2

Download through Harly

Download the file through Harly, not directly from a public bucket URL.
3

Confirm storage

Check that the file appears in the storage provider and the application record.
4

Verify backup

Run a backup or provider snapshot according to your recovery runbook.
Candidate files are personal data. Keep buckets private and let Harly issue authenticated download responses. Do not make the entire bucket public.

Troubleshooting

Next steps

Backups

Protect candidate files and database together.

Configuration

Full environment variable reference.