Files
obfuscator/PLAN-INDEPENDENT-SERVICES.md
T

6.5 KiB
Raw Blame History

План: независимые DrHider и Obfuscator

Цель

Получить два полностью независимых production-сервиса:

  • DrHider — репозиторий Nail/drhider, отдельный Flask-инстанс и отдельный upload-буфер.
  • Obfuscator — репозиторий forcloud/obfuscator, отдельный Flask-инстанс и отдельный upload-буфер.

После разделения изменения, версии, деплои, сессии и временные файлы одного сервиса не должны влиять на другой.

Целевая схема

DrHider
  repo: https://gitea.services.ngcloud.ru/Nail/drhider.git
  app: https://drhider.pythonk8s.dev.nubes.ru/
  buffer: https://upload-drhider.sinefo.ru/buffer/

Obfuscator
  repo: https://gitea.services.ngcloud.ru/forcloud/obfuscator.git
  app: https://obfuscator.pythonk8s.services.ngcloud.ru/
  buffer: https://upload-obfuscator.sinefo.ru/buffer/

Оба буфера могут находиться на VM213, но должны иметь разные hostname и разные директории:

/var/www/upload-drhider/
/var/www/upload-obfuscator/

Текущий адрес https://upload.sinefo.ru/drhider-upload/ считать временным legacy-маршрутом. Его не использовать в новой конфигурации Obfuscator.

Этап 1. Разделить production-инстансы

  1. Создать отдельный Managed Flask-инстанс для forcloud/obfuscator.
  2. Оставить DrHider подключённым только к Nail/drhider.
  3. Проверить, что у сервисов разные:
    • instance ID;
    • hostname;
    • переменные окружения;
    • настройки Redeploy.
  4. Не добавлять upstream, не использовать общий Git remote и не подключать один репозиторий как submodule другого.

Этап 2. Разделить upload-буферы на VM213

  1. Создать две директории с владельцем пользователя Nginx:
    • /var/www/upload-drhider/;
    • /var/www/upload-obfuscator/.
  2. Добавить в Nginx два независимых WebDAV location:
    • /buffer/ для upload-drhider.sinefo.ru;
    • /buffer/ для upload-obfuscator.sinefo.ru.
  3. Для каждого location настроить отдельно:
    • alias;
    • PUT, GET, DELETE;
    • client_max_body_size;
    • CORS только для своего Flask-инстанса;
    • очистку старых временных файлов.
  4. Не менять и не удалять старый маршрут до завершения миграции и проверки обоих сервисов.

Этап 3. DNS и TLS

Создать A-записи на IP VM213 5.172.178.213:

upload-drhider.sinefo.ru      A  5.172.178.213
upload-obfuscator.sinefo.ru   A  5.172.178.213

Для обоих hostname выпустить отдельные сертификаты Certbot и проверить автоматическое продление.

Этап 4. Конфигурация приложений

В DrHider указать только его буфер. В Obfuscator указать только его буфер.

Проверить и при необходимости заменить во всех рабочих файлах:

  • фронтендовый VM_UPLOAD_URL;
  • backend VM_UPLOAD_PREFIX;
  • значение vmUploadPrefix в health/config endpoint;
  • CORS origin;
  • пути временного хранения и очистки.

Переименовать общие переменные в нейтральные имена, например UPLOAD_BUFFER_URL, если это не ломает существующий публичный API.

Этап 5. Независимые деплои

Для каждого сервиса отдельно:

  1. Изменить код только в его репозитории.
  2. Выполнить локальные тесты и проверку синтаксиса.
  3. Сделать commit и push в его master.
  4. Выполнить Redeploy соответствующего Managed Flask-инстанса.
  5. Проверить /health и версию.

Push в Nail/drhider не должен запускать или изменять Obfuscator. Push в forcloud/obfuscator не должен запускать или изменять DrHider.

Этап 6. Проверка изоляции

Для каждого сервиса отдельно проверить:

  • GET /health возвращает правильную версию;
  • браузерный OPTIONS возвращает CORS только для своего origin;
  • PUT -> GET -> DELETE работает через собственный hostname;
  • файл одного сервиса не виден в директории другого;
  • отмена и очистка сессии не затрагивают второй сервис;
  • обновление версии одного приложения не меняет /health второго.

Этап 7. Удаление legacy-связей

После успешной миграции и периода наблюдения:

  1. Перевести оба приложения на новые buffer hostname.
  2. Проверить отсутствие contracts.kube5s.ru и upload.sinefo.ru/drhider-upload/ в рабочих конфигурациях.
  3. Удалить старый WebDAV location только после подтверждения, что активных клиентов больше нет.
  4. Обновить README обоих проектов и документацию VM213.

Критерий готовности

Разделение считается завершённым, когда:

  • у DrHider и Obfuscator разные production-инстансы;
  • у них разные Git-репозитории без общей синхронизации;
  • у них разные upload hostname и директории на VM213;
  • CORS и TLS настроены для каждого отдельно;
  • независимый Redeploy одного сервиса не меняет другой;
  • smoke-тесты обоих сервисов проходят одновременно.