Why I Migrated My iCloud Photos to My OwnCloud Server
I stopped relying on Apple’s limited 5GB iCloud storage and built my own in my home lab. My iPhone now uploads directly into my private cloud through Cloudflare ZTNA, backed by my NAS and fully in my control
The Realization: iCloud Isn’t Really “Yours”
Like most iPhone users, I once trusted iCloud with all my photos, WhatsApp backups, and device data — until that dreaded notification appeared:
We all start with 5GB of free storage. It sounds fair until you realize how fast it fills up — between iPhone photos, iPad syncs, and random app data, it disappears in days.
At some point, I realized I was paying just to store my own memories on someone else’s server.
So, I decided to stop renting space — and build my own.
Building My OwnCloud
Instead of paying monthly for more iCloud space, I set up OwnCloud inside my home lab. It’s a simple, open-source cloud platform that lets you host your own storage — completely private, expandable, and subscription-free.
Here’s my setup in a nutshell:
- Host: Ubuntu server (running Portainer)
- Deployment: OwnCloud via Docker stack
- Access: Reverse proxy through Cloudflare ZTNA
- Storage: Backed up to my local NAS
- Devices: iPhone, iPad, and desktop client synced seamlessly
It runs quietly alongside my other stacks like Oxidized, Uptime Kuma, and Streamlit dashboards — just another member of my home-lab ecosystem.
How It Syncs: Photos Straight from iPhone
OwnCloud’s iOS app makes the experience feel surprisingly Apple-like. Once configured, every new photo I take is automatically uploaded to my OwnCloud storage through the app’s Media Upload feature.
From there:
- I can review and delete unwanted shots directly in the OwnCloud app.
- It automatically uploads screenshots, videos, and images from my gallery.
- My desktop instantly syncs the same folder for easy retrieval when writing blog posts or editing images.
No iCloud needed. No middleman. Just my own cloud — syncing in real time.
Setup Guide: How I Built It
If you’d like to replicate this, here’s how my stack looks under Portainer:
1. Create a Docker Stack in Portainer
Under your Portainer dashboard, create a new stack and paste this:
version: "3.8"
services:
owncloud:
image: owncloud/server:latest
container_name: owncloud
restart: always
ports:
- "8080:8080"
environment:
- OWNCLOUD_DOMAIN=localhost:7003
- OWNCLOUD_TRUSTED_DOMAINS=cloud.hak1m.me,192.168.2.20:7003
- OWNCLOUD_DB_TYPE=mysql
- OWNCLOUD_DB_HOST=192.168.2.20:32768
- OWNCLOUD_DB_NAME=owncloud
- OWNCLOUD_DB_USERNAME=user
- OWNCLOUD_DB_PASSWORD=password
# first-time bootstrap (optional)
- OWNCLOUD_ADMIN_USERNAME=admin
- OWNCLOUD_ADMIN_PASSWORD=password
volumes:
- owncloud_data:/mnt/data
volumes:
owncloud_data:
Deploy it, and you’ll have your own cloud instance running at http://yourserverip:8080.
2. Add a Reverse Proxy via Cloudflare ZTNA
I connected it securely using Cloudflare Tunnel (ZTNA).
This lets me access https://cloud.awalhakim.com from anywhere in the world without opening any ports on my home router.
If you don’t have a domain yet, you can use a Cloudflare subdomain for free and still enjoy secure HTTPS.
3. Connect Your Storage
For me, the storage path (/opt/owncloud/data) is mounted directly to my NAS.
That means all my photos are automatically backed up locally — and if I ever expand my NAS capacity, my cloud grows with it.
This setup is fully scalable:
- Add more drives to expand your storage.
- Or, deploy it on any VPS if you don’t have a home lab.
4. Sync from Your iPhone
- Download the OwnCloud app from the App Store.
- Log in with your domain (e.g.,
cloud.awalhakim.com). - Go to Settings → Media Upload and enable:
- Upload new photos automatically
- Include videos and screenshots (optional)
That’s it. Every new photo will now sync automatically to your OwnCloud server — just like iCloud, but without the subscription wall.
Why This Matters
It’s not about rebelling against Apple.
It’s about owning what’s yours — your data, your photos, your digital life.
Self-hosting puts you in control. No hidden terms, no pricing tiers.
If I ever need more space, I just plug in another hard drive.
For me, OwnCloud became more than storage — it’s a personal ecosystem that grows with me.
Final Thoughts
Owning your cloud feels different. It’s not as polished as iCloud, but it’s personal, private, and limitless.
And when I take a photo today, I know exactly where it lives — on my own hardware, in my own network, under my own control.
If you’re tired of paying rent to store your memories, maybe it’s time to build your own too.