Tänk om du kunde ta tillbaka kontrollen över alla dina minnen – bilder och videor från semestrar, vardagsliv och speciella ögonblick – och förvara dem på ett sätt som är både vackert och helt privat. Det är precis vad Immich handlar om.
Immich är ett modernt, självhostat alternativ till Google Photos, byggt med användaren i fokus. Det låter dig skapa ditt eget personliga bildmoln där du själv bestämmer hur innehållet lagras, hanteras och delas. Inga abonnemang, inga datainsamlande jättar – bara du och dina minnen, på dina villkor.
För den som bryr sig om integritet, vill undvika månatliga avgifter och samtidigt ha en elegant och kraftfull plattform för att organisera sina bilder är Immich en gamechanger. Med andra ord: du får samma känsla som med en kommersiell tjänst, men med friheten och kontrollen som bara ett självhostat system kan ge.





Hur står sig Immich mot Google Photos?
Trots att det är ett open source-projekt och körs på egen server, levererar Immich en användarupplevelse som på många sätt matchar – eller till och med överträffar – vad Googles lösning erbjuder. Här nedan ser du en jämförelse mellan de två plattformarna, så du själv kan avgöra om det är dags att ta steget bort från de stora molnen.
| Funktion | Immich | Google Photos |
|---|---|---|
| Ansiktsigenkänning | ✅ | ✅ |
| Objekt- och plats-sökning | ✅ | ✅ |
| Delning med andra | ✅ | ✅ |
| Backup och synkronisering | ✅ (via klient) | ✅ |
| Videostöd | ✅ | ✅ |
| Molnlagring | Egen server | Googles servrar |
| Kostnad | Låg (egen drift) | Månatlig prenumeration vid stora datamängder |
Varför Immich istället för Google Photos?
- Personliga motiv: integritet, kontroll över sina data
- Ekonomiska fördelar: kostnaden för Immich kontra Google Photos
- Möjlighet att stödja ett open source-projekt
Så fungerar Immich bakom kulisserna
När man driftar Immich själv med Docker får man ett kraftfullt system uppdelat i mindre byggstenar (tjänster) som var och en har ett specifikt ansvar. Det kan verka krångligt att Immich körs som flera separata containers istället för ett enda program – men det har klara fördelar. Du kan starta om eller uppdatera en del av systemet utan att resten påverkas, vilket gör det mer stabilt och lättare att underhålla. Dessutom ger det bättre skalbarhet och säkerhet, eftersom varje tjänst har ett tydligt ansvar.
Immich-server
Ansvar: Kärnan i systemet – hanterar hela webbtjänsten där du laddar upp, tittar på, och administrerar dina bilder och videor.
Funktioner:
- API och webbgränssnittet som användaren interagerar med
- Tar emot uppladdningar från mobilklienter eller webbläsare
- Visar bilder, videor, kartor och metadata
- Hanterar autentisering, användare och inställningar
Den här tjänsten monterar volymerna för bilder (UPLOAD_LOCATION) och metadata, och är det du egentligen “besöker” när du öppnar Immich i webbläsaren.
Immich-machine-learning
Ansvar: Analys av bilder med hjälp av AI – allt som gör Immich smart!
Funktioner:
- Ansiktsigenkänning
- Objektklassificering
- Platsidentifiering (via metadata och bildinnehåll)
- Genererar grupperingar och sökbara taggar
Använder en egen cache för AI-modeller och delar bilder med immich-server via gemensamma volymer.
Redis
Ansvar: Snabb datalagring och kommunikation mellan tjänster.
Funktioner:
- Mellanlagrar kortlivad data för att öka prestanda
- Används för köer, notiser och sessionshantering
Redis gör att Immich reagerar blixtsnabbt när du t.ex. söker eller laddar upp något
Database (Postgres)
Ansvar: Lagrar all strukturerad information – databasen bakom allt.
Funktioner:
- Användare, album, bildmetadata, inställningar
- Integrerar vektordatabaser för smart sökning och taggning
Alla bilder ligger som filer, men metadata – som plats, datum, personer – lagras här och knyts ihop med bildfilerna
Installera med Docker compose
Nedan följer min docker compose. UPLOAD_LOCATION syftar till den plats där bilder ska sparas när du laddar upp via webbläsaren eller appen. Jag har ett stort bibliotek på över 500 Gb som är sorterat i mappar, detta mountar jag in via SERVER_IMAGES. Sökvägen till båda platserna deklareras i .env-filen.
#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
- ${SERVER_IMAGES}:/usr/src/app/server_images
labels:
homepage.group: "Tjänster"
homepage.name: "immich"
homepage.icon: "immich"
homepage.href: "min_url"
homepage.description: "Google Photos – fast privat och snyggare"
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
- ${SERVER_IMAGES}:/usr/src/app/server_images
env_file:
- .env
restart: always
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
model-cache:
Labels i Docker Compose – så gör du din tjänst synlig i Homepage
Om du, precis som jag, använder Homepage för att hålla koll på alla dina självhostade tjänster, då spelar labels i Docker Compose en viktig roll. De gör att dina containers automatiskt dyker upp i dashboarden – snyggt organiserade med namn, ikon, beskrivning och klickbar länk.
I fallet med Immich har jag t.ex. lagt till detta:
labels:
homepage.group: "Tjänster"
homepage.name: "immich"
homepage.icon: "immich"
homepage.href: "din url"
homepage.description: "Google Photos – fast privat och snyggare"

.ENV-filen
Tänk på att uppdatera till dina värden, det gäller alla sökvägar samt användarnamn och lösenord.
Y# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/user/media/immich
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=/mnt/user/appdata/immich_db/postgresql/data
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=ditt_lösenord
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=ditt_användarnamn
DB_DATABASE_NAME=immich
SERVER_IMAGES=/mnt/user/media/images
Se videon för mer demo och installation.


