Установка в Docker

Это пример установки приложения COPSFB2 в Docker на DSM 7.1. Аналогично можно установить на любой компьютер с Docker.

За основу образа взят проект https://github.com/TrafeX/docker-php-nginx

Образ собирается на базе Alpine Linux, содержит PHP-FPM 8.1, Nginx 1.22 и само приложение COPSFB2. 

Доступ к файлам библиотеки (архивам с книгами и их описанием в INPX) осуществляется через volume. Все конфиги будут лежать внутри образа.

Вы можете при желании изменить сборку образа, оставив снаружи всё приложение или файлы конфигов. Ну или использовать другой дистрибутив linux, fastcgi вместо php-fpm или apache вместо nginx. Достоинства данного образа описаны  на https://github.com/TrafeX/docker-php-nginx и могу сказать, что у меня copsfb2 успешно работает из такого образа более полутора лет.

Архив с нужными конфигами, приложением и Dockerfile, для сборки контейнера. 

0.      Подготовительные операции.

Безусловно, на DSM должен быть установлен Docker.

На ваш NAS уже должна быть скачана библиотека с архивами книг и их описанием в формате INPX.

Запоминаем расположение и проверяем права доступа файлов библиотеки:

0.1. вашего inpx файла, например: 

/volume1/Books/LibRusEc/librusec_local_fb2.inpx

0.2. расположение файлов библиотеки, там где лежат zip'ы с книгами, например:

/volume1/Books/LibRusEc/lib.rus.ec

 

Внимание! На папку и файл, которые вы запоминаете, должны быть права у группы Everyone на чтение. Необходимо проверить и исправить, при необходимости:

1.  Распаковка архива

Скачиваем архив COPSFB2-Nginx-PHP81-fpm-Alpine-with-src.zip на NAS и распаковываем архив в какую-либо папку, например:

homes/user/Docker/,

в ней получится поддиректория COPSFB2-Nginx-PHP81-fpm-Alpine.

Если будете использовать отправку книг по почте, необходимо отредактировать файл config/config_local.php. Нужно отредактировать массив $config['cops_mail_configuration'] в самом конце файла:

2.  Сборка образа (для DSM 7.1)

2.1. Заходим по ssh на synology как админ, и получаем права root:

sudo -i

на запрос пароля ввести тот, который для пользователя с правами admin

 

2.2.. Переходим в ту папку, куда распаковали архив (там должен быть Dockerfile). Для примера выше команда:

cd /volume1/homes/user/COPSFB2-Nginx-PHP8-fpm-Alpine/

, проверяем, что в ней есть Dockerfile

ls -l Dockerfile

, должны получить в ответ типа

-rwxr-xr-x+ 1 user users 2321 Sep  4 12:40 Dockerfile

 Проверяем права у файлов, должны быть права на чтение у всех. Если нет, даем (через WEB-интерфейс DSM или в терминале через chmod):

chmod -R a+r *

 2.3. Собираем образ контейнера (точка в конце - часть команды!):

docker build -t garikh/copsfb2 .

 Смотрим вывод команды на ошибки. Если есть, внимательно читаем, чем они вызваны и их исправляем. 

3. Запуск контейнера (для DSM 7.1)

Возможно два варианта - из командной строrи в терминале или через WEB-интерфейс в DSM. В обоих случаях нужно вспомнить, где лежат архивы с книгами и где лежит INPX. Помните, пункты 0.1. и 0.2. инструкции?

3.1. Запуск из командной строки (это одна команда, обратный слэш  - перенос на другую строку):

docker run -d -p 8088:8080 \

 -v расположение_и_имя_inpx_из_пункта_0.1._инструкции:/var/www/html/create_db/fb2.inpx:ro \

 -v расположение_библиотеки_из_пункта_0.2._инструкции:/library:ro \

 --name copsfb2 \

 --restart unless-stopped \

 garikh/copsfb2

Несколько комментариев. 

Параметр -p 8088:8080 указывает порт, на котором снаружи будет доступно приложение, в данном примере это 8088. Вы можете указать любой другой свободный на вашей системе порт. Значение после двоеточия всегда 8080 (если вы не меняли настройки nginx в образе), это порт nginx внутри контейнера.

В параметре -v до двоеточия пути до архивов с книгами и INPX. Значения после двоеточия менять нельзя без редактирования конфигов.


3.2. Запуск из WEB-интерфейса Docker в DSM 

Docker->Образ (выбрать)->Запустить->Сеть Bridge->Настройки портов (задать свободный на выбор, например 8088) ->Том->Добавить папку (выбрать на диске расположение_библиотеки_из_пункта_0.2._инструкции и сопоставить с /library)->Добавить файл (выбрать на диске расположение_и_имя_inpx_из_пункта_0.1._инструкции и сопоставить с /var/www/html/create_db/fb2.inpx)


По аналогии, если у вас есть необходимость часто менять конфиги, можете сделать volume для файлов конфигов, например, для config_local.php. Если это нужно не часто и нет необходимости хранить конфиги при удалении контейнера, конфиги можно менять и внутри контейнера, ниже будет команда.

2. Сборка и запуск проекта (для DSM 7.2)

На DSM 7.2 с переходом на Container Manager появилась возможность сборки и запуска проекта без необходимости входа в терминал по ssh.

Описание проекта находится внутри архива в файле  ./compose.yaml

2.1 Редактируем файл проекта ./compose.yaml. Необходимо заменить пути к npx файлу и расположению файлов библиотеки. Открываем файл в текстовом редакторе и в секции volumes меняем пути на те, что запомнили в секции 0, пункты 0.1 и 0.2. 

Заменить надо значения до первого двоеточия


2.2 Запускаем Container Manager. В разделе Проект выбираем Создать

Заполняем Название проекта.

В поле Путь, нажатием кнопки Задать выбираем путь к распакованному архиву.

В появившемся диалоге соглашаемся на использование существующего файла проекта.

Еще раз проверяем в появившемся окне правильность путей. При необходимости поменяйте в настройках порт.

.В следующем окне визарда можете при желании привязать приложение к Web Station (не обязательно).



В последнем окне ставим галку на Запустить проект после его создания. 

Нажимаем Выполнено, ждем сборки проекта и его запуска.

Идем проверять в п.4

4. Проверка приложения

4.1. Проверяем, что контейнер запущен.

Или через терминал:

sudo docker ps

или в интерфейсе DSM Docker на закладке "Обзор" или закладке "Контейнер". Должен быть статус "Запущен".

4.2. Запускаем приложение 

http://адрес_NAS_в_сети:8088/ 

порт надо указать тот, что задавали в команде run или файле конфигурации проекта compose.yaml.

Приложение автоматом должно загрузить страницу создания БД.

Логин/Пароль, если запросит: admin/admcopsfb2   

5. Доступ к файлам внутри контейнера

Можно получить доступ к shell внутри контейнера, где сможете отредактировать конфиги, например, через vi.

5.1. Из терминала по ssh:

sudo docker exec -it copsfb2 /bin/sh

где copsfb2 - имя контейнера, которое вы задали в команде run. Можно его посмотреть через sudo docker ps

После этой команды вы попадете в shell контейнера

Или сразу в терминале:

sudo docker exec -it copsfb2 vi /var/www/html/config_local.php

5.2. в DSM в приложении Docker, на вкладке "Контейнер" правой клавишей мыши два щелчка по выбранному контейнеру, там вкладка "Теминал", "Создать", "Запустить с помощью команды" ввести /bin/sh. Открыть добавленный терминал.