Overview
One of the first services I wanted to host in my homelab was a replacement for cloud photo storage.
I wanted a way to automatically back up photos from my phone, access them from anywhere, and keep control of my own data.
After researching different options, I chose Immich.
Immich is a self-hosted photo and video management platform that works similarly to services like Google Photos, but runs on my own hardware.
Deployment
Immich runs inside my Docker environment alongside my other services.
The stack includes:
- Immich server
- PostgreSQL database
- Redis
- Machine learning container
The machine learning component enables features like:
- Photo searching
- Facial recognition
- Smart organization
The Setup Process
The initial deployment was not completely smooth.
The first version of the deployment failed because I used a standard PostgreSQL image instead of the Immich-specific database image that includes the required vector extensions.
After checking the Docker logs, I found the error:
No vector extension found
After switching to the correct PostgreSQL image, the containers started successfully.
This was a good reminder that logs are usually the best place to start when troubleshooting.
Making It Accessible Anywhere
To access Immich remotely, I set up:
- Cloudflare DNS
- Nginx Proxy Manager
- HTTPS certificates
- Secure reverse proxy access
This allows me to access my photos securely without exposing the application directly to the internet.
Mobile Backup
After connecting the Immich mobile app, my phone can automatically upload photos to my server.
This gives me:
- My own photo backup system
- Remote access
- Full control over my data
- No monthly storage subscription
Lessons Learned
This project taught me a lot about:
- Docker networking
- Database requirements
- Reverse proxies
- HTTPS certificates
- Secure self-hosting
The biggest takeaway was that self-hosting is not just about getting something running. It is about understanding how every piece works together.