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 |
1. Ordner anlegen
Als Erstes legst du die Ordner an.
mkdir -p /opt/containers/immich mkdir -p /opt/containers/immich/upload
2. .env anlegen
Nun wird die .env angelegt.
nano /opt/containers/immich/.env
Kopiert nun folgenden Inhalt:
DB_HOSTNAME=immich_postgres DB_USERNAME=user #### Dein Benutzername wählen #### DB_PASSWORD=user #### Hier sicheres Passwort wählen #### DB_DATABASE_NAME=immich # Optional Database settings: # DB_PORT=5432 REDIS_HOSTNAME=immich_redis # Optional Redis settings: # REDIS_PORT=6379 # REDIS_DBINDEX=0 # REDIS_PASSWORD= # REDIS_SOCKET UPLOAD_LOCATION=/opt/containers/immich/upload LOG_LEVEL=log JWT_SECRET=randomstringthatissolongandpowerfulthatnoonecanguess # DISABLE_REVERSE_GEOCODING=false # Reverse geocoding is done locally which has a small impact on memory usage # This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable # This ranges from 0-3 with 3 being the most precise # 3 - Cities > 500 population: ~200MB RAM # 2 - Cities > 1000 population: ~150MB RAM # 1 - Cities > 5000 population: ~80MB RAM # 0 - Cities > 15000 population: ~40MB RAM # REVERSE_GEOCODING_PRECISION=3 # Custom message on the login page, should be written in HTML form. # For example PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>" PUBLIC_LOGIN_PAGE_MESSAGE= TYPESENSE_API_KEY=irgendein Kennwort ## Hier ein Kennwort eingeben##
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:
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 ports: - 2283:3001 labels: traefik.docker.network: proxy traefik.enable: "true" traefik.http.routers.immich-secure.entrypoints: websecure traefik.http.routers.immich-secure.middlewares: default@file traefik.http.routers.immich-secure.rule: Host(`immich.euredomain.de`) traefik.http.routers.immich-secure.service: immich traefik.http.routers.immich-secure.tls: "true" traefik.http.routers.immich-secure.tls.certresolver: http_resolver traefik.http.routers.immich.entrypoints: web traefik.http.routers.immich.rule: Host(`immich.euredomain.de`) traefik.http.services.immich.loadbalancer.server.port: "3001" networks: default: null proxy: null 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 redis: container_name: immich_redis image: redis:6.2 restart: always database: container_name: immich_postgres image: tensorchord/pgvecto-rs:pg14-v0.1.11 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 volumes: pgdata: model-cache: networks: proxy: external: true
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ß.
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