Plan independent DrHider and Obfuscator services

This commit is contained in:
Repinoid
2026-10-21 12:13:28 +03:00
parent 36ec127d60
commit 02fe39e52c
+128
View File
@@ -0,0 +1,128 @@
# План: независимые DrHider и Obfuscator
## Цель
Получить два полностью независимых production-сервиса:
- **DrHider** — репозиторий `Nail/drhider`, отдельный Flask-инстанс и отдельный upload-буфер.
- **Obfuscator** — репозиторий `forcloud/obfuscator`, отдельный Flask-инстанс и отдельный upload-буфер.
После разделения изменения, версии, деплои, сессии и временные файлы одного сервиса не должны влиять на другой.
## Целевая схема
```text
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 и разные директории:
```text
/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`:
```text
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-тесты обоих сервисов проходят одновременно.