Паттерн для разработки расширяемого приложения с неизменяемой средой развертывания
Вот в чем суть проблемы:
Я разрабатываю систему, одним из основных требований которой является расширяемость: должна быть возможность разработки плагинов, расширяющих основные функциональные возможности. Приложение будет предоставлять некоторый основной API, а разработчики смогут писать пакеты и расширения, которые добавляют функции.
Одна вещь, с проектированием которой у меня возникают проблемы: допустим, плагин представлен в виде папки с определенной структурой; как плагин должен быть установлен в основное приложение?
Традиционно многие веб-приложения расширялись путем загрузки кода подключаемого модуля в определенную папку внутри приложения, с некоторым механизмом обнаружения новых модулей основным приложением.
Способ развертывания разрабатываемого приложения я планирую использовать контейнеры: либо написать для него Dockerfile, либо использовать Dokku. Оба этих способа подразумевают работу с репозиторием и развертывание в неизменяемых средах: это делает идею добавления кода в папку проблематичной, поскольку этот код будет версионным и изменит репозиторий, чего я не хочу, поскольку добавление плагина не должно быть чем-то, что изменяет кодовую базу, по моему мнению.
Например, если кто-то решит форкнуть репозиторий моего приложения, добавить папку с плагином и развернуть его, будет проблематично оставаться в синхронизации, если основная кодовая база будет обновлена.
По этой причине я пытаюсь придумать способ добавления плагинов к приложению, не затрагивая его кодовую базу и совместимый с неизменяемым развертыванием, например, при использовании docker.
Есть ли какие-либо известные шаблоны для достижения этого? Если это имеет значение, система, которую я разрабатываю, состоит из двух отдельных приложений: бэкенда Django REST и фронтенда Vue.js, оба развернуты в двух отдельных контейнерах.