Help:XSvacer:Webide:SvacerAsDockerContainer: Difference between revisions
M.vinogradov (talk | contribs) mNo edit summary |
M.vinogradov (talk | contribs) mNo edit summary |
||
Line 170: | Line 170: | ||
... | ... | ||
</pre> | </pre> | ||
== Схемы компонентов == | |||
Ниже приведены концептуальные схемы компонентов, на базе которых основана функциональность запуска IDE. Данные схемы могут быть использованы для поиска других решений приведённых выше задач. | |||
=== Стандартный запуск Svacer в виде сервиса === | |||
[[File:Comp-svacer-webide-default-hosting.png]] | |||
=== Запуск Svacer внутри docker-контейнера === | |||
[[File:Comp-svacer-in-container-webide-hosting.png]] |
Revision as of 11:24, 11 March 2025
Поддержка функциональности webide когда Svacer развёрнут в docker-контейнере
На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, "рядом" с docker'ом.
Для поддержки функциональности webide
когда Svacer развёрнут в docker-контейнере необходимо решить следующие задачи:
- Активация функциональности
webide
в docker-контейнере Svacer; - Предоставить docker-контейнеру Svacer доступ к управлению контейнерами IDE;
- Организация сетевого доступа между контейнером Svacer и контейнерами IDE;
- Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE;
Детали каждой задачи и варианты решения приведены ниже.
Активация функциональности webide
Для активации функциональности webide
необходимо при запуске Svacer указать флаг --xsvacer.features webide
Решение
В docker-compose.yml используется docker-образ Svacer, собранный на основе Dockerfile. В данном файле содержится инструкция запуска Svacer
CMD /svacer/bin/svacer-server --memsettings=${MEMSETTINGS} run --store $STORE --pg $SVACER_PG_URL
Для активации функциональности IDE необходимо переопределить аргументы инструкции CMD
в файле docker-compose.yml
:
services: ... svacer: ... command: /bin/sh -c '/svacer/bin/svacer-server --memsettings=$${MEMSETTINGS} run --store $$STORE --pg $${SVACER_PG_URL} --xsvacer.features webide'
CMD
docker-образа можно с помощью команды docker image inspect {имя образа}
Предоставление контейнеру Svacer доступа к управлению контейнерами IDE
Функциональность запуска IDE основана на том, что Svacer управляет контейнерами IDE с помощью API docker'а. Поэтому необходимо предоставить доступ к API docker'а из docker-контейнера Svacer.
Решение
Один из способов подключения к API docker'а является использование socket-файла /var/run/docker.sock
. Чтобы Svacer получил доступ к этому файлу, его необходимо примонтировать к docker-контейнеру:
services: ... svacer: ... volumes: ... - /var/run/docker.sock:/var/run/docker.sock:ro ...
Изменение настроек Svacer - svacer.cfg
Дальнейшие шаги связаны с изменением настроек Svacer. В случае, когда Svacer развёрнут в docker-контейнере, это можно сделать следующим образом:
- Создать конфигурационный файл
svacer.cfg
; - Примонтировать файл к рабочей директории docker-контейнера Svacer;
- Перезапустить контейнер Svacer;
Чтобы примонтировать svacer.cfg
к контейнеру Svacer нужно в файл docker-compose.yaml
добавить строку:
services: ... svacer: ... volumes: ... - /path/to/svacer.cfg:/svacer/bin/svacer.cfg:ro ...
Перенос настроек функциональности webide
в svacer.cfg
Скопировать секцию с настройками по умолчанию в svacer.cfg
Организация сетевого доступа между контейнером Svacer и контейнерами IDE
В текущей реализации при запуске docker-контейнер IDE публикует внутренний порт web-приложения Theia IDE на случайный порт всех сетевых интерфейсов (0.0.0.0) docker-хоста. Svacer хранит информацию на каком порте хоста развёрнуты соответствующие инстансы IDE и проксирует запросы к ним.
Необходимо организовать доступ контейнера Svacer к портам docker-хоста, на которых опубликованы контейнеры IDE.
Решение
Чтобы предоставить доступ контейнера Svacer к контейнеру IDE нужно:
- Определить ip-адрес интерфейса docker-хоста
docker0
; - Изменить настройку публикации портов контейнеров IDE на значение ip-адреса
docker0
.
Определение ip-адреса docker0
На docker-хосте выполнить команду ip a
:
$ ip a ... 6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 82:70:b5:24:50:e4 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever
В данном случае искомый ip-адрес - 172.17.0.1
Изменение настроек публикации портов контейнеров IDE
Настройки публикации порта контейнера IDE заданы в конфигурации запуска IDE. Настройки по умолчанию должны быть предварительно перенесены в svacer.cfg
.
В файле svacer.cfg
нужно добавить параметр hostip
со значением ip-адреса интерфейса docker0
:
xsvacer: webide: theia: 1-46-0: &1-46-0 ... docker: ... container: ... hostconfig: ... portbindings: "3000/tcp": - hostport: 0 hostip: 172.17.0.1 # новый параметр ...
Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE
При запуске IDE для просмотра снимка, Svacer экспортирует исходный код снимка в папку на docker-хосте. Далее эта папка монтируется к контейнеру IDE, к пути /home/project
, который использует Theia IDE в качестве папки проекта.
При развёртывании Svacer в docker-контейнере необходимо настроить экспорт исходников в папку, которая может быть примонтирована к контейнеру IDE.
Решение
Путь к корневой папке, в которую будут экспортироваться исходники снимков, задаётся в конфигурационном параметре sourcesroot
. Так как этот же параметр используется для настройки пути к корневой папке на docker-хосте, которая будет примонтирована к контейнеру IDE, то пути к папке с исходным кодом снимков должны совпадать в контейнере Svacer и на docker-хосте.
Пример конфигурации
svacer.cfg
:
xsvacer: webide: theia: 1-46-0: &1-46-0 ... sourcesroot: /data/snapshot-sources ...
docker-compose.yaml
:
services: ... svacer: ... volumes: ... - /data/snapshot-sources:/data/snapshot-sources ...
Схемы компонентов
Ниже приведены концептуальные схемы компонентов, на базе которых основана функциональность запуска IDE. Данные схемы могут быть использованы для поиска других решений приведённых выше задач.