Приложение для фото и видео Immich
На мой взгляд это лучшее приложения для хранения и синхронизации своего фото и видео. Можно послать далеко и надолго все остальные сервисы, (не буду называть их имен, они и так известны), которые по мимо вытягивания бабла еще и используют наши же файлы в своих интересах. Это просто бомба, все файлы с телефона или из других источников будут упорядоченно хранится на своем собственном сервере. Неограниченны в размерах файлохранилища. И главные фишки - машинный поиск и распознавание лиц. Меня старенького ИИ распознал в детсадовском возрасте. Вот с поиском бывают некоторые смешные курьёзы, но это фича, а не баг, как говорится 😆
Для приобретения нового опыта установки и способов хранения и синхронизации своего видео и фото, без громоздких аналогов попробую сначала установить данное приложение на виртуальную машину, что бы не допустить ошибок при установке на реальное железо. Почитать о данном приложении
Установка Docker Compose
Добавить репу Docker Compose
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
Установка последней версии
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверка работы
sudo docker run hello-world
Вывод терминала:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:4bd78111b6914a99dbc560e6a20eab57ff6655aea4a80c50b0c5491968cbc2e6
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Обновление Docker Compose
Установка Immich
Docker Compose — рекомендуемый метод запуска Immich в производстве. Ниже приведены шаги по развертыванию Immich с помощью Docker Compose. Официальный источник
Шаг 1. Загрузите необходимые файлы.
Создайте каталог по вашему выбору (например, ./Immich-app
), чтобы удерживать docker-compose.yml
и .env
файлы. В созданном каталоге будет хранится все данные фото и видео по умолчанию. Поэтому лучше установить на более объемный диск. Перейдите в созданный вами каталог:
mkdir ./Immich-app
cd ./Immich-app
Скачать docker-compose.yml
и example.env
, либо выполнив следующие команды:
Получите файл docker-compose.yml.
:
wget https://github.com/Immich-app/Immich/releases/latest/download/docker-compose.yml
Получить файл .env
:
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
(Необязательно) Получите файл hwaccel.yml
:
wget https://github.com/Immich-app/Immich/releases/latest/download/hwaccel.yml
Шаг 2. Заполните файл .env пользовательскими значениями.
# Вы можете найти документацию для всех поддерживаемых переменных env по адресу https://Immich.app/docs/install/environment-variables.
# Место, где хранятся загруженные вами файлы
UPLOAD_LOCATION=./library
# Используемая версия Immich. Вы можете привязать это к конкретной версии, например «v1.71.0».
Immich_VERSION=release
# Секрет соединения для postgres. Вам следует изменить его на случайный пароль.
DB_PASSWORD=postgres
# Значения ниже этой строки менять не нужно
###################################################################################
DB_HOSTNAME=Immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=Immich
REDIS_HOSTNAME=Immich_redis
nano example.env
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
- При необходимости заполните информацию о пользовательской базе данных.
- Заселить UPLOAD_LOCATIONс предпочтительным местом для хранения резервных ресурсов.
- Рассмотрите возможность изменения DB_PASSWORDк чему-то случайно сгенерированному
Шаг 3 — Запустите контейнеры Immich
Из каталога, который вы создали на шаге 1 (который теперь должен содержать ваши настроенные docker-compose.yml
и .env
файлы)
Запустите контейнеры с помощью команды docker compose:
docker compose up -d
Получил ошибку:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3DImmich%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
Запускать через sudo
sudo docker compose up -d
Шаг 4 – Обновление Immich
Что бы обновить приложение надо перейти в каталог с конфигами докера куда он установлен cd /home/sklad/Immich-app/
Обязательно обновить файл конфигурации, переименовать и удалить старый файл на всяк случай sudo mv docker-compose.yml
date +’%d%m%Y’-docker-compose.yml.bak
Скачать последнюю версию конфига: sudo wget https://github.com/Immich-app/Immich/releases/latest/download/docker-compose.yml
Обновить докер: sudo docker compose pull && sudo docker compose up -d
И на всякий случай перезапустить докер: docker compose restart
но это не обязательно.
ps А то обновил бездумно, потом капал рыл в чем проблема, а в мануале про это не сказано. В дискорде написали , что нужно читать про обновления там все написано, что нужны некоторые танцы без бубна. Так что обязательно читать, что пишут про обновленную версию. А выходят они с завидной регулярностью. Как они себе поставили планку релиз раз в неделю. Или пока не начнутся какие то косяки в телефоне, поскольку в телефоне то все автоматом обновляется, а серверная часть ручками и может возникнуть конфликт версий. Так я дотянул с версией 1.95 до выпуска 1.98 пропустив кучу релизов, пока мне не сказали домашние, где наши фотки, что за хрень? 😆
Резервное копирование базы данных
docker exec -t immich_postgres pg_dumpall –clean –if-exists –username=postgres | gzip > “/home/sklad/backup/immich/date +'%d%m%Y'
dump.sql.gz”
Вход в приложение Immich
Войдите в веб-приложение по адресу http://<machine-ip-address>:2283
и нажмите кнопку «Начало работы».
Пример конфигурации Apache
Ниже приведен пример конфигурации сайта Apache2. Обыкновенный обратный прокси. Имя сервера свое.
<VirtualHost *:80>
ServerName <snip>
ProxyRequests off
ProxyVia on
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/api/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:2283/$1 [P,L]
ProxyPass /api/socket.io ws://localhost:2283/api/socket.io
ProxyPassReverse /api/socket.io ws://localhost:2283/api/socket.io
<Location />
ProxyPass http://localhost:2283/
ProxyPassReverse http://localhost:2283/
</Location>
</VirtualHost>
Ответы на другие вопросы
Все оставшиеся вопросы и ответы на них найдутся в документации
Установка на железо
Зайти на сервер по ssh
Зайти под пользователя рут и сделать все шаги по установке
Войдите в веб-приложение по адресу http://<machine-ip-address>:2283
и нажмите кнопку «Начало работы».
Вход через домен
Создать домен для приложения photo.wildserver.ru
Создать два виртуальных хоста один для 80 порта с редиректом на защищенное соединение по 443 порту с такими конфигами (взято с рабочей машины):
sudo nano photo.wildserver.ru.conf
<VirtualHost *:80>
ServerAdmin admin@wildserver.ru
ServerName photo.wildserver.ru
ServerAlias www.photo.wildserver.ru
CustomLog ${APACHE_LOG_DIR}/photo.wildserver.ru.access.log combined
ErrorLog ${APACHE_LOG_DIR}/photo.wildserver.ru.error.log
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.photo.wildserver.ru [OR]
RewriteCond %{SERVER_NAME} =photo.wildserver.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
sudo nano photo.wildserver.ru.80-443.proxy.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@wildserver.ru
ServerName photo.wildserver.ru
ServerAlias www.photo.wildserver.ru
CustomLog ${APACHE_LOG_DIR}/photo.wildserver.ru.access.log combined
ErrorLog ${APACHE_LOG_DIR}/photo.wildserver.ru.error.log
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerName off
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/photo.wildserver.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/photo.wildserver.ru/privkey.pem
ProxyRequests Off
ProxyPreserveHost Off
ProxyVia on
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/api/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:2283/$1 [P,L]
ProxyPass /api/socket.io ws://localhost:2283/api/socket.io
ProxyPassReverse /api/socket.io ws://localhost:2283/api/socket.io
<Location />
ProxyPass http://localhost:2283/
ProxyPassReverse http://localhost:2283/
</Location>
</VirtualHost>
</IfModule>
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
При таком раскладе как бы не обращались к серверу всегда будет происходить перенаправление на зашифрованное соединение.
Для работы должен быть получен сертификат Let’s Encrypt.
Домен и сертификат были заранее получены. пришлось изменить только конфиг виртуального хоста.
После всего хранилище фото и видео доступно по адресу photo.wildserver.ru
Настройка переменных среды
Сделал некоторые изменения для использования большего количества памяти, железо позволяет. Осталось применить настройки.
# *1: При изменении уровней параллелизма службы машинного обучения рекомендуется начинать с этого параметра,
# а затем настраивать остальные.
# Число потоков пула потоков запроса (отключено, если <= 0)
# количество ядер процессора
MACHINE_LEARNING_REQUEST_THREADS=2 # НЕ ПРЕВЫШАТЬ ЧИСЛО РЕАЛЬНЫХ ПРОЦЕССОРОВ
# *2: Поскольку каждый процесс дублирует модели в памяти, менять это не рекомендуется,
# если у вас нет достаточного объема памяти.
# Количество рабочих процессов для создания 1
MACHINE_LEARNING_WORKERS=4
#########################################################################################
# ОСТОРОЖНО #
# #
# Чтобы изменить переменные среды, необходимо заново создать контейнеры Иммиха. #
# Простой перезапуск контейнеров не заменяет среду внутри контейнера! #
# #
# Чтобы воссоздать контейнер с помощью Docker Compose, запустите docker compose up -d. #
# В большинстве случаев докер распознает, что .env файл изменился и заново создайте #
# затронутые контейнеры. #
# Если это не сработает, попробуйте запустить docker compose up -d --force-recreate. #
# #
#########################################################################################
Ошибки и их устранение
Server status offline
Статус сервера офлайн, такая надпись в нижнем левом углу бывает высвечивается. Лечится перезапуском контейнера.
cd /home/sklad/Immich-app/
sudo docker compose up -d
При обновлении ошибка
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dimmich%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
Лечится то же перезапуском.
Комментарии