Install Immich, Jellyfin or Nextcloud with Docker
Three programs you can run yourself as a replacement for paid services: Immich for your photos and videos (like Google Photos), Jellyfin for your own movies and music (like Netflix for your own collection), and Nextcloud for files, calendar, and contacts (like Dropbox and Google Drive). All three run in Docker. First read our guides about Docker if you’re not familiar with it yet.
What do you need?
- A server with Docker and Docker Compose, for example on a mini PC or in Proxmox.
- Sufficient storage and a plan for backups. Self-hosting means you’re responsible for ensuring your data doesn’t get lost.
- For external access, a VPN or a reverse proxy with HTTPS.
Immich: photos and videos
Immich automatically creates a copy of the photos on your phone, with search by people and places. The project changes rapidly, so follow the official installation and read the release notes with every update.
mkdir ~/immich && cd ~/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
Open .env and adjust at least these lines: the folder for your photos (UPLOAD_LOCATION), the folder for the database (DB_DATA_LOCATION), your own password (DB_PASSWORD), and your time zone (TZ=Europe/Amsterdam). Then start:
docker compose up -d
Open http://IP-address:2283, create an administrator account, and install the app on your phone with your server’s address. The recognition features use a lot of processing power and memory; count on at least 4 GB of available RAM.
Note: Immich is a nice copy, not a backup. Store your photos in a second location as well.
Jellyfin: your own movies and music
Jellyfin is free and open source. Place your files in folders by type (movies, series, music), let Jellyfin scan them, and watch on TV, phone, or in the browser. An example for compose.yaml:
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
restart: unless-stopped
ports:
- "8096:8096"
volumes:
- ./config:/config
- ./cache:/cache
- /path/to/media:/media:ro
# for hardware transcoding on Intel (optional):
# devices:
# - /dev/dri:/dev/dri
Open http://IP-address:8096 and go through the installation wizard. Converting video to another format (transcoding) is demanding. A processor with built-in video acceleration (like Intel Quick Sync, via /dev/dri) makes it much lighter. Use Jellyfin for your own files and content you have the rights to.
Nextcloud: files and more
Nextcloud is the most comprehensive of the three: file synchronization, calendar, contacts, notes, and documents. It’s also the most work to manage properly (database, updates, HTTPS). For home use, the creators recommend Nextcloud All-in-One: one container that sets up and updates the rest for you. Follow the step-by-step guide in the official repository for that.
Don’t put Nextcloud on the internet without HTTPS and regular updates: it contains a lot of personal data.
Which one do you choose?
| What for | Load | |
|---|---|---|
| Immich | Photos and videos from your phone | Medium to heavy (recognition) |
| Jellyfin | Your own movies, series, and music | Light, unless you transcode a lot |
| Nextcloud | Files, calendar, and contacts | Medium, high maintenance |
Start with one, make sure your backups work, and then add the next one.
Sources and attribution
This article was written in our own words. Further reading: