Docker окружение: различия между версиями

Материал из WiKi - UserSide
Нет описания правки
 
(не показана 51 промежуточная версия 2 участников)
Строка 1: Строка 1:
Docker-окружение является удобной альтернативой самостоятельной сборке и настройке всех необходимых компонентов сервера.
[[Docker_environment|en]] | [[Docker_окружение|ru]]
Данная статья описывает создание и запуск бандла (набора файлов) Docker-окружения для USERSIDE, начиная с версии 3.13 и новее.
Если вы уже используете Docker-окружение для USERSIDE 3.12, то Вам обязательно необходимо ознакомиться с разделом обновления данной главы!


= Требования =
[[File:docker-horizontal.png|right|frameless|]]
Необходимо, чтобы на вашем сервере был установлен Docker CE, а также Docker-compose. Для этого у Вас должен быть сервер под управлением 64-разрядной ОС Linux. Инструкции по установке Docker CE и Docker-compose, в зависимости от дистрибутива и версии Linux, Вы найдете на официальном сайте: [https://docs.docker.com/install/ Docker CE], [https://docs.docker.com/compose/install/ Docker-compose].


Также необходимо установить систему управлениями версиями GIT для удобного доступа к версиям бандла.
Для опытных системных администраторов, использующих Docker, мы предоставляем образцы конфигурации бандла для развёртывания ERP USERSIDE.


= Версионирование бандла =
Мы не распространяем Docker-образы, включающие USERSIDE или его компоненты, так как система не является свободной. Но мы предлагаем готовые Docker-образы для создания окружения, необходимого для запуска USERSIDE и его компонентов (модулей и микросервисов).
В старой версии бандла Docker-окружения использовался не совсем корректный способ распространения файлов. Распространялись сами файлы бандла, а не их шаблоны, что приводило к конфликтам при попытке обновить файлы бандла. В новых версиях, начиная с v3.13 распространяются файлы-шаблонов, на основании которых пользователь по желанию уже самостоятельно формирует файлы бандла (или просто копирует рабочие файлы из поставляемых шаблонов).


Начиная с версии v3.13 бандла работает следующая схема версионирования. Каждая версия бандла (совпадает с номером версии USERSIDE) распространяется в отдельной ветке. Например, для USERSIDE 3.13 создана ветка v3.13, содержащая все необходимые шаблоны для развёртывания окружения для версии 3.13. Также последняя стабильная версия отображается на ветку master.
Инструкция по установке, настройке, обновлению и обслуживанию теперь находится в репозитории с образцами, чтобы иметь возможность вносить изменения в инструкцию для каждой конкретной версии.


Вы можете всегда использовать ветку master не опасаясь за свои конфигурационные файлы бандла, ведь теперь распространяются не сами файлы, а их шаблоны.
Перейдите в репозиторий с примерами конфигурационных файлов и ознакомьтесь с инструкцией: https://github.com/userside/userside-docker


Вы можете использовать конкретную ветку, например, v3.13, если не планируете обновление до последних версий.
Также у нас имеются подобные примеры окружения для запуска модулей в Docker-контейнерах:
* [https://github.com/userside/usm_pon-docker-env usm_pon]
* [https://github.com/userside/usm_peleng-docker-env usm_peleng]
* [https://github.com/userside/usm_asterisk-docker-env usm_asterisk]
* [https://github.com/userside/usm_abills-docker-env usm_abills]
* [https://github.com/userside/usm_checker-docker-env usm_checker]


'''Обратите внимание!''' Если вы используете старую версию бандла (для версии 3.12), которая изначально распространялась в ветке master, то для обновления на версию 3.13 вам обязательно необходимо ознакомиться с разделом '''Обновление'''!
И несколько готовых Docker-образов, содержащих бесплатные модули, контейнеры на основании которых можно запустить прямо из образа:
 
* [[Usm satellite#Запуск с использованием Docker|usm_satellite]]
= Установка =
* [[Usm billing#Использование модуля в Docker|usm_billing]]
В данном разделе рассматривается установка и запуск бандла с нуля. Если Вы обновляетесь с 3.12, то вам также придется установить бандл для 3.13 с нуля, предварительно сделав все резервные копии. Это описано в разделе '''Обновление'''.
 
Мы несколько изменили рекомендации по установке, тем самым упростив процесс установки, сделав его понятней и избавив вас от неоднозначного понимания некоторых действий.
 
Далее будут описаны шаги с указанием в качестве примера установку в каталог /docker/userside. Вы можете использовать любой удобный Вам путь расположения файлов, однако учитывайте то, что все примеры использования будут показаны именно для этого каталога.
 
== Клонирование репозитория ==
Создайте каталог, в котором будет размещаться ваш бандл, а тажке в нем будет размещаться и всё окружение, включая файлы системы USERSIDE, резервные копии и файлы базы данных. И перейдите в него.
mkdir /docker && cd $_
Выполните команду клонирования репозитория в подкаталог с именем userside.
git clone https://github.com/userside/userside-docker.git userside
cd userside
Если вы желаете ограничиться конкретной веткой, чтобы все обновления файлов шаблонов не выходили за пределы этой ветки, вы можете перейти в нее, например, для версии 3.13 используйте ветку v3.13. Этот шаг является необязательным. Мы рекомендуем оставаться на ветке master.
git checkout v3.13
Для последующих обновлений файлов шаблонов вам достаточно выполнить команду:
git pull
 
== Конфигурирвание бандла ==
Выполните команду инициализации - она скопирует все необходимые файлы из шаблонов, если те еще не существуют.
./init.sh
В результате у вас появятся файлы Makefile (содержит макросы для простого управления бандлом) и docker-compose.yml (содержит всю конфигурацию бандла).
 
=== docker-compose.yml ===
Вы должны отредактировать файл docker-compose.yml в соответствии с вашими требованиями.
 
==== servces ====
В разделе services находятся настройки всех сервисов, образующих бандл - окружение для работы USERSIDE. Далее описаны рекомендации по настройке сервисов.
===== postgres =====
Раздел environment:
* LANG - настройки языка, расположения и кодировки в формате LOCALE.
* TZ - часовой пояс.
* POSTGRES_DB - наименование базы данных (желательно оставить как есть).
* POSTGRES_USER - имя пользователя для доступа к БД.
* POSTGRES_PASSWORD - пароль для доступа к БД.
===== fpm =====
Раздел environment:
* TZ - часовой пояс
Раздел volumes:
* Также, если вам необходимо внести какие-либо настройки в php-ini, вы можете раскомментировать строку с подключением файла php.ini в качестве volume, затем вручную скопировать файл php.ini-example, находящийся в подкаталоге config, в файл с именем php.ini и внести в него необходимые правки.
===== nginx =====
Раздел ports:
* Укажите номер порта хоста (слева), который бы вы хотели транслировать на порт 80 контейнера nginx. Если на хосте у вас установлен сервер nginx и вы желаете проксировать http-запросы внутрь контейнера, то в этом случае желательно ограничить доступ к контейнеру по http, а также изменить порт хоста. Например, чтобы транслировать порт 8080 локального хоста на порт 80 контейнера, укажите "8080:80". Если необходимо ограничить доступ только с локального хоста (если используете проксирование), укажите "127.0.0.1:8080:80".
Раздел logging:
* Здесь вы можете настроить логгирование стандартными средствами docker. По умолчанию в шаблоне настроена ротация логов с максимальным размером файлов 20 Мб и их количеством 10 шт.
 
==== volumes ====
Здесь настраиваются пути к отображаемым внутрь контейнеров volumes. Желательно не изменять эти настройки без необходимости. Если же все таки есть необходимость их изменить, то также измените соответствующие пути и в Makefile
 
==== networks ====
Если указанная по умолчанию подсеть для бандла пересекается с какой либо вашей подсетью, измените ее здесь в значении параметра subnet. Также это может быть полезно, если вы поднимаете несколько бандлов для разных копий USERSIDE.
 
=== Makefile ===
Этот файл содержит макрокоманды, упрощающие управление бандлом. По сути, это всего лишь сокращения длинных команд, которые Вы также можете использовать для конкретизации параметров.
 
Главные макрокоманды вынесены в самый верх файла. Это те команды, которые могут пригодиться вам для работы с бандлом чаще остальных. Чаще всего, это просто более короткие псевдонимы других команд.
Чтобы выполнить любую из команд, достаточно указать ее после make в командной строке. При этом текущий каталог должен быть /docker/userside. Например, чтобы запустить бандл, выполните:
make up
 
==== Список команд ====
* '''up''' - запускает бандл
* '''down''' (или '''stop''') - останавливает бандл
* '''install''' - составная команда, которая выполняет все действия, необходимые для развёртывания и запуска бандла, а также установки USERSIDE
* '''userside-install''' - команда, которая только запускает скрипт-установщик внутри контейнера (возможно пригодится, если установка предыдущей командой закончилась неудачно и нужно повторить запуск установщика)
* '''update''' - составная команда, которая выполняет все действия, необходимые для обновления как docker-образов окружения, так и самой системы USERSIDE
* '''uninstall''' - составная команда, которая выполняет удаление бандла. При этом файлы userside, резервные копии и файлы базы данных остаются
* '''log''' - команда, отображающая все логи бандла в реальном времени (выход ctrl+c)
 
Также Вы можете использовать и остальные команды в отдельности, указанные в этом файле. Кроме того, Вы можете использовать команду '''docker-compose''' напрямую, чтобы выполнять команды бандла, не предусмотренные этим файлом.
 
Если вам необходимо изменить или дополнить список макросов, вы можете изменять этот файл так, как вам необходимо. При обновлении бандла обновится лишь шаблон этого файла, а не сам файл.
 
== Инсталляция ==
При первом запуске необходимо выполнить макрос install:
make install
Этот макрос создаст необходимые каталоги, затем запустит бандл (при первоначальном запуске будут загружены все необходимые образы), затем запустит установщик userside, установит crontab для периодических операций и выполнит первоначальный запуск crontab для userside.
 
При установке обратите внимание на имена хостов для postgresql и redis. Именами хостов этих служб являются имена сервисов: postgres и redis соответственно.
 
После успешной инсталляции никаких дополнительных действий не требуется. Откройте в браузере адрес с установленным userside.
 
== Эксплуатация ==
При необходимости бандл можно остановить командой
make stop
И запустить командой
make up
Следить за логами в реальном времени командой
make log
Запустить консоль PostgreSQL psql
make postgres-psql
Запустить консоль Redis redis-cli
make redis-cli
Запустить планировщик userside вручную
make cron-run
 
Также можно использовать команду docker-compose для случаев, не предусмотренных набором макросов (можете дополнить список макросов самостоятельно).
docker-compose -p userside ps
Приведенная выше команда отобразит все контейнеры бандла и их состояние.
 
== Резервное копирование и восстановление ==
Во время инсталляции создается crontab в /etc/cron.d/userside, в котором прописаны три действия: периодический запуск планировщика userside и два действия для резервного копирования базы данных и файлов.
 
Если Вам необходимо вручную создать резервные копии базы данных и файлов, Вы можете запустить макрос:
make backup
В результате в каталоге /docker/data/backup будут созданы резервные копии базы данных и файлов.
 
Чтобы восстановить базу данных из резервной копии, выполните:
make DUMP="userside_2019-05-08_09-23-19.dump" dbrestore
Также вы можете использовать другие удобные вам приемы, используемые при резервном копировании и восстановлении базы данных при работе с Docker-контейнерами.
 
Чтобы восстановить файлы из резервной копии, выполните:
cd /docker/data/backup
tar -xjf userside_2019-05-08_09-23-19.tar.bz2 -C /docker/data/
 
== Дополнительное конфигурирование ==
Вам может понадобиться более тонко настроить бандл. Например, изменить значения переменных php.ini или же провести настройку postgresql.
 
=== PHP ===
Случай с php.ini уже был показан выше. Строка, которую необходимо раскомментировать, а также файл шаблона php.ini-example уже содержатся в бандле в качестве примера. Просто скопируйте файл php.ini-example, расположенный в каталоге config бандла, с именем php.ini, внесите необходимые правки, раскомментируйте строку, подключающую этот файл в качестве volume в сервисе fpm файла docker-compose.yml и перезапустите бандл
cd config
cp php.ini-example php.ini
nano php.ini
nano docker-compose.yml
make stop
make up
 
=== PostgreSQL ===
Для более производительной работы сервера PostgreSQL требуется произвести его настройку в соответствии с техническими параметрами сервера - тюнинг. С методиками тюнинга можно ознакомиться по ссылкам [https://ruhighload.com/post/%D0%A2%D1%8E%D0%BD%D0%B8%D0%BD%D0%B3+%D0%B1%D0%B0%D0%B7%D1%8B+Postgres] и [https://wiki.postgresql.org/wiki/Performance_Optimization]. Также есть специальные инструменты, помогающие сформировать конфигурацию сервера PostgreSQL в удобном интерактивном виде [https://pgtune.leopard.in.ua/] и [http://pgconfigurator.cybertec.at/].
 
Конфигурационные файлы PostgreSql транслируются из докер-контейнера вместе с базой данных в каталог /docker/data/db. В нем вы найдете все необходимые конфигурационные файлы, включая файл pg_hba.conf для настройки разрешений. После внесения правок просто перезапустите бандл макросами stop и up:
make stop
make up
 
== Обновление ==
Мы рекомендуем производить обновление в то время, когда приостановка работы системы не влияет на работу компании. Во время обновления могут произойти нештатные ситуации, от которых никто не застрахован. И, хотя у нас этот процесс отлажен достаточно четко, все равно, пожалуйста, не полагайтесь на волю случая.
 
=== В пределах минорной версии ===
Если вы обновляетесь в пределах минорной версии. Например, в пределах 3.13 (с 3.13.2 на 3.13.8), то вам достаточно воспользоваться макросом update:
git pull
make update
В этом случае автоматически будет выполнено резервное копирование базы данных и файлов, обновление docker-образов и запуск инсталлятора для произведения обновления самого приложения.
Как правило, в пределах минорной версии никаких изменений в окружении не происходит (если того не требуют исправления, о чем всегда будет указано в changelog к версии, на которую вы планируете обновиться), поэтому больше никаких действий не требуется.
 
=== На новую минорную версию ===
Если вы обновляетесь на новую минорную версию. Например, с версии 3.13.87 на версию 3.14.2, то обновление в полностью автоматическом режиме не подойдет. Эта инструкция также справедлива и для обновления с версии 3.12 на новую минорную версию (например, 3.13), при условии, что бандл для 3.12 вы разворачивали по инструкции после 10 мая 2019 г. Для этого необходимо сначала обязательно ознакомиться с информацией по обновлению на новую минорную версию, затем проделать следующие шаги:
make backup
make stop
git pull
Затем внимательно просмотреть файлы docker-compose-example.yml и Makefile-example на предмет новых сервисов, томов и макросов, затем дополнить свои файлы docker-compose.yml и Makefile недостающими строками. Затем выполнить:
make bundle-pull
make up
make postgres-postgis-update
make userside-install
После установки убедиться, что все работает корректно.
 
=== Обновление с устаревшей версии 3.12 на новую ===
Если Вы разворачивали Docker-окружение для версии 3.12 по инструкции до 10 мая 2019 года, то вам необходимо проделать последовательность действий, описанную в этом разделе.
 
Как убедиться в том, что вы разворачивали Docker-окружение, которое является устаревшим? Если у вас каталог с бандлом (по инструкции это был каталог ~/userside-docker) и каталог с устанавливаемым приложением и резервными копиями (по инструкции это были каталоги /opt/userside /opt/backup), то ваша версия устарела. В новой версии бандла v3.12 организация каталогов точно такая же, как и в v3.13 и во всех будущих версиях.
 
Итак, если у вас именно устаревший бандл, то проделайте следующее:
 
==== Резервное копирование ====
Перейдите в каталог с бандлом (~/userside-docker если вы следовали инструкции и не меняли его месторасположение) и выполните резервное копирование, запустив команду
make backup
Далее создайте где-то в надежном месте каталог, в котором будут размещены промежуточные резервные копии. Например, пусть это будет /backup и скопируйте в него все файлы резервных копий, а также файл docker-compose.yml
mkdir /backup
sudo cp /opt/backup/* /backup
cp docker-compose.yml /backup
Убедитесь в том, что файлы резервных копий скопированы!
 
Остановите работу бандла и удалите его
docker-compose -p userside down -v
Теперь удалите каталог с бандлом, каталог с приложением и бекапами
cd /
sudo rm -rf ~/userside-docker
sudo rm -rf /opt/userside /opt/backup
На данный момент у вас должны остаться только резервные копии.
 
Теперь произведите установку бандла с самого начала. Вы можете использовать ветку master (она содержит актуальную версию 3.13 или ту версию, которая будет актуальна на момент чтения этих строк) или же выбрать другую ветку, как показано выше в разделе установки. Мы рекомендуем использовать ветку master. Выполните следующие команды:
sudo mkdir -p /docker && cd $_

Текущая версия от 12:39, 8 февраля 2023

en | ru

Для опытных системных администраторов, использующих Docker, мы предоставляем образцы конфигурации бандла для развёртывания ERP USERSIDE.

Мы не распространяем Docker-образы, включающие USERSIDE или его компоненты, так как система не является свободной. Но мы предлагаем готовые Docker-образы для создания окружения, необходимого для запуска USERSIDE и его компонентов (модулей и микросервисов).

Инструкция по установке, настройке, обновлению и обслуживанию теперь находится в репозитории с образцами, чтобы иметь возможность вносить изменения в инструкцию для каждой конкретной версии.

Перейдите в репозиторий с примерами конфигурационных файлов и ознакомьтесь с инструкцией: https://github.com/userside/userside-docker

Также у нас имеются подобные примеры окружения для запуска модулей в Docker-контейнерах:

И несколько готовых Docker-образов, содержащих бесплатные модули, контейнеры на основании которых можно запустить прямо из образа: