In dieser Anleitung zeige ich euch, wie ihr Immich mittels Docker und Traefik bereitstellen könnt. Immich ist eine open source, high performance self-hosted backup Lösung für eure Bilder und Videos vom Handy. Es gibt für die Handys die passenden Apps.
Datum | Änderungen |
---|---|
18.10.2022 | Erstellung der Anleitung |
29.03.2023 | Container typesense in docker-compose.yml und .env letzte Zeile ergänzt. Client und Server müssen identisch sein. |
01.06.2023 | Anpassung der Traefik Labels @christian |
29.11.2023 | Anpassung auf Version 1.88.2 @Andi.bar |
30.12.2023 | Anpassung auf Version v1.91.0 |
31.05.2024 | Anpassung an aktuelle Version. Danke an @drr00t |
17.06.2024 | Anpassung auf Version v1.106.4 |
1. Ordner anlegen
Als Erstes legst du die Ordner an.
mkdir -p /opt/containers/immich mkdir -p /opt/containers/immich/upload mkdir -p /opt/containers/immich/example
2. .env anlegen
Nun wird die .env angelegt.
nano /opt/containers/immich/.env
Kopiert nun folgenden Inhalt:
DB_HOSTNAME=immich_postgres DB_USERNAME=immich DB_PASSWORD=EINLANGESSICHERESPASSWORT ## Ein Passwort setzen ## DB_DATABASE_NAME=immich DB_DATA_LOCATION=./postgres REDIS_HOSTNAME=immich_redis UPLOAD_LOCATION=/opt/containers/immich/upload EXAMPLE_LOCATION=/opt/containers/immich/example IMMICH_VERSION=release LOG_LEVEL=log PUBLIC_LOGIN_PAGE_MESSAGE= TZ=Europe/Berlin
Noch anzupassen:
Username angeben und ein sicheres Passwort festlegen
3. Docker Compose anlegen
Jetzt erstellen wir uns eine Docker Compose Datei.
nano /opt/containers/immich/docker-compose.yml
Kopiert nun folgenden Inhalt:
services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - ${EXAMPLE_LOCATION}:/usr/src/app/example - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - 2283:3001 depends_on: - redis - database restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.immich.entrypoints=websecure" - "traefik.http.routers.immich.rule=(Host(`immich.euredomain.de`))" - "traefik.http.routers.immich.tls=true" - "traefik.http.routers.immich.tls.certresolver=http_resolver" - "traefik.http.routers.immich.service=immich" - "traefik.http.services.immich.loadbalancer.server.port=3001" - "traefik.docker.network=proxy" - "traefik.http.routers.immich.middlewares=default@file" # - com.centurylinklabs.watchtower.enable=true ## watchtower ## networks: - immich - proxy immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, openvino] 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, openvino, openvino-wsl] for accelerated inference - use the -wsl version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: unless-stopped #labels: #- com.centurylinklabs.watchtower.enable=true ## watchtower ## networks: - immich redis: container_name: immich_redis image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672 restart: unless-stopped #labels: #- com.centurylinklabs.watchtower.enable=true ## watchtower ## networks: - immich database: container_name: immich_postgres image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: - ${DB_DATA_LOCATION}:/var/lib/postgresql/data restart: unless-stopped command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"] #labels: #- com.centurylinklabs.watchtower.enable=true ## watchtower ## networks: - immich volumes: model-cache: networks: proxy: external: true immich:
Noch anzupassen:
- hostname = eure Domain bei Traefik (immich.euredomain.de)
4. Immich starten
Dazu gebt ihr einfach folgenden Befehl ein:
docker compose -f /opt/containers/immich/docker-compose.yml up -d
Der Start dauert etwas. Wenn ihr nun auf eure Webseite (immich.euredomain.de) geht, solltet ihr folgendes sehen:
Nun könnt ihr anfangen.
Zuerst erstellen wir einen Admin-Account.
Benutzer anlegen.
Jetzt könnt ihr euch die mobilen Apps für Android & IPhone auf das Handy aus dem Appstore & Playstore besorgen und eure Videos und Bilder auf dem Server laden. Bei der IPhone App ist mir aufgefallen, dass der Upload bei der automatischen Sperre abbricht. Also, deaktiviert beim ersten Upload die automatische Sperre. Ich bin begeistert von “diesem feinen Stück Software”. 🙂 Viel Spaß.
Hallo. Mit dem letzten Update auf 1.118.2 kam bei mir die Meldung “Bad Gateway”. Um dies zu beheben musste ich die Porteinstellung anpassen:
ports:
– 2283:2283
und natürlich den Immich-Standarport auch im Loadbalancer von Traefik nachtragen.
– “traefik.http.services.immich.loadbalancer.server.port=2283”
Zugleich habe ich festgestellt, dass ein anderer Imagepfad und Fingerprint bei Redis angegeben ist in der Standard docker-compose.yml im Immich Projekt. Habe dies auch angepasst (keine Ahnung, ob dies nötig war).
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
# image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672
Zugleich habe ich auch den Healthcheck und Command aus der Original docker-compose.yml übernommen…. auch hier keine Ahnung, ob dies nötig war. Mit diesen Anpassungen läuft Immich bei mir nun wieder.
Wie gesagt, ob die letzten 2 Anpassungen im Redis nötig sind weiss ich nicht. Ich denke eher nein. Ausschlaggebend dürfte die Anpassung des Ports sein. Weshalb weiss ich auch nicht…. Vielleicht hilft dies dem einen oder anderen, wenn er dasselbe Problem hat. LG
Servus zusammen,
Diese Anleitung benötigt eine merkliche Überholung. steje Christian
Ich hätte da mal was vorbereitet:
.env
Es müssen folgende Stellen angepasst: DB_PASSWORD , UPLOAD_LOCATION
docker-compose.yml
Anzupassen sind die zwei Einträge der Hosts:
Damit ist man auf der durch immich zur Verfügung gestellten Version v1.105.1 .
Docker-Compose.yml und .env wurden von immich übernommen.
Bin mal wieder gefrustet… kaum ein Monat vergeht, indem immich nicht alles übern Haufen schmeißt und man schauen muss, was sich nun schon wieder geändert hat. Neu braucht man nun wohl die LOG_LEVEL Variable, das alleine reicht aber nicht. Kriege jetzt so lustige Fehler wie
“[Nest] 7 – 03/24/2024, 3:13:25 PM FATAL [DatabaseService]
Failed to activate pgvecto.rs extension.
Please ensure the Postgres instance has pgvecto.rs installed.” vom microservies-Container beim Start
Wird wohl mal Zeit, sich nach alternativen umzuschauen. Oder hat jemand eine schnelle Abhilfe, damit der Kram wieder läuft? :-/
Moin,
bei mir klappt das Ganze nur so halb, denn die Zugriffe laufen bei mir über http – auch dann, wenn ich die Zeilen
traefik.http.routers.immich.entrypoints: web
immich.euredomain.detraefik.http.routers.immich.rule: Host(
)
oder ein
traefik.http.routers.immich.middlewares: redirect-https
hinzufüge.
Da ich den Dienst über’s Internet betreiben will, darf das natürlich nicht so bleiben. Hat hier jemand ein ähnliches Problem?
Außerdem bin gleich doppelt verwirrt, denn erstens scheint sich
immich-server
laut der Logs gar nicht um ein Zertifikat zu bemühen, weiterhin definieren wir nirgends einen traefik service, was das debuggen zusätzlich erschwert. Wird der traefik service von docker implizit wegen der labels inimmich-server angelegt
?Ab Immich Version 1.88.0 muss die docker-compose.yml angepasst werden, siehe hier: https://github.com/immich-app/immich/discussions/5086. Der aktuelle Release ist Stand heute (28.11.2023) die 1.88.2.
Die Container immich_web und immich_proxy entfallen ersatzlos. Die entsprechenden Abschnitte müssen entfernt werden. Die Labels für Traefik werden in den immich_server verschoben. Der Port 2283 wird natürlich nicht auf dem Host registriert, sondern der interne Port Traefik bekannt gemacht.
Hierfür wird die entsprechende Zeile wie folgt geändert
– “traefik.http.services.immich.loadbalancer.server.port=3001”
Hallo Zusammen,
Ich habe die Installation soweit erfolgreich abgeschlossen. Beim Aufruf der Seite erhalte ich jedoch anstatt der Login Seite:
500 connect ECONNREFUSED 172.18.0.4:3001Sind noch spezielle port Freigaben in der firewall nötig oder regelt traefik das über port 80/443?
z.B. 3001, 3002, 2283?
Oder liegt der Fehler woanders?
Ausserdem fällt auf das der container immich-machine-learning im Minutentakt neu startet? Ist das normal?
Besten Dank,
Gruß,
Thomas
Hi Zusammen!
Die Anleitung läuft seit einem der letzten Updates nicht mehr; u.a. ist wohl ein neuer Container dazugekommen und man benötigt eine Typesense-API.
Bin alleine leider dran gescheitert, diese API zu generieren… könnte die Anleitung vielleicht dahingehend erweitert werden? 🙂
LG,
Patrick
Hallo Christian,
vielen Dank. Die Installation verlief ohne Probleme. Aber crowdsec bannt mich beim Einsatz (traefik mit crowdsec nach Deiner Anleitung). Anfangs nach etwa 30 Minuten, inzwischen, sobald ich die App auf dem Smartphone starte. Wenn ich es richtig verstehe, ist crowdsec lernfähig. Und somit nutzt mir auch das wechseln der IP scheinbar nichts mehr. Zwar gut zu wissen, dass es funktioniert, aber nutzt mir selbst ja nichts :). Wie kann ich crowdsec beibringen, dass ich es bin?
Viele Grüße
Ronald