SFTP to DigitalOcean Spaces, next to your Droplets
Spaces doesn't offer SFTP, and a Droplet running vsftpd or OpenSSH is one more server to patch. CloudFile runs the SFTP, FTPS and FTP server and writes into your Spaces bucket with a key limited to that bucket.
DigitalOcean Spaces with CloudFile, at a glance.
| Endpoint | https://<region>.digitaloceanspaces.com, filled in from the region |
|---|---|
| URL style | Virtual-hosted |
| Credentials | A Spaces access key with Limited access and Read/Write/Delete on one bucket. Not a DigitalOcean API token. |
| Regions | Including Frankfurt (fra1), Amsterdam (ams3), London (lon1), New York, San Francisco, Toronto, Singapore, Sydney and Bangalore |
| Pricing model | $5 a month includes 250 GiB of storage and 1,024 GiB of outbound transfer across buckets. Then $0.02 per GiB stored and $0.01 per GiB out. Inbound is free. |
DigitalOcean Spaces prices are from their public website as of October 2026, excluding taxes. Your bucket is billed by DigitalOcean Spaces, not by us, and doesn't count toward your plan's storage.
Why pair SFTP with DigitalOcean Spaces.
No Droplet to run
Skip the VM with an SSH daemon, chroot jails and a cron job that syncs to Spaces. Partners connect to CloudFile and files land in the bucket.
Uploads don't use your allowance
Inbound transfer to Spaces is free and doesn't count against the 1 TiB outbound allowance, so partner uploads only cost storage.
Your apps read the same bucket
Droplets and apps keep reading the bucket with any S3 client. CloudFile's webhook tells them when a new file is there.
Keys limited to one bucket
Limited-access keys give CloudFile Read/Write/Delete on one bucket and nothing else in your account.
How it works, in three steps.
- Step 1
Create a bucket and a limited key
Create a Standard Storage bucket in your region. Create an access key with Limited access and Read/Write/Delete on it.
fra1 acme-inbox key: cloudfile (Read/Write/Delete) - Step 2
Connect it in CloudFile
Storage → Add bucket → DigitalOcean Spaces. Pick the region and paste the key.
https://fra1.digitaloceanspaces.com ✓ test passed - Step 3
Uploads go to Spaces
Each user writes under its own prefix. A signed webhook tells your app on DigitalOcean that a file arrived.
acme → acme-inbox/acme/feed.csv → POST /hooks/sftp
Every click and field is in the DigitalOcean Spaces setup guide.
What your partners see, and where it lands in DigitalOcean Spaces.
$ sftp -P 22000 [email protected]
sftp> put invoice-2026-10.pdf
sftp> ls
invoice-2026-10.pdfYour DigitalOcean Spaces bucket<bucket>/<folder>/acme/invoice-2026-10.pdf
<bucket>/<folder>/_shared/inbox/…Any SFTP, FTPS or FTP client: FileZilla, WinSCP, Cyberduck, the sftp command or their own system. WebDAV too, if you turn it on.
Their own home folder as /, and nothing else. They never see the bucket name, other users' folders or your keys.
A password, an SSH key or both, with the permissions you pick: full access, read only or upload only.
Shared folders at /shared/<name> when several users need the same files. They live under _shared/<name>/ in your DigitalOcean Spaces bucket.
Get these right in DigitalOcean Spaces.
Limited-access keys don't work on a bucket that has a bucket policy set through the S3 API. Remove the policy or use another bucket.
Cold Storage buckets are meant for rarely read data. Use Standard Storage for a server.
The CDN isn't needed. CloudFile hands out presigned links, so the bucket stays private.
Questions about SFTP on DigitalOcean Spaces.
Does DigitalOcean have a managed SFTP service?
Not for Spaces. You'd run an SFTP server on a Droplet. CloudFile is the managed alternative that writes into the Spaces bucket you already have.
My key is rejected as invalid. Why?
You probably pasted a DigitalOcean API token. Spaces needs an access key ID and secret created under Spaces Object Storage → Access Keys.
Which region should I pick?
The one your app runs in. For EU data, fra1 (Frankfurt) and ams3 (Amsterdam). The region can't be changed after the bucket is created.
Do partner uploads count toward my transfer allowance?
No. Inbound transfer to Spaces is free. Only outbound transfer, such as downloads and webhook download links, counts toward the 1,024 GiB included each month.
More in the docs: DigitalOcean Spaces setup · Your own bucket · Webhooks