.. _docker_compose: Установка Citeck c помощью Docker Compose ========================================== .. contents:: :depth: 5 Системные требования -------------------- - Установлен `Docker `_ - Установлен `Docker Compose `_ - **16 ГБ** ОЗУ для корректного запуска Citeck Установка и запуск Citeck Community ------------------------------------- .. important:: Комплект поставляется с предзаполненными :ref:`демонстрационными данными`. Для отключения данной настройки перед разворачиванием стенда перейдите в папку ``\services\environments``, в файле **demo_data.env** в настройке **WITH_DEMO_DATA** укажите **false**. Мы анонимно собираем статистику с использованием сервиса `Umami `_. Сервис не собирает и не хранит персональные данные, избегая необходимости использования файлов cookie. 1. Установите `Docker и Docker Compose `_ на вашу ОС. 2. Клонируйте репозиторий: .. code-block:: bash git clone https://github.com/citeck/citeck-community.git 3. Перейдите в папку с клонированным репозиторием: .. code-block:: bash cd /полный/путь/до/папки 4. Запустите Citeck: .. code-block:: bash docker-compose up -d 5. Подождите, пока система запустится (время зависит от мощности системы). 6. Откройте браузер и перейдите по адресу: ``http://localhost/`` 7. Войдите в систему: .. image:: _static/docker-compose/09.png :width: 600 :align: center .. code-block:: text Username: admin Password: admin Если необходимо сменить пароль, см. `инструкцию Keycloak `_. .. note:: При первом развёртывании без демонстрационных данных Keycloak попросит сменить пароль. 8. После входа станет доступна страница :ref:`персонального рабочего пространства`: .. image:: _static/docker-compose/11.png :width: 700 :align: center В левом верхнем углу доступна кнопка для выбора рабочих пространств и создания нового: .. image:: _static/docker-compose/11_1.png :width: 450 :align: center .. grid:: 2 :gutter: 2 .. grid-item-card:: Рабочие пространства :link: workspaces :link-type: ref .. grid-item-card:: Корпоративный портал :link: corp_portal :link-type: ref .. grid-item-card:: Модули и учётные записи :link: ecos_modules :link-type: ref .. grid-item-card:: Раздел администратора :link: admin :link-type: ref .. note:: При первом запуске в течение первых 5 минут после успешной установки и входа в систему могут возникать ошибки, например: .. image:: _static/docker-compose/08.png :width: 300 :align: center Развёртывание и запуск Citeck продолжается — необходимо подождать. Обновление до последнего релиза -------------------------------- Выполните следующие команды в терминале: 1. Остановите Citeck: .. code-block:: bash docker-compose down 2. Перейдите в папку ``citeck-community``: .. code-block:: bash cd /полный/путь/до/папки/citeck-community 3. Получите актуальную версию: .. code-block:: bash git pull 4. Загрузите последние версии образов: .. code-block:: bash docker-compose pull 5. Запустите Citeck: .. code-block:: bash docker-compose up -d Подготовка окружения и установка Citeck ------------------------------------------ .. tab-set:: .. tab-item:: Ubuntu Server 24.04 LTS Установите Docker: .. code-block:: bash sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Добавьте репозиторий в источники Apt: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update Установите последнюю доступную версию: .. code-block:: bash sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Или установите конкретную версию: .. code-block:: bash apt-cache madison docker-ce | awk '{ print $3 }' VERSION_STRING={Your Specific version} sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING \ containerd.io docker-buildx-plugin docker-compose-plugin Настройте автозапуск Docker: .. code-block:: bash sudo systemctl enable docker Установите Docker Compose: .. code-block:: bash curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \ -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose Проверьте установку: .. code-block:: bash docker-compose --version На этом установка Docker Engine и Docker Compose завершена. Клонируйте репозиторий и запустите Citeck: .. code-block:: bash wget https://github.com/Citeck/citeck-community/archive/refs/heads/master.zip unzip master.zip cd citeck-community-master docker-compose pull docker-compose up -d .. note:: Выполняйте команды из директории ``citeck-community-master``. Если локальная сеть может пересекаться с сетью Docker, задайте предопределённую подсеть в файле **/etc/docker/daemon.json** (переменная **default-address-pools**): .. code-block:: json { "default-address-pools": [ {"base": "172.19.0.0/16", "size": 24} ] } .. tab-item:: Debian 11 "Bullseye" Установите Docker: .. code-block:: bash sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Добавьте репозиторий в источники Apt: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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-get update Установите последнюю доступную версию: .. code-block:: bash sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Или установите конкретную версию: .. code-block:: bash apt-cache madison docker-ce | awk '{ print $3 }' VERSION_STRING={Your Specific version} sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING \ containerd.io docker-buildx-plugin docker-compose-plugin Настройте автозапуск Docker: .. code-block:: bash sudo systemctl enable docker Установите Docker Compose: .. code-block:: bash wget https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-Linux-x86_64 mv ./docker-compose-Linux-x86_64 /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose .. note:: Версию можно изменить на более актуальную, заменив ``v2.29.1``. На этом установка Docker Engine и Docker Compose завершена. Клонируйте репозиторий и запустите Citeck: .. code-block:: bash wget https://github.com/Citeck/citeck-community/archive/refs/heads/master.zip unzip master.zip cd citeck-community-master docker-compose pull docker-compose up -d .. note:: Выполняйте команды из директории ``citeck-community-master``. Если локальная сеть может пересекаться с сетью Docker, задайте предопределённую подсеть в файле **/etc/docker/daemon.json** (переменная **default-address-pools**): .. code-block:: json { "default-address-pools": [ {"base": "172.19.0.0/16", "size": 24} ] } .. tab-item:: Astra Linux Орел .. note:: Инструкция проверялась с Astra Linux Common Edition 2.12.46. Установите Docker: .. code-block:: bash sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - sudo printf "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable \n" \ > /etc/apt/sources.list.d/docker.list sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io Настройте группы Docker: .. code-block:: bash sudo groupadd docker sudo usermod -aG docker $USER sudo systemctl enable docker.service sudo systemctl enable containerd.service Установите Docker Compose: .. code-block:: bash wget https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 mv ./docker-compose-Linux-x86_64 /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose .. note:: Версию можно изменить на более актуальную, заменив ``1.27.4``. Клонируйте репозиторий и запустите Citeck (выполняется в терминале, **Alt+T**): .. code-block:: bash git clone https://github.com/Citeck/citeck-community.git && cd citeck-community docker-compose pull docker-compose up -d .. note:: Выполняйте команды из директории ``citeck-community``. Если локальная сеть может пересекаться с сетью Docker, задайте предопределённую подсеть в файле **/etc/docker/daemon.json** (переменная **default-address-pools**): .. code-block:: json { "default-address-pools": [ {"base": "172.19.0.0/16", "size": 24} ] } .. tab-item:: Ред ОС (Red OS) .. note:: Инструкция проверялась на РЕД ОС 7.3, ядро Linux 5.15.72. Обновите пакеты и отключите SELINUX: .. code-block:: bash dnf update echo 'SELINUX=disabled' > /etc/sysconfig/selinux reboot Установите Docker и Docker Compose: .. code-block:: bash sudo dnf install docker-ce docker-ce-cli docker-compose systemctl enable docker Клонируйте репозиторий и запустите Citeck (выполняется в терминале, **Alt+T**): .. code-block:: bash git clone https://github.com/Citeck/citeck-community.git && cd citeck-community docker-compose pull docker-compose up -d .. note:: Если встречается ошибка **unknown log opt 'max-size' for journald log driver**, откройте **/etc/docker/daemon.json** и замените ``"log-driver": "journald"`` на ``"log-driver": "json-file"``. Если локальная сеть может пересекаться с сетью Docker, задайте предопределённую подсеть в файле **/etc/docker/daemon.json** (переменная **default-address-pools**): .. code-block:: json { "default-address-pools": [ {"base": "172.19.0.0/16", "size": 24} ] } .. tab-item:: Oracle Enterprise Linux 8.9 Установите Docker: .. code-block:: bash sudo dnf update -y sudo dnf install -y dnf-utils ca-certificates curl sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf makecache sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Настройте автозапуск Docker: .. code-block:: bash sudo systemctl start docker sudo systemctl enable docker Чтобы команда ``docker-compose`` была доступна напрямую (а не только ``docker compose``): .. code-block:: bash sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose На этом установка Docker Engine и Docker Compose завершена. .. note:: В случае Enterprise-сборки подключитесь к registry: ``docker login ``. **Registry URL** и **данные для аутентификации** можно запросить у контактного лица со стороны Citeck. Клонируйте репозиторий и запустите Citeck: .. code-block:: bash wget https://github.com/Citeck/citeck-community/archive/refs/heads/master.zip unzip master.zip cd citeck-community-master docker-compose pull docker-compose up -d .. note:: Выполняйте команды из директории ``citeck-community-master``. Если локальная сеть может пересекаться с сетью Docker, задайте предопределённую подсеть в файле **/etc/docker/daemon.json** (переменная **default-address-pools**): .. code-block:: json { "default-address-pools": [ {"base": "172.19.0.0/16", "size": 24} ] } Переключение на BASIC аутентификацию вместо Keycloak ----------------------------------------------------- Если нужен простой способ настройки доступа в систему, минуя Keycloak, можно настроить BASIC Auth (не рекомендуется для production-сред). 1. Откройте файл **ecos-proxy-app.env**: .. code-block:: bash nano citeck-community-master/services/environments/ecos-proxy-app.env Замените строку: .. code-block:: text ENABLE_OIDC_FULL_ACCESS=true на: .. code-block:: text ENABLE_OIDC_FULL_ACCESS=false 2. В этом же файле добавьте: .. code-block:: text BASIC_AUTH_ACCESS=admin:admin,fet:fet .. note:: ``admin:admin,fet:fet`` — список пользователей, имеющих доступ в систему. Формат: ``{{пользователь_0}}:{{пароль_0}},{{пользователь_1}}:{{пароль_1}}``. После изменения файла необходимо перезапустить контейнер **ecos-proxy-app**, чтобы изменения вступили в силу. 3. Из директории **citeck-community-master** остановите проект: .. code-block:: bash docker-compose down 4. Запустите проект: .. code-block:: bash docker-compose up -d Данные для входа в Citeck: .. code-block:: text Username: admin Password: admin Сервисы Docker --------------- :ref:`По ссылке ` перечислены сервисы с точки зрения Docker и их настройки. .. note:: Некоторые контейнеры запускаются один раз и далее находятся в статусе **exited**, например: - ``citeck-community-master-ecos-meetings-ecos-apps-1`` - ``citeck-community-master-ecos-order-pass-ecos-apps-1`` - ``citeck-community-master-ecos-common-data-list-ecos-apps-1`` - ``citeck-community-master-ecos-assignments-ecos-apps-1`` Возможные проблемы ------------------- Windows ~~~~~~~~ .. dropdown:: Включение WSL 2 Docker Desktop использует функцию динамического распределения памяти в WSL 2, что значительно снижает потребление ресурсов. WSL 2 улучшает совместное использование файловой системы, время загрузки и предоставляет доступ к новым функциям Docker Desktop. 1. Включите компонент **Платформа виртуальных машин** в **PowerShell**: .. code-block:: powershell dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 2. Скачайте и установите `пакет обновления ядра Linux для WSL 2 (64-разрядные компьютеры) `_. 3. Задайте WSL 2 версией по умолчанию: .. code-block:: powershell wsl --set-default-version 2 4. Проверьте версию WSL: .. code-block:: powershell wsl --list --verbose Подробная инструкция: `docs.microsoft.com — установка WSL 2 `_ 5. При установке Docker в окне конфигурации установите галочку **Use WSL 2 instead of Hyper-V (recommended)**. Подробная инструкция: `docs.docker.com — Docker Desktop WSL 2 `_ .. dropdown:: Порт 8080 уже занят Citeck UI использует порт **8080**. Если он занят другой программой, появится ошибка: *«Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: Only one usage of each socket address is normally permitted.»* .. image:: _static/docker-compose/01.png :width: 400 :align: center Чтобы найти, какой процесс занимает порт, выполните: .. code-block:: powershell netstat -ono # или netstat -ono | findstr 8080 Если команда не находит виновника, воспользуйтесь сторонней утилитой, например **CurrPorts**. .. dropdown:: Порт зарезервирован Windows Некоторые порты (например, **50432**, используемый **ecos-postgres**) могут быть зарезервированы Windows. Проверьте зарезервированные диапазоны: .. code-block:: powershell netsh int ipv4 show excludedportrange protocol=tcp .. image:: _static/docker-compose/02.png :width: 400 :align: center Если нужный порт попадает в зарезервированный диапазон, появится ошибка: *«Cannot start service ecos-postgres: driver failed programming external connectivity on endpoint»* Чтобы исправить это, выполните в командной строке с повышенными правами: 1. Отключите Hyper-V и перезагрузите систему: .. code-block:: powershell dism.exe /Online /Disable-Feature:Microsoft-Hyper-V 2. Добавьте нужный порт в исключения: .. code-block:: powershell netsh int ipv4 add excludedportrange protocol=tcp startport=50432 numberofports=1 3. Включите Hyper-V обратно и перезагрузите систему: .. code-block:: powershell dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All После перезагрузки порт попадёт в исключения и ошибка не возникнет. .. dropdown:: Настройка дополнительных параметров WSL `Настройка глобальных параметров WSL `_ MacOS ~~~~~~ .. dropdown:: Запускаются не все контейнеры Если при разворачивании приложения в Docker запускаются не все контейнеры: .. image:: _static/docker-compose/06.png :width: 400 :align: center Добавьте путь **/opt** в настройках Docker: .. image:: _static/docker-compose/07.png :width: 600 :align: center How to ------ .. note:: Community и Enterprise версии Citeck в настоящее время не поддерживают работу на подпути (subpath). .. dropdown:: Изменить адрес с localhost на пользовательский домен .. tab-set:: .. tab-item:: С чистой БД 1. В файле **citeck-community/services/environments/ecos-identity-app.env** замените: .. code-block:: text KEYCLOAK_FRONTEND_URL=http://localhost/ecos-idp/auth на: .. code-block:: text KEYCLOAK_FRONTEND_URL=http://mydomain.ru/ecos-idp/auth 2. В файле **citeck-community/services/environments/ecos-proxy-app.env** замените: .. code-block:: text EIS_ID=citeck-community REDIRECT_LOGOUT_URI=http://localhost на: .. code-block:: text EIS_ID=mydomain.ru REDIRECT_LOGOUT_URI=http://mydomain.ru 3. В файле **citeck-community/services/configs/ecos-identity-app/realm-export.json** замените: .. code-block:: json "redirectUris": [ "http://localhost*" ] на: .. code-block:: json "redirectUris": [ "http://mydomain.ru*" ] .. note:: Шаги 3 и 4 имеют смысл только при разворачивании на чистых БД. 4. В файле **citeck-community/services/configs/ecos-identity-app/realm-export.yaml** замените: .. code-block:: text "redirectUris": [ "http://localhost*" ] на: .. code-block:: text "redirectUris": [ "http://mydomain.ru*" ] 5. Добавьте запись в файл **hosts**: .. code-block:: text 127.0.0.1 mydomain.ru .. tab-item:: Не с чистой БД 1. Войдите в панель администратора Keycloak. 2. Откройте реалм **ecos-app**. 3. Перейдите в раздел **Clients**. 4. Откройте **ecos-proxy-app**. 5. В поле **Valid Redirect URIs** замените ``http://localhost`` на ``http://mydomain.ru``. 6. Сохраните изменения. .. dropdown:: Исключить адрес из авторизации Keycloak Временно это можно сделать на уровне модификации **ecos-proxy-app**. Зайдите в контейнер: .. code-block:: bash docker-compose exec ecos-proxy-app /bin/bash Отредактируйте конфигурационный файл: .. code-block:: text /etc/nginx/conf.d/default.conf Перезагрузите nginx: .. code-block:: bash nginx -s reload На постоянной основе это возможно только путём сборки собственной версии контейнера **ecos-proxy-app** или путём отправки Pull Request с возможностью передавать незащищаемые URL в качестве параметра.