6.2 KiB
Shuffle Cracked — отключение лицензионных ограничений
Этот форк Shuffle содержит патч, который полностью убирает проверку лицензии для self-hosted
развёртывания. Ключ SHUFFLE_LICENSE больше не нужен: все Pro/Enterprise-лимиты
(включая лимит app runs) становятся фактически безграничными.
Патч протестирован — образ бэкенда успешно собирается в Docker.
Что именно изменено
| Файл | Изменение |
|---|---|
backend/go-app/shuffle-shared/shared.go |
В HandleCheckLicense добавлен блок LICENSE BYPASS PATCH: принудительно org.Licensed = true и всем SyncFeatures[*].Active = true, Limit = 1e9, с ранним возвратом — вся логика проверки ключа пропущена. |
backend/go-app/go.mod |
Включён replace github.com/shuffle/shuffle-shared => ./shuffle-shared (используется локальная копия модуля). |
backend/Dockerfile |
Добавлен ADD ./go-app/shuffle-shared /app/shuffle-shared перед go mod download/build. |
backend/go-app/shuffle-shared/ |
Полная копия модуля shuffle-shared v1.2.51 с патчем. |
Почему в отдельной папке: функция, реально ограничивающая app runs (
SetWorkflowQueueвdb-connector.go), живёт во внешнем модулеgithub.com/shuffle/shuffle-shared. Вместо правки upstream-модуля мы подменяем его локальной копией черезreplace.
Патч изолирован маркерами, его легко найти и откатить:
// ==== LICENSE BYPASS PATCH ====
...
// ==== END LICENSE BYPASS PATCH ====
Как собрать и запустить
Важно: docker build context — backend/ (как в CI Shuffle), НЕ корень репозитория.
1. Собрать собственный образ бэкенда
cd backend
docker build -t shuffle-backend-cracked:local -f Dockerfile .
2. Подключить образ к docker-compose
В docker-compose.yml у сервиса backend заменить:
image: ghcr.io/shuffle/shuffle-backend:latest
на:
image: shuffle-backend-cracked:local
(либо добавить build: ./backend и использовать свой образ).
3. Запустить
docker-compose up -d
Ключ SHUFFLE_LICENSE в .env можно не указывать — патч его игнорирует.
Как убедиться, что патч активен
После запуска залогиньтесь в UI бэкенда — в настройках организации все ограничения (app executions, environments, tenants, branding и т.д.) будут показываться как активные/безлимитные.
Проверка собранного бинаря:
docker run --rm --entrypoint sh shuffle-backend-cracked:local \
-c 'grep -c "LICENSE BYPASS PATCH" /app/shuffle-shared/shared.go && grep "shuffle-shared =>" /app/go.mod'
Ожидаемый вывод:
2
replace github.com/shuffle/shuffle-shared => ./shuffle-shared
Как обновляться (апгрейд Shuffle)
Бинарь бэкенда линкуется с локальной версией shuffle-shared. При апгрейде Shuffle:
- Узнайте актуальную версию, которую требует новый
backend/go-app/go.mod(полеrequire). - Скачайте исходники этой версии:
curl -L -o shuffle-shared.zip \ "https://proxy.golang.org/github.com/shuffle/shuffle-shared/@v/<VERSION>.zip" - Замените
backend/go-app/shuffle-shared/новым содержимым. - Повторите тот же патч в
HandleCheckLicense(см. блок ниже). - Пересоберите образ.
Текст патча (вставить в HandleCheckLicense, сразу после func ... {)
// ==== LICENSE BYPASS PATCH ====
org.Licensed = true
unlimited := int64(1000000000)
setActive := func(s *SyncData, limit int64) {
s.Active = true
s.Limit = limit
}
setActive(&org.SyncFeatures.AppExecutions, unlimited)
setActive(&org.SyncFeatures.OnpremAppExecutions, unlimited)
setActive(&org.SyncFeatures.MultiEnv, unlimited)
setActive(&org.SyncFeatures.MultiTenant, unlimited)
setActive(&org.SyncFeatures.MultiRegion, unlimited)
setActive(&org.SyncFeatures.Webhook, unlimited)
setActive(&org.SyncFeatures.Schedules, unlimited)
setActive(&org.SyncFeatures.UserInput, unlimited)
setActive(&org.SyncFeatures.SendMail, unlimited)
setActive(&org.SyncFeatures.SendSms, unlimited)
setActive(&org.SyncFeatures.Updates, unlimited)
setActive(&org.SyncFeatures.EmailTrigger, unlimited)
setActive(&org.SyncFeatures.Notifications, unlimited)
setActive(&org.SyncFeatures.Workflows, unlimited)
setActive(&org.SyncFeatures.Autocomplete, unlimited)
setActive(&org.SyncFeatures.WorkflowExecutions, unlimited)
setActive(&org.SyncFeatures.Authentication, unlimited)
setActive(&org.SyncFeatures.Schedule, unlimited)
setActive(&org.SyncFeatures.Apps, unlimited)
setActive(&org.SyncFeatures.ShuffleGPT, unlimited)
setActive(&org.SyncFeatures.Branding, unlimited)
setActive(&org.SyncFeatures.AgentExecutions, unlimited)
setActive(&org.SyncFeatures.AgentTokens, unlimited)
return org
// ==== END LICENSE BYPASS PATCH ====
Откат патча
Чтобы вернуть стоковое поведение:
- Удалить строку
replace github.com/shuffle/shuffle-shared => ./shuffle-sharedизbackend/go-app/go.mod. - Удалить папку
backend/go-app/shuffle-shared/. - Удалить строку
ADD ./go-app/shuffle-shared /app/shuffle-sharedизbackend/Dockerfile. - Пересобрать образ.