Всё необходимое для сборки docker-образов с платформой 1С и сопутствующими инструментами.
Проект вдохновлён идеями onec-docker. Но некоторые подходы переосмыслены. Например мне не трeбуются образы агента Jenkins, k8s, gitsync и я не планирую их делать и поддерживать, поэтому если они вам требуются, то рекомендую обратиться к onec-docker. При этом мне нужна автоматизированная сборка в GitHub Actions и минимально возможное покрытие образов тестами.
- Как собрать образы
- 1С:Исполнитель (executor)
- 1С:EDT (edt)
- 1С:EDT CLI (edtcli)
- 1С:EDT MCP Server (edt-mcp-server)
- 1С:EDT CodePilot1C MCP (edt-codepilot1c)
- 1С:Платформа (onec-platform)
- vanessa-runner (vrunner)
У вас есть 2 способа для сборки необходимых вам образов:
- С помощью форка данного репозитория и сборки через GitHub Actions (предпочтительный вариант).
- Клонирование и локальная сборка на вашем компьютере. Сборка возможна только на ПК с ОС Linux.
-
Форкаем этот репозиторий.
-
Включаем GitHub Actions, если не включилось автоматически.
-
Пробрасываем в GitHub Actions необходимые секреты. В общем случае это:
DOCKER_REGISTRY_URL— адрес вашего приватного docker registry, куда будут запушены собранные образы.DOCKER_LOGIN— логин для вашего registry.DOCKER_PASSWORD— пароль для вашего registry.
-
Для образов, установщики, которых требуется скачать с сайта релизов также требуются:
ONEC_USERNAME— логин к сайту релизов 1С.ONEC_PASSWORD— пароль к сайту релизов 1С.
-
"Навешиваем" нужные теги для триггера сборки. Если теги уже есть, предварительно их удаляем или пушим теги с --force. Теги можно "навешивать" на последний коммит или на последний релиз необходимого для сборки образа.
-
После завершения сборки получаем готовые образы в вашем registry.
- Клонируем репозиторий.
- Копируем файл
.env.exampleв.env. - Заполняем необходимые для сборки переменные среды в файле
.env. - Запускаем скрипты для сборки нужных образов. Скрипты лежат в директории
srcи имеют имя видаbuild-ОбразДляСборки.sh.
Для сборки требуется также ключ API для скачивания установщика 1С:Исполнителя с сайта https://developer.1c.ru. Ключ необходимо записать в переменную среды/секрет DEV1C_EXECUTOR_API_KEY.
-
Триггером для сборки в Actions является тег вида
executor_ВерсияДляСборки, напримерexecutor_3.0.2.2. -
Для PR‑проверок добавлен workflow, который собирает и тестирует образ без публикации.
-
Локальная сборка:
- Заполните
.envзначениямиDOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD,DEV1C_EXECUTOR_API_KEY. - Укажите версию Executor:
- однократно в текущей сессии:
export EXECUTOR_VERSION=3.0.2.2 - либо инлайном при запуске:
EXECUTOR_VERSION=3.0.2.2 ./src/build-executor.sh
- однократно в текущей сессии:
- Запустите сборку:
./src/build-executor.sh.
- без публикации в реестр (локальная проверка):
- один запуск:
PUSH_IMAGE=false EXECUTOR_VERSION=3.0.2.2 ./src/build-executor.sh - либо через
.env:PUSH_IMAGE=false
- один запуск:
- Заполните
-
Результат локальной сборки — образ с тегом
$DOCKER_REGISTRY_URL/executor:$EXECUTOR_VERSION.
Для сборки требуется доступ к сайту релизов 1С для скачивания установщика EDT. Данные учётной записи необходимо передать через переменные среды/секреты ONEC_USERNAME и ONEC_PASSWORD.
-
В GitHub Actions, помимо общих секретов
DOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD, добавьте:ONEC_USERNAME— логин к сайту релизов 1С.ONEC_PASSWORD— пароль к сайту релизов 1С.
-
Триггер для сборки в Actions — тег вида
edt_ВерсияEDT, напримерedt_2024.1.3. -
Локальная сборка:
- Заполните
.envзначениямиDOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD,ONEC_USERNAME,ONEC_PASSWORD. - Укажите версию EDT (поддерживаются мажорные версии с 2023 по 2025; версии ниже 2023 не поддерживаются, так как начиная с 2023 появилась
1cedtcliи была упраздненаring):- однократно в текущей сессии:
export EDT_VERSION=2024.1.3 - либо инлайном при запуске:
EDT_VERSION=2024.1.3 ./src/build-edt.sh
- однократно в текущей сессии:
- Запустите сборку:
./src/build-edt.sh.
- Заполните
-
Результат локальной сборки — образ с тегом
$DOCKER_REGISTRY_URL/edt:$EDT_VERSION. -
Память JVM:
- В образе задана переменная окружения
EDT_JAVA_XMXсо значением по умолчанию12g(12 ГБ). Файл1cedt.iniсохраняет дистрибутивное значение-Xmx4096m. - Переменная используется нижестоящими образами (
edt-mcp-serverи др.). Подробнее см. в разделах соответствующих образов. - Общая информация об аргументах JVM: документация 1С.
- В образе задана переменная окружения
-
Полезно знать:
- Переменная
NO_CACHE=trueотключит кэш сборки. - Переменная
DOCKER_SYSTEM_PRUNE=trueперед сборкой очистит ненужные слои/объекты Docker. - Образ собирается с предустановленным плагином запрета редактирования (Disable Editing Plugin). Плагин устанавливается из update‑site плагина в процессе сборки.
- Базовый образ
edtсобирается БЕЗENTRYPOINTдля корректной работы в GitLab CI. Запуск1cedtcliвыполняется явно (в производных образах, таких какedtcli, задаётсяENTRYPOINT).
- Переменная
Скрипт для локальной сборки — build-edt.sh.
Образ-обёртка над базовым edt, который добавляет ENTRYPOINT с 1cedtcli и объявляет том /edt. Собирается одновременно с базовым образом EDT.
-
Требования:
DOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD— доступ к приватному реестру, содержащему базовый образedt.EDT_VERSION— версия EDT, совпадает с базовым образом.
-
Локальная сборка:
- Убедитесь, что в реестре доступен образ
edt:$EDT_VERSION. Если образ отсутствует локально — скрипт авторизуется и попытается сделатьdocker pull. Если образа нет и в реестре — скрипт выполнит локальную сборку базовогоedtчерезbuild-edt.sh, а затем соберётedtcli. При этом, если был собран образedt, то он будет запушен, если пуш явно не запрещён при сборкеedtcliчерезPUSH_IMAGE=false - Запуск:
./src/build-edtcli.sh
- Убедитесь, что в реестре доступен образ
-
Результат локальной сборки — образ с тегом
$DOCKER_REGISTRY_URL/edtcli:$EDT_VERSION. -
Память JVM:
- Файл
1cedt.iniв образе содержит дистрибутивное значение-Xmx4096m(4 ГБ). Для увеличения памяти используйте опцию-vmargsсогласно документации 1C:EDT CLI. - Аргументы JVM, переданные через
-vmargs, добавляются после аргументов из1cedt.ini, и JVM использует последнее значение-Xmx:# Задать 8 ГБ для импорта проекта docker run --rm $DOCKER_REGISTRY_URL/edtcli:2024.1.3 \ -vmargs -Xmx8g \ -command import --configuration-files /src --project /edt/my-project
- Подробнее об аргументах JVM: документация 1С.
- Файл
Образ на базе edt, запускающий EDT через xvfb с установленным плагином EDT-MCP. Предоставляет MCP-сервер для LLM. Поддерживается EDT 2025.2.3 и выше.
-
Требования:
DOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD— доступ к приватному реестру, содержащему базовый образedt.EDT_VERSION— версия EDT (>= 2025.2.3).EDT_MCP_VERSION— версия плагина EDT-MCP (например1.24.5). Плагин устанавливается из GitHub релизов проекта.
-
Переменные окружения (runtime):
MCP_SERVER_PORT— порт MCP-сервера (по умолчанию8765).WORKSPACE_DIR— путь к workspace (по умолчанию/edt).EDT_JAVA_XMX— объём памяти JVM (по умолчанию12g). Значение передаётся в-Xmxпри запуске EDT.
-
Триггер для сборки в Actions — тег вида
edt-mcp-server_ВерсияEDT_ВерсияMCP, напримерedt-mcp-server_2025.2.3_1.24.5. -
Локальная сборка:
- Убедитесь, что в реестре доступен образ
edt:$EDT_VERSION. Если образ отсутствует — скрипт попытается сделатьdocker pull, а при неудаче выполнит локальную сборку черезbuild-edt.sh. - Запуск:
EDT_VERSION=2025.2.3 EDT_MCP_VERSION=1.24.5 ./src/build-edt-mcp-server.sh
- Убедитесь, что в реестре доступен образ
-
Результат локальной сборки — образ с тегом
$DOCKER_REGISTRY_URL/edt-mcp-server:$EDT_VERSION. -
Пример запуска:
# Запуск с портом по умолчанию (8765) docker run -p 8765:8765 $DOCKER_REGISTRY_URL/edt-mcp-server:2025.2.3_1.24.5 # Запуск с кастомным портом docker run -p 9999:9999 -e MCP_SERVER_PORT=9999 $DOCKER_REGISTRY_URL/edt-mcp-server:2025.2.3_1.24.5 # Запуск с монтированием локального workspace docker run -p 8765:8765 -v /path/to/project:/edt $DOCKER_REGISTRY_URL/edt-mcp-server:2025.2.3_1.24.5
-
Полезно знать:
- При запуске entrypoint-скрипт автоматически создаёт workspace с MCP-конфигом (если конфиг ранее не был создан).
- EDT запускается через Xvfb (виртуальный X-сервер).
- Дополнительные аргументы можно передать через
CMD(они передаются в1cedt). - Entrypoint автоматически применяет
EDT_JAVA_XMXчерез-vmargs -Xmxпри запуске1cedt. Для тестов или ограниченных сред можно снизить потребление памяти:docker run -e EDT_JAVA_XMX=4g -p 8765:8765 $DOCKER_REGISTRY_URL/edt-mcp-server:2025.2.3_1.24.5
Образ на базе edt, запускающий 1C:EDT в headless-режиме с установленным плагином CodePilot1C. Предоставляет MCP HTTP-сервер на порту 8765 для подключения LLM-агентов напрямую к EDT — без графического интерфейса.
-
Требования:
DOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD— доступ к приватному реестру, содержащему базовый образedt.EDT_VERSION— версия EDT (совпадает с базовым образом), например2025.2.3.EDT_CODEPILOT_VERSION— версия плагина CodePilot1C (например0.1.7.20260301-0607). Плагин устанавливается из GitHub-релизов проекта ondysss/codepilot1c-edt через механизм p2 director.
-
Триггер для сборки в Actions — тег вида
edt-codepilot1c_ВерсияEDT_ВерсияCodePilot, напримерedt-codepilot1c_2025.2.3_0.1.7.20260301-0607. -
Локальная сборка:
- Убедитесь, что в реестре доступен образ
edt:$EDT_VERSION. Если образ отсутствует локально — скрипт авторизуется и попытается сделатьdocker pull. Если образа нет и в реестре — скрипт выполнит локальную сборку базовогоedtчерезbuild-edt.sh, а затем соберётedt-codepilot1c. - Запустите сборку:
EDT_VERSION=2025.2.3 EDT_CODEPILOT_VERSION=0.1.7.20260301-0607 ./src/build-edt-codepilot1c.sh
- Без публикации в реестр:
PUSH_IMAGE=false EDT_VERSION=2025.2.3 EDT_CODEPILOT_VERSION=0.1.7.20260301-0607 ./src/build-edt-codepilot1c.sh
- Принудительная пересборка базового образа
edtперед сборкой:FORCE_BUILD_BASE=true EDT_VERSION=2025.2.3 EDT_CODEPILOT_VERSION=0.1.7.20260301-0607 ./src/build-edt-codepilot1c.sh
- Убедитесь, что в реестре доступен образ
-
Результат локальной сборки — образ с тегом
$DOCKER_REGISTRY_URL/edt-codepilot1c:$EDT_VERSION_$EDT_CODEPILOT_VERSION. -
Переменные окружения (runtime):
WORKSPACE_DIR— путь к workspace EDT (по умолчанию/edt).EDT_JAVA_XMX— размер кучи JVM (по умолчанию12g). Применяется к параметру-Xmxв1cedt.iniпри каждом старте контейнера.EDT_CODEPILOT_BEARERTOKEN— Bearer-токен для аутентификации MCP API. Если не задан — при первом запуске автоматически генерируется с помощьюuuidgenи записывается в1cedt.ini; сгенерированный токен выводится в лог-вывод. Если задан — значение переменной записывается (или обновляется) в1cedt.ini.
-
Примеры запуска:
# Запуск с автогенерацией Bearer-токена (токен будет выведен в логи) docker run -d -p 8765:8765 $DOCKER_REGISTRY_URL/edt-codepilot1c:2025.2.3_0.1.7.20260301-0607 # Запуск с явным Bearer-токеном docker run -d -p 8765:8765 \ -e EDT_CODEPILOT_BEARERTOKEN=my-secret-token \ $DOCKER_REGISTRY_URL/edt-codepilot1c:2025.2.3_0.1.7.20260301-0607 # Запуск с монтированием workspace и ограниченной памятью JVM docker run -d -p 8765:8765 \ -e EDT_JAVA_XMX=4g \ -e EDT_CODEPILOT_BEARERTOKEN=my-secret-token \ -v /path/to/edt-workspace:/edt \ $DOCKER_REGISTRY_URL/edt-codepilot1c:2025.2.3_0.1.7.20260301-0607
-
Полезно знать:
- EDT запускается в headless-режиме (
eclipse.ignoreApp=true,osgi.noShutdown=true) — без GUI. - MCP-сервер по умолчанию принимает все мутации (
defaultMutationDecision=ALLOW) и открывает весь инструментарий (exposedTools=*). - Параметры CodePilot прописаны статически в
1cedt.iniво время сборки; runtime-переменные управляют только Bearer-токеном и-Xmx. FORCE_BUILD_BASE=true— принудительно пересобрать базовый образedtперед сборкойedt-codepilot1c.NO_CACHE=true— отключить кэш сборки.DOCKER_SYSTEM_PRUNE=true— предварительно очистить неиспользуемые слои/объекты Docker.
- EDT запускается в headless-режиме (
Для сборки требуется доступ к сайту релизов 1С для скачивания установщиков платформы. Данные учётной записи необходимо передать через переменные среды/секреты ONEC_USERNAME и ONEC_PASSWORD.
-
Сборка в GitHub Actions (PR‑проверки):
- Есть workflow
ci-onec-platform.yml, который при изменении файлов вsrc/onec-platform/*.Dockerfileавтоматически формирует матрицу версий и собирает соответствующие образы без публикации в реестр. - Секреты:
ONEC_USERNAME,ONEC_PASSWORD.
- Есть workflow
-
Сборка и публикация через GitHub Actions по тегу:
- Триггером является тег вида
onec_platform_ВерсияПлатформы, напримерonec_platform_8.3.22.2557. - После выпуска такого тега workflow соберёт и опубликует образ
onec-platform:$ONEC_VERSIONв указанный реестр.
- Триггером является тег вида
-
Локальная сборка:
- Заполните
.envзначениямиDOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD,ONEC_USERNAME,ONEC_PASSWORD. - Укажите версию платформы 1С (поддерживаются минорные ветки 8.3.20–8.3.27). Скрипт выбирает
Dockerfileпо первым трём компонентам версии:8.3.22.x→src/onec-platform/8.3.22.Dockerfile.- однократно в текущей сессии:
export ONEC_VERSION=8.3.22.2557 - либо инлайном при запуске:
ONEC_VERSION=8.3.22.2557 ./src/build-onec-platform.sh
- однократно в текущей сессии:
- Запустите сборку:
./src/build-onec-platform.sh.
- Заполните
-
Результат локальной сборки — образ с тегом
$DOCKER_REGISTRY_URL/onec-platform:$ONEC_VERSION. -
Полезно знать:
PUSH_IMAGE=false— собрать без публикации в реестр.NO_CACHE=true— отключить кэш сборки.DOCKER_SYSTEM_PRUNE=true— предварительно очистить неиспользуемые слои/объекты Docker.- Секреты для скачивания установщиков передаются в сборку через BuildKit‑секреты, которые готовятся скриптом
scripts/prepare_onec_credentials.shна основе переменныхONEC_USERNAME/ONEC_PASSWORD.
vrunner — образ-обёртка для vanessa-runner. Он создаётся на базе onec-platform (onec-docker).
- При сборке
vrunnerскриптsrc/build-vrunner.shсначала проверяет наличие базового образа локально (без префикса и с префиксом). Если образ не найден локально, скрипт попытается выполнитьdocker pullиз реестра — но только если задан реальныйDOCKER_REGISTRY_URL(в CI для fork'ов по умолчанию может использоваться безопасный префиксlocal, при котором pull не выполняется). - Если базовый образ отсутствует и в реестре,
build-vrunner.shавтоматически вызовет./src/build-onec-platform.shдля локальной сборки базового образаonec-platform:$ONEC_VERSION. При включённомPUSH_IMAGE=trueбазовый образ будет также запушен в реестр.
Требования и ключевые переменные:
ONEC_VERSION— версия платформы (например8.3.27.1644). Для tag-trigger сборок переменная вычисляется из имени тегаvrunner_<ONEC_VERSION>.DOCKER_REGISTRY_URL,DOCKER_LOGIN,DOCKER_PASSWORD— для доступа к приватному реестру.ONEC_USERNAME,ONEC_PASSWORD— для скачивания установщиков платформы в процессе сборкиonec-platform.PUSH_IMAGE— еслиfalse, сборка не будет пушить итоговый образ (удобно для локальной проверки и PR).
Примеры:
Локальная сборка (с автоматическим созданием базового образа, если его нет):
# собрать vrunner (если нет onec-platform — будет собран локально)
PUSH_IMAGE=false ONEC_VERSION=8.3.27.1644 ./src/build-vrunner.shСборка через GitHub Actions по тегу (пример):
- Создайте тег
vrunner_8.3.27.1644и запушьте его в репозиторий. - Workflow извлечёт
ONEC_VERSIONиз тега и запустит./src/build-vrunner.sh. При необходимости будет предварительно собран и (если разрешён) запущен push базовогоonec-platform.