Миграция с Lucky на Gately
Gately — независимый проект, не связанный с проектом Lucky. Совместимость строится на публично наблюдаемом поведении, интерфейсах и форматах конфигурации.
Gately умеет напрямую читать файлы конфигурации Lucky .lkcf или zip с конфигурацией всего сайта, экспортированный функцией Lucky «Резервная копия конфигурации», и переносить правила, задания и сертификаты. Удалять Lucky не требуется: обе программы могут работать параллельно, модули переключаются по одному.
Миграция с nginx
Здесь описана миграция с Lucky. Существующие сайты nginx можно импортировать напрямую через «Веб-службы → Импорт nginx», см. Веб-службы · Импорт конфигурации nginx.
1. Подготовка
- Найдите каталог конфигурации Lucky: при развёртывании в Docker это обычно каталог хоста, смонтированный в
/app/confконтейнера, в нём лежатlucky_base.lkcf,lucky_ddns.lkcfи другие файлы. - Разверните Gately (см. README). Рекомендации:
- используйте
--network host, чтобы слушать порты хоста напрямую; - порт управления по умолчанию 16680 не конфликтует с портом Lucky 16601;
- если скрипты или привязки сертификатов в Lucky используют пути внутри контейнера (например,
/etc/lucky/custom_scripts,/data/nginx/...), смонтируйте их в контейнер Gately по тем же путям, тогда после импорта ничего менять не придётся.
- используйте
2. Импорт
Откройте в Gately «Настройки → Резервное копирование и миграция», выберите все файлы lucky_*.lkcf или напрямую zip с конфигурацией всего сайта, экспортированный из Lucky (.lkcf внутри архива распознаются автоматически, остальные файлы игнорируются). Сначала нажмите «Предпросмотр», чтобы увидеть, сколько записей каждого модуля будет импортировано и какие есть замечания, затем подтвердите и нажмите «Импорт».
Повторный импорт безопасен: правила, задания и сертификаты, совпадающие по имени с уже существующими, пропускаются.
Поддерживаемые файлы:
| Файл | Куда импортируется | Примечание |
|---|---|---|
| lucky_portforward.lkcf | Проброс портов | Параметры TLS/шифрования потока и ограничения скорости пока не поддерживаются, будет выдано предупреждение |
| lucky_ddns.lkcf | Динамический DNS | Поддерживаются 11 провайдеров; адреса определения IP от Lucky удаляются |
| lucky_stun.lkcf | STUN-обход NAT | Включая глобальный список STUN-серверов и глобальный Webhook |
| lucky_ssl.lkcf | SSL-сертификаты | Уже выпущенные сертификаты импортируются как есть и до истечения срока не перевыпускаются |
| lucky_reverseproxy.lkcf | Веб-службы | Сайты, аутентификация, ссылки на WAF (если WAF вложенного правила равен main, используется экземпляр правила прослушивания) |
| lucky_coraza.lkcf | Брандмауэр WAF | Сохраняется ключ экземпляра, ссылки из сайтов остаются действительными |
| lucky_wol.lkcf | Wake-on-LAN | |
| lucky_webterminal.lkcf | Веб-терминал | SSH-подключения; отпечаток хоста записывается при первом подключении |
| lucky_webdav.lkcf | WebDAV | Список монтирований пользователя преобразуется в несколько каталогов, пользователи с одинаковыми именем и паролем объединяются; монтирования, ссылающиеся на управление хранилищем, преобразуются в соответствующие локальные каталоги |
| lucky_ftpserver.lkcf | FTP | Порт прослушивания, диапазон пассивных портов, TLS и параметры таймаутов, а также пользователи (обработка как в WebDAV) |
| lucky_storagemanagement.lkcf | Монтирование хранилищ | Локальные каталоги и хранилища WebDAV; Alibaba Cloud Drive, системные монтирования и прокси доступа не переносятся |
| lucky_frp.lkcf | frp | Первый клиентский экземпляр (адрес сервера, токен, транспортный протокол и прокси) и первый серверный экземпляр; visitor-ы, прокси-плагины и консоль не переносятся |
| lucky_cloudflared.lkcf | Cloudflare Tunnel | Туннели с токеном туннеля; Access-клиенты и туннели, где указан только API-токен, не переносятся |
| lucky_base.lkcf | Глобальные настройки, Веб-службы | Доступ только из локальной сети, лимит неудачных входов, длительность сессии, часовой пояс, пользовательский DNS (включая запись doh@), параметры GC, доверенные источники PROXY-протокола. Порт управления, секретный путь входа, учётная запись администратора и двухфакторная аутентификация не переносятся |
Запланированные задачи, IP-фильтры и настройки Docker в Lucky в типовых конфигурациях пусты и пока не переносятся; если они у вас заполнены, настройте их вручную.
Импортированные правила по умолчанию отключены: это защищает от ситуации, когда после импорта на тестовой машине боевые домены начинают указывать на неверный адрес, или когда Gately конфликтует с ещё работающим Lucky за порты и UPnP-маппинги маршрутизатора. Если Gately запущен именно на целевом устройстве, а Lucky остановлен, отметьте «Сохранить состояние включения из Lucky»: правила сразу заработают в соответствии с состоянием в Lucky (включая общие переключатели модулей).
3. Переключение
Переключайтесь по одному модулю и проверяйте каждый:
- Сертификаты: включите сертификат в Gately. После включения сертификат записывается в каталог привязки и выполняется скрипт на изменение; убедитесь, что каталог доступен для записи.
- DDNS: отключите задание в Lucky → включите соответствующее задание в Gately → нажмите «Принудительная синхронизация» и убедитесь, что запись обновилась.
- Проброс портов / STUN: сначала отключите правило в Lucky (это освободит порт и UPnP-маппинг), затем включите его в Gately. После включения STUN-правила публичный порт может измениться, скрипты и Webhook уведомят об этом автоматически.
- Веб-службы: отключите правило прослушивания в Lucky → включите его в Gately. Для HTTPS-сайтов в модуле сертификатов должен быть включённый сертификат, покрывающий домен.
- Когда всё проверено, остановите контейнер Lucky.
4. Монтирование в Docker
Скрипты и привязки сертификатов Lucky используют пути внутри контейнера Lucky, поэтому контейнеру Gately нужно смонтировать те же каталоги хоста по тем же путям внутри контейнера. Добавляйте записи по compose-файлу Lucky, например:
volumes:
- ./config:/etc/gately
- /var/run/docker.sock:/var/run/docker.sock
# Если в Lucky сертификат привязан к /data/nginx/ssl, смонтируйте тот же каталог хоста по тому же пути
- /srv/nginx/ssl:/data/nginx/ssl
# Скрипты, вызываемые в правилах (проверьте, что путь, указанный в Lucky, действительно существует в контейнере Lucky)
- /srv/lucky/custom_scripts:/etc/lucky/custom_scripts:roВ образ Gately встроены sh, bash и curl, поэтому типовые скрипты уведомлений работают без доработок.
5. Что нужно сделать вручную
- Вход через сторонние сервисы: вход через GitHub/QQ/Google в Lucky идёт через официальный промежуточный сервер Lucky; в Gately используется ваше собственное OAuth-приложение. При импорте выберите также
lucky_thirdPartyAuthManager.lkcf(таблица идентификаторов),lucky_reverseproxy.lkcfиlucky_base.lkcf:- сторонние идентификаторы, на которые ссылаются сайты и панель управления, переносятся в списки разрешённых по таблице идентификаторов (GitHub — по числовому ID, Google — по sub, QQ — по openid; имя пользователя и email записываются в примечание).
- способ входа в панель управления находится в «Настройки → Аккаунт и безопасность → Вход через сторонние сервисы», способ входа для сайтов — в «Веб-службы → Глобальные настройки»; он начинает действовать только после того, как вы укажете собственные Client ID/Secret и адрес обратного вызова и включите его, импорт сам его не включает. В качестве идентификаторов способов входа используйте
github,google,qq, чтобы они соответствовали перенесённым идентификаторам. - openid QQ различается для каждого приложения QQ Connect: после перехода на своё приложение первый вход будет отклонён с показом нового идентификатора учётной записи, добавьте его в список разрешённых.
- Сайты, зависящие только от входа через сторонние сервисы и не имеющие переносимых идентификаторов, после импорта остаются отключёнными.
- Сертификаты ZeroSSL: для регистрации новой учётной записи ACME используются EAB-данные из Lucky; если ZeroSSL их отклонит, сгенерируйте EAB заново в панели ZeroSSL.
- Экземпляры frp: в Gately есть только один frpc и один frps, лишние экземпляры из Lucky перечисляются в отчёте — перенесите их на другие машины или объедините в один экземпляр; уже настроенный в Gately frpc, подключённый к другим серверам, и включённый frps не перезаписываются. Учётной записью консоли frps управляла Lucky, поэтому после миграции для консоли заново задайте порт и пароль.
- Ссылки на хранилища: пользователи FTP / WebDAV в Lucky могут монтировать хранилища из «Хранилища». При импорте выберите также
lucky_storagemanagement.lkcf(или импортируйте zip всего сайта), локальные хранилища будут преобразованы в соответствующие каталоги; хранилища WebDAV, Alibaba Cloud Drive и монтирование rclone пока не поддерживаются, об этом будет сообщено в отчёте. - Функции Lucky, которых ещё нет: DLNA, монтирование облачных дисков rclone, Alibaba Cloud Drive, база IP (
lucky_ipdb.lkcf) и другие пока не переносятся и при импорте пропускаются. - Официальные серверы Lucky: Gately не обращается к
66666.host,lucky666.cnи подобным адресам; после миграции публичный IP определяется сторонними публичными сервисами (их можно изменить в задании DDNS).
6. Откат
Gately не изменяет никакие файлы Lucky. Для отката отключите соответствующие правила в Gately и снова включите их в Lucky.