Оптимизация загрузки файлов в Immich — при помощи immich-cli

автор: rss9020 2 мин. чтения

Столкнулся с проблемой медленной загрузки файлов в Immich.

Immich — бесплатное приложение с открытым исходным кодом для самостоятельного хранения и управления фото и видео.

Первичная диагности показала что к серверу нет вопросов

Нагрузка на диск:

  • immich-api активно пишет на диск (130 K/s и ниже), но скорость совсем небольшая для нормальной загрузки большого количества фото. Гораздо ниже пропускной способности диска.
  • postgres почти без нагрузки — база не является узким местом.

CPU и память:

  • CPU почти свободен (5–7% на ядро), память тоже используется мало (2 ГБ из 19,5 ГБ), значит узким местом не является.

После ряда экспериментов и опытов было установлено что проблема в immich-api а точнее в реализации обхода его и способе построения дерева со списком файлов для скачивания. То есть проблема появляется когда загружаем несколько папок сразу.

На просторах интернета наткнулся на способ загрузки не через веб интерфейс а через командную строку при помощи утилиты immich-cli

Установка immich-cli

1. Установка зависимостей
immich-cli написан на Node.js, значит нужен Node.js >=18. Установим Node.js через официальный репозиторий:

Установка curl и build-essential

apt update
apt install -y curl build-essential

Добавляем репозиторий NodeSource для Node.js 20

curl -fsSL https://deb.nodesource.com/setup_20.x | bash —
apt install -y nodejs

Проверим:

node -v
npm -v

2. Установка immich-cli через npm

immich-cli официально доступен через npm:
sudo npm install -g @immich/cli

Проверим, что установилось:

immich —version

Монтирование сетевую папку Windows (SMB/CIFS) в Debian

В нашем случае утилита immich-cli будет забирать файлы с расшареной папки

Установка необходимых пакетов

В Debian нужно установить клиент для CIFS:

apt update
apt install cifs-utils

Создание точки монтирования

Выберите, куда будет монтироваться папка. Например:

mkdir -p /mnt/windows_share

Временное монтирование

Синтаксис:

mount -t cifs //IP_ИЛИ_ХОСТ/Имя_папки /mnt/windows_share -o username=USER,password=PASSWORD,uid=1000,gid=1000

Постоянное монтирование через /etc/fstab

Создайте файл с учётными данными (рекомендуется для безопасности):

nano /etc/samba/cred.txt

Содержимое:

username=ivan
password=12345
domain=WORKGROUP

Сделайте файл недоступным для остальных:

chmod 600 /etc/samba/cred.txt

Добавьте запись в /etc/fstab:

# Пример монтирования Windows share
//192.168.1.50/shared /mnt/windows_share cifs credentials=/etc/samba/cred.txt,uid=1000,gid=1000,iocharset=utf8,vers=3.0 0 0

vers=3.0 — версия протокола SMB. Если не работает, попробуйте 2.1 или 2.0.

Примонтировать сразу все из fstab:

sudo mount -a

Загрузка данных

Монтируем папку с ПК где фото лежат

mount -t cifs //192.168.0.20/CameraUploads /mnt/homepc -o username=xxx,password=xxx3,uid=1000,gid=1000

Проверяем, видим папки с фото по годам

root@immich:~# ls -lha /mnt/homepc/
total 8.0K
drwxr-xr-x 2 rss rss 4.0K Oct 20 20:48 .
drwxr-xr-x 3 root root 4.0K Nov 11 12:52 ..
drwxr-xr-x 2 rss rss 0 Oct 20 20:46 2009
drwxr-xr-x 2 rss rss 0 Oct 20 20:44 2010
drwxr-xr-x 2 rss rss 0 Oct 20 20:48 2015
drwxr-xr-x 2 rss rss 0 Oct 20 16:41 2016
drwxr-xr-x 2 rss rss 0 Oct 20 20:23 2017
drwxr-xr-x 2 rss rss 0 Mar 10 2023 2018
drwxr-xr-x 2 rss rss 0 Oct 21 15:37 2019
drwxr-xr-x 2 rss rss 0 Oct 20 17:43 2020
drwxr-xr-x 2 rss rss 0 Oct 23 22:14 2021
drwxr-xr-x 2 rss rss 0 Oct 23 22:14 2022
drwxr-xr-x 2 rss rss 0 Oct 26 21:50 2023
drwxr-xr-x 2 rss rss 0 Oct 26 21:50 2024
drwxr-xr-x 2 rss rss 0 Sep 2 19:48 2025

Логинимся при помощи API KEY

root@immich:~# immich login http://192.168.0.26:2283 I8xxxxxxxxxxxxxxxxxxxxxxxxxxxxxCjnc
Logging in to http://192.168.0.26:2283
Discovered API at http://192.168.0.26:2283/api
Logged in as xxxxx@gmail.com
Wrote auth info to /root/.config/immich/auth.yml

Полетели

immich upload /mnt/homepc —recursive —album

Скорость выросла до предела гигабитной сети, жёсткий диск в полку. Это победа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *