Приложение для фото и видео Immich
На мой взгляд это лучшее приложения для хранения и синхронизации своего фото и видео. Можно послать далеко и надолго все остальные сервисы, (не буду называть их имен, они и так известны), которые по мимо вытягивания бабла еще и используют наши же файлы в своих интересах. Это просто бомба, все файлы с телефона или из других источников будут упорядоченно хранится на своем собственном сервере. Неограниченны в размерах файлохранилища. И главные фишки - машинный поиск и распознавание лиц. Меня старенького ИИ распознал в детсадовском возрасте. Вот с поиском бывают некоторые смешные курьёзы, но это фича, а не баг, как говорится 😆
Для приобретения нового опыта установки и способов хранения и синхронизации своего видео и фото, без громоздких аналогов попробую сначала установить данное приложение на виртуальную машину, что бы не допустить ошибок при установке на реальное железо. Почитать о данном приложении
Установка 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 пользовательскими значениями.
nano example.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
Сохранить файл 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 docker-compose.yml.$(date +%d-%m-%Y).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 images -f dangling=true
Удалить неиспользуемые образы:
docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
Подтвердить удаление Y
Удаление несвязанных томов
Список томов:
docker volume ls
Удаление томов:
docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N]
Подтвердить удаление Y
Вход в приложение 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
Зайти под пользователя рут или через sudo
и сделать все шаги по установке написанные выше при установке на виртуалку.
Войдите в веб-приложение по адресу 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. #
# #
#########################################################################################
Мобильное приложение
https://immich.app/docs/features/mobile-app
Ошибки и их устранение
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
Лечится то же перезапуском.
Комментарии