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 |
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=simple 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 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 restart: always typesense: container_name: immich_typesense image: typesense/typesense:0.24.0 environment: - TYPESENSE_API_KEY=${TYPESENSE_API_KEY} - TYPESENSE_DATA_DIR=/data logging: driver: none volumes: - ./tsdata:/data 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 ports: - 2283:8080 logging: driver: none depends_on: - immich-server restart: always networks: - default - proxy 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=8080" - "traefik.docker.network=proxy" - "traefik.http.routers.immich.middlewares=default@file" volumes: pgdata: 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ß.
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