Your own cloud storage and photo library, on NVMe you control.
First month $1, then the normal monthly price. One per customer.
Nextcloud for files and calendars, Immich for photos, Vaultwarden for passwords. All three run in Docker on a KVM VPS with full root, NVMe RAID10 storage and unlimited traffic, in Amsterdam or New York. Your data sits on a server you own the keys to, not in someone else's account.
Transparent pricing
Plans and prices
| Plan | vCPU | Memory | NVMe | Traffic | Monthly | 1 year | |
|---|---|---|---|---|---|---|---|
| Standard | |||||||
| S-2Standard | 1vCPU | 2 GBMemory | 30 GBNVMe RAID10 | UnlimitedTraffic | $7.99/moFirst month $1 | $7.19/mo on 1 year | Start for $1 |
| S-4Standard | 2vCPU | 4 GBMemory | 60 GBNVMe RAID10 | UnlimitedTraffic | $13.99/moFirst month $1 | $12.59/mo on 1 year | Start for $1 |
| S-8Standard | 3vCPU | 8 GBMemory | 120 GBNVMe RAID10 | UnlimitedTraffic | $24.99/moFirst month $1 | $22.49/mo on 1 year | Start for $1 |
| S-16Standard | 4vCPU | 16 GBMemory | 240 GBNVMe RAID10 | UnlimitedTraffic | $44.99/moFirst month $1 | $40.49/mo on 1 year | Start for $1 |
| S-32Standard | 8vCPU | 32 GBMemory | 480 GBNVMe RAID10 | UnlimitedTraffic | $84.99/moFirst month $1 | $76.49/mo on 1 year | Start for $1 |
| S-64Standard | 16vCPU | 64 GBMemory | 720 GBNVMe RAID10 | UnlimitedTraffic | $159.99/moFirst month $1 | $143.99/mo on 1 year | Start for $1 |
| Dedicated CPU | |||||||
| D-4Dedicated | 1vCPU | 4 GBMemory | 45 GBNVMe RAID10 | UnlimitedTraffic | $37.00/moFirst month $1 | $31.45/mo on 1 year | Start for $1 |
| D-8Dedicated | 4vCPU | 8 GBMemory | 90 GBNVMe RAID10 | UnlimitedTraffic | $69.00/moFirst month $1 | $58.65/mo on 1 year | Start for $1 |
| D-16Dedicated | 4vCPU | 16 GBMemory | 160 GBNVMe RAID10 | UnlimitedTraffic | $118.00/moFirst month $1 | $100.30/mo on 1 year | Start for $1 |
| D-32Dedicated | 6vCPU | 32 GBMemory | 220 GBNVMe RAID10 | UnlimitedTraffic | $215.00/mo | $182.75/mo on 1 year | Deploy D-32 |
| D-64Dedicated | 10vCPU | 64 GBMemory | 400 GBNVMe RAID10 | UnlimitedTraffic | $377.00/mo | $320.45/mo on 1 year | Deploy D-64 |
| High Memory | |||||||
| H-64High Memory | 8vCPU | 64 GBMemory | 480 GBNVMe RAID10 | UnlimitedTraffic | $249.00/mo | $211.65/mo on 1 year | Deploy H-64 |
| H-128High Memory | 16vCPU | 128 GBMemory | 960 GBNVMe RAID10 | UnlimitedTraffic | $459.00/mo | $390.15/mo on 1 year | Deploy H-128 |
| H-192High Memory | 24vCPU | 192 GBMemory | 1.4 TBNVMe RAID10 | UnlimitedTraffic | $669.00/mo | $568.65/mo on 1 year | Deploy H-192 |
What a private cloud on a VPS replaces.
Most of what people pay a subscription for comes down to three apps. And they share one server, one domain and one backup routine.
Nextcloud AIO for files, calendar and contacts
The All-in-One image gives you Nextcloud, its database, Redis, Collabora for office documents and a Borg backup container as one stack. Desktop and mobile clients sync folders, nothing exotic there. Phones stay in step over CalDAV and CardDAV.
Immich for the photo library
Immich looks and behaves like the phone photo apps people are used to: automatic upload from the mobile app, a timeline, albums, shared links. Its machine learning container does face grouping and search by description, on the CPU if there is no GPU, which is the case here.
Vaultwarden for passwords
It's a small server that speaks the Bitwarden protocol. So the official Bitwarden apps and browser extensions just work against it. It wants almost no resources, and it sits next to the other two without anyone noticing.
One box, your keys
Full root on KVM. You decide what runs, where the data lives and who gets an account. And when you want to move it to another server later, a compose file and a rsync do the job. Nothing to export from a vendor.
Which plan for this workload.
RAM is the floor, disk is the ceiling. And the disk goes first: photos and video fill it long before the CPU gets busy.
| Setup | Plan | Why |
|---|---|---|
| Vaultwarden alone, or Immich without machine learning for a small library | S-2 | Light on RAM; the 30 GB disk is the limit, not the CPU |
| Nextcloud AIO for a household, documents and a few phones | S-4 | AIO wants 4 GB minimum; 60 GB NVMe holds documents comfortably |
| Immich with machine learning, or Nextcloud plus Immich together | S-8 | 8 GB for ML plus the database and 120 GB for the library |
| Years of family photos and video | S-8 plus +100 GB NVMe | Add-on disk at €11.00 a month per 100 GB on Standard plans |
S-2 (1 vCPU, 2 GB, 30 GB NVMe) at €6.99 a month ($7.99) is enough for Vaultwarden, and for Immich if you switch machine learning off. It is not enough for Nextcloud AIO, which runs several containers and wants 4 GB. Disk is the honest limit on the small plans: the OS and Docker images already take a slice of the 30 GB on S-2 and the 60 GB on S-4. A phone that uploads every photo and video adds up fast. Estimate the size of your current library, double it for the next years, and pick the disk from there. Resizing later is done in place: RAM and vCPU change, data and IP stay, usually one short reboot. The storage add-on is +100 GB NVMe at €11.00 a month on Standard plans. All plans sit on NVMe RAID10; our measured fio figures are on /vps-benchmarks/.
Setting it up on BuyVPS.
Step 1: order, install Docker, point your DNS
Order the plan, pick Ubuntu 24.04, and log in over SSH once the server is up (30 to 60 seconds after payment). Install Docker with the script the Docker project publishes. Create A records for the names you will use, for example cloud.example.com, photos.example.com and vault.example.com, all pointing at the VPS IPv4.
apt update && apt upgrade -y curl -fsSL https://get.docker.com | sh ufw allow OpenSSH && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
Step 2: start Nextcloud AIO
AIO is one master container that installs the rest. The command is the one from the project README; check there for the current flags before you run it, as they change between releases. Then open port 8080 on the IP, set your domain, and let it fetch the certificate.
docker run --init --sig-proxy=false --name nextcloud-aio-mastercontainer --restart always --publish 80:80 --publish 8080:8080 --publish 8443:8443 --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config --volume /var/run/docker.sock:/var/run/docker.sock:ro ghcr.io/nextcloud-releases/all-in-one:latest
AIO takes ports 80 and 443 for itself by default. If Immich and Vaultwarden go on the same VPS, either run AIO in its documented reverse proxy mode behind Caddy, or give Nextcloud its own S-4 and put the other two on a second server. The second option is simpler and is what we would do for a household.
Step 3: start Immich with docker compose
Immich ships a compose file and an example env file per release. Set UPLOAD_LOCATION to a folder on the NVMe disk and a real DB_PASSWORD before starting. The web UI listens on port 2283.
mkdir -p /opt/immich && cd /opt/immich wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env nano .env docker compose up -d
Step 4: add Vaultwarden
Vaultwarden is a single container with a data folder. Bind it to localhost only; Caddy will expose it over HTTPS. The DOMAIN variable must match the public URL or the apps refuse to log in.
# /opt/vaultwarden/docker-compose.yml
services:
vaultwarden:
image: vaultwarden/server:latest
restart: unless-stopped
environment:
DOMAIN: "https://vault.example.com"
volumes:
- ./data:/data
ports:
- "127.0.0.1:8000:80"
Step 5: put Caddy in front for TLS
Install Caddy from the repository the Caddy project documents, then write a Caddyfile. Caddy requests and renews the certificates on its own. Immich needs a large body limit for video uploads; Caddy has no limit by default, nginx would need client_max_body_size.
# /etc/caddy/Caddyfile
photos.example.com {
reverse_proxy 127.0.0.1:2283
}
vault.example.com {
reverse_proxy 127.0.0.1:8000
}
systemctl reload caddy
Step 6: set up backups before you upload anything
Nextcloud AIO has a Borg backup built into its interface; point it at a folder and set a schedule. For Immich and Vaultwarden, stop the containers briefly, dump the Postgres database, and copy the data folders and the database dump off the server. Our backup add-on at 20-60% of the plan price adds server-level backups on our side on top of that. Test a restore once. A backup nobody has restored is a guess.
docker exec -t immich_postgres pg_dumpall -U postgres | gzip > /opt/backup/immich-db.sql.gz tar czf /opt/backup/vaultwarden.tgz -C /opt/vaultwarden data
Pitfalls we see, and how to avoid them.
PHP memory and the 2 GB plan
Nextcloud AIO sets a PHP memory limit that a 2 GB server cannot honour alongside its database, Redis and Collabora. Symptoms are containers restarting and a sluggish web UI. Start on S-4, and raise the limit through the AIO environment variable if you run heavy apps.
Cron not running
Nextcloud wants its background job run every few minutes. That's what generates previews, sends notifications and does the cleanups. AIO ships a cron container for it. On a manual install you add the system cron entry yourself, then switch the admin setting from AJAX to Cron. When the admin page warns about the last job, this is why.
Upload limits in the proxy
A large video upload fails at the same point every time: the reverse proxy is cutting it off. AIO has its own upload limit variable, nginx has client_max_body_size, Caddy has no limit unless you set one. Also raise the timeout for slow mobile uploads.
Machine learning on the CPU
Immich runs its ML models on the CPU here; there is no GPU on our plans. It works, and the first pass over a library of thousands of photos takes a while and keeps the vCPUs busy. Let it run overnight, or disable ML on S-2 and S-4 and keep the plain library.
Questions about running Nextcloud and Immich on a VPS.
Does Nextcloud run on the S-2 plan?
Not well. Nextcloud AIO wants 4 GB of RAM as a minimum, and S-2 has 2 GB. Start on S-4 for Nextcloud. S-2 is fine for Vaultwarden, or for Immich with machine learning switched off.
How much disk do I need for photos?
That depends on your library, and it grows faster than people expect once the phone uploads video. S-4 has 60 GB and S-8 has 120 GB of NVMe. Extra storage is +100 GB NVMe at €11.00 a month on Standard plans, and you can add it later without moving the data.
Can I run Nextcloud, Immich and Vaultwarden on one VPS?
Yes, on S-8 or larger. Nextcloud AIO claims ports 80 and 443 by default, so you run it in its reverse proxy mode behind Caddy together with the other two. If you would rather keep it simple, give Nextcloud its own S-4 and put Immich and Vaultwarden on a second server.
Do you offer GPUs for Immich machine learning?
No. Our plans are CPU only, on AMD EPYC. Immich's ML runs on the CPU, which is slower but works; the first pass over a large library just takes longer. Plan 8 GB of RAM for it, so S-8 or more.
How are backups handled?
Two layers. Inside the apps: Nextcloud AIO has Borg built in, and Immich and Vaultwarden are a database dump plus a data folder. At the server level: our backup add-on costs 20-60% of the plan price and adds backups on our side. Copy at least one backup off the server and test a restore.
Which operating system should I choose?
Ubuntu 24.04 or Debian 13; both are available at order time and both run Docker without fuss. Everything on this page is containers, so the distribution matters little. Nextcloud's own documentation is at nextcloud.com.
Deploy a measured VPS
From $6.79/mo on a 2-year term. KVM on AMD EPYC, NVMe RAID10, ECC memory. No setup fee, cancel monthly.
30-day performance guarantee. Not satisfied? Full refund, no admin fee. How it works