Immich review - backup jouw foto’s en video’s op je mobiele telefoon

woensdag 23 november 2022 - 933 woorden, 5 min read

Maak jij gebruik van iOS of Android in combinatie met iCloud of Google Photos om jouw foto's te back-uppen? Als je veel foto's en video's maakt zul je vast herkennen dat deze backup aanzienlijk groot is en dat je opslagcapaciteit vrij snel vol zit. De oplossing is dan om meer opslag te kopen bij Apple of Google. Het kan ook anders, want sinds enkele maanden maak ik geen gebruik meer van deze backup optie.

Immich is selfhosted alternatief voor Google Photos en Apple iCloud Photos waarmee je automatisch jouw foto’s en video’s download naar jouw eigen server. Het is een backup tool voor al je waardevolle herinneringen die op je telefoon staan.

Allereerst begin ik met deze disclaimer van Immich:

⚠️ The project is under very active development.
⚠️ Expect bugs and breaking changes.
⚠️ Do not use the app as the only way to store your photos and videos!

De app wordt ontwikkeld door Alex en de reden waarom hij Immich heeft gebouwd is herkenbaar als vader van twee kleine dochters.

We were lying in bed with our newborn, and my wife said, “We are starting to accumulate a lot of photos and videos of our baby, and I don’t want to pay for App-Which-Must-Not-Be-Named anymore. You always want to build something for me, so why don’t you build me an app which can do that?

Meer dan de helft van alle foto’s en video’s op de telefoon van mijn vriendin en mij zijn die van onze kinderen. Stuk voor stuk waardevolle herinneringen. Herinneringen die ik graag op een veilige plek wil bewaren voor de toekomst.

De server

Om gebruik te maken van de Immich, dien je eerst de backend app te installeren op een server. De aanbevolen en meest eenvoudige manier is om dit met Docker te doen: https://immich.app/docs/installation/recommended-installation

Op dit moment heb ik de app geïnstalleerd op een VPS die ik gebruik voor verschillende testdoeleinden.

Als het je niet lukt om dit te installeren, stuur me dan een bericht. Ik help je graag op weg.

Eenmaal geïnstalleerd, dan kun je Immich ook via je browser openen om alle gegevens te beheren en foto’s te bekijken:

Immich in de browser

De mobiele app

Hier kun je de mobiele app van Immich downloaden: https://immich.app/docs/mobile-app-beta-program De app zorgt ervoor dat nieuwe foto’s en video’s automatisch worden opgeslagen op jouw server. In de app kun je zelf kiezen welke mappen er automatisch gebackupt moeten worden. Goed om te weten: op iOS werkt de achtergrondfunctie niet om automatisch te uploaden. Dat betekent dat het uploaden alleen werkt als je de app opent.

Automatisch backup

Oplossing voor mijn vriendin

De app heb ik ook geïnstalleerd op mijn vriendin haar OnePlus telefoon met Android. Zowel haar telefoon als haar Google account zitten vol qua opslag. Nadat Immich initieel alle foto’s en video’s van haar telefoon had opgeslagen, heb ik haar uitgelegd dat ze nu oud beeldmateriaal veilig kan verwijderen om ruimte vrij te maken.

Alternatief

Voorlopig gebruik ik Immich niet als enige backup tool voor mijn foto’s en video’s van mijn telefoon. Hiervoor is de app nog niet af genoeg waardoor de kans bestaat op het kwijtraken van alle gegevens (ook al maak ik backups van alle Immich data en media). Een andere tool die ik ernaast gebruik, is Nextcloud. Zij bieden namelijk ook de optie voor het automatisch opslaan van je mobiele foto’s en video’s:

Nextcloud automatisch uploaden

Als je met Immich aan de slag gaat, dan is het mijn advies om deze tool voorlopig te gebruiken naast andere backups tools voor je foto’s en video’s op je mobiele telefoon.

Tech stack

Als developer heb ik veel bewondering voor de technische uitwerking van Immich. Deze maakt namelijk gebruik van enkele nieuwe web-technologieën waar ik zelf nog geen ervaring mee heb.

  • Backend

    • Next.js
    • PostgreSQL
    • Redis
    • Nginx
  • Frontend

    • Flutter voor de mobiele app
    • SvelteKit voor de web app

app architecture a5473ac0496e25f911b2519dfd3b5c8b

Docker setup met Nginx reverse proxy

Dit is mijn docker-compose.yml op mijn server:

version: "3.8"

services:
  immich-server:
    image: altran1502/immich-server:release
    entrypoint: ["/bin/sh", "./start-server.sh"]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
      - database
    restart: always

  immich-microservices:
    image: altran1502/immich-server:release
    entrypoint: ["/bin/sh", "./start-microservices.sh"]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    image: altran1502/immich-machine-learning:release
    entrypoint: ["/bin/sh", "./entrypoint.sh"]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - database
    restart: always

  immich-web:
    image: altran1502/immich-web:release
    entrypoint: ["/bin/sh", "./entrypoint.sh"]
    env_file:
      - .env
    #environment:
      # Rename these values for svelte public interface
      #- PUBLIC_IMMICH_SERVER_URL=${IMMICH_SERVER_URL}
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2
    restart: always

  database:
    container_name: immich_postgres
    image: postgres:14
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      PG_DATA: /var/lib/postgresql/data
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always

  immich-proxy:
    container_name: immich_proxy
    image: altran1502/immich-proxy:release
    #environment:
      # Make sure these values get passed through from the env file
    #  - IMMICH_SERVER_URL
    #  - IMMICH_WEB_URL
    ports:
      - 2283:8080
    logging:
      driver: none
    depends_on:
      - immich-server
    restart: always

volumes:
  pgdata:

Dit is mijn Nginx configuratie:

server {
  listen 80;
  listen [::]:80;

  server_name immich.sebastix.domain;

  include snippets/letsencrypt.conf;
  # Uncomment these lines when SSL certificates are generated by CertBot
  return 301 https://$host$request_uri;
}

upstream immich {
  server 127.0.0.1:2283;
}

server {

  server_name immich.sebastix.domain;

  location / {
    proxy_redirect off;
    proxy_pass http://immich;
    proxy_set_header  Host                $host;
    proxy_set_header  X-Real-IP           $remote_addr;
    proxy_set_header  X-Forwarded-Ssl     on;
    proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto   $scheme;
    proxy_set_header  X-Frame-Options     SAMEORIGIN;
  }

  listen 443 ssl;
  listen [::]:443 ssl;
  client_max_body_size 500M;

  access_log /var/log/nginx/immich.sebastix.domain.access.log;
  error_log /var/log/nginx/immich.sebastix.domain.error.log;

  ssl_certificate /etc/letsencrypt/live/immich.sebastix.domain/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/immich.sebastix.domain/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/immich.sebastix.domain/chain.pem;
  include snippets/ssl.conf;
  include snippets/letsencrypt.conf;
}

Updaten

Alex, de maker van Immich, werkt dagelijks aan de app en brengt elke week wel een nieuwe update uit. Het updaten van je mobiele app werkt hetzelfde als andere app. Het updaten van de backend app op je server via Docker kan via dit commando: docker compose stop && docker compose pull && docker compose up -d

Andere reviews


Blijf in verbinding

In mijn nieuwsbrief deel ik regelmatig feitjes en nieuwe toepassingen uit de digitale wereld. Hier heb jij vast ook iets aan in de praktijk. Ben je benieuwd?

Sebastian Hagens | creative webdeveloper & tech consultant