Immich (Google Fotos - local)! 📷

Immich (Google Fotos - local)! 📷

Tenha o google fotos do tamanho de seu HD!

Continuando minha jornada de self hosting, o próximo desafio era tornar o meu NAS mais intuitivo e amigável, quando utilizava a Google cloud a organização é tão simples, é possível compartilhar álbuns, ver lembranças de fotos antigas, buscar fotos por localização e até mesmo encontrar fotos duplicadas, seria possível ter algo parecido com a minha própria infraestrutura? Utilizando meu nas com 4TB de HDD sem ter que pagar nenhuma mensalidade?

Siiim, meus amigos, senão não estaria escrevendo esse post, e o nome do app é Immich, ele é open source e conta com um grande número de pessoas contribuindo, também possui app mobile, o único porém é que ele ainda está forte desenvolvimento, então pode ser que encontre algumas instabilidade, mas nada que impacte a experiência e a seguir direi algumas formas de mitigar os riscos também, vamos lá.

A forma recomendada de instalar o immich é via docker compose, ele conta com um micro serviço, um banco de dados postgres e redis para cache, e para ter um bom resultado é recomendado ter um processador com uma boa capacidade, caso contrário recomendo que de uma olhada em uma outra alternativa chamada Photoprism.

Outra recomendação que faço é que configure a sua pasta de fotos no modo somente leitura, isso é possível como uma funcionalidade do próprio docker e impede que o immich faça alterações em suas fotos, removendo o risco de perder qualquer informação por um bug ou problema no app, com isso não será possível utilizar a função de backup do próprio app, mas há outras alternativas para isto e posso fazer um post relacionado mais pra frente.

O seu arquivo de docker compose deve ficar parecido com esse:

docker-compose.yml

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:905c4ee67b8e0aa955331960d2aa745781e6bd89afc44a8584bfd13bc890f0ae
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: docker.io/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
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    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
    restart: always

volumes:
  model-cache:

Configura as variáveis de ambiente e demais configurações aqui:

Docs 📚

Após o deployment pode conferir a se o servidor está ativo acessando o link do IP da máquina na porta 3000, onde será possível configurar seu primeiro usuário que é o administrador e iniciar a configuração da sua biblioteca. Nas últimas semanas os desenvolvedores adicionaram uma função de notificar quando um álbum é compartilhado por email, a função de empilhar fotos semelhantes e diversas melhorias no app mobile, uso o immich há alguns meses e é mesmo impressionante a velocidade de desenvolvimento e a estabilidade do app. Caso também o utilize deixe um comentário sobre a sua experiência, ou se usa o Photoprism ou alguma outra alternativa, ficarei feliz em saber, até mais.

Apoie o projeto Immich:

https://immich.app/