Files
3dp-manager/pub.md
T

11 KiB
Raw Blame History

Custom-правки для 3dp-manager

⚠️ Назначение: Это набор кастомных модификаций поверх оригинального 3dp-manager. Скрипты *-custom.sh нацелены на код из моего форка и пушатся в PR автору как объект для тестов, анализа и вдохновения. Не предназначены для продакшена — это площадка для экспериментов и улучшения оригинального проекта.


Что изменено

1. Развёртывание и инфраструктура

install-custom.sh — полностью самостоятельный установщик

Самостоятельный скрипт установки, не перезаписывающий оригинальный install.sh. Ключевые отличия:

  • Выбор типа SSL: Let's Encrypt / Self-signed / Свои сертификаты / HTTP. Меню SSL показывается всегда, даже при пустом вводе домена.
  • Проверка валидности сертификатов — перед использованием существующих сертификатов проверяется их срок действия через openssl x509 -checkend. Если сертификат истекает — предлагается перевыпуск.
  • ALLOWED_ORIGINS зависит от USE_SSL — корректная генерация origins (https:// vs http://) независимо от формата хоста.
  • Проверка и автофикс учётных данных — при установке генерируются случайные ADMIN_LOGIN, ADMIN_PASSWORD, JWT_SECRET, POSTGRES_PASSWORD вместо дефолтных admin/secretKey.
  • Автопроверка доступности порта через ss -tlnp и curl.
  • Проверка запуска контейнеров с таймаутом 60 секунд — если контейнеры не запустились, выводятся логи и установка прерывается.
  • UFW — автонастройка firewall-правил при обнаружении активного UFW.
  • Entware/OPKG — корректная поддержка роутеров Keenetic с Entware (проверка docker-compose через opkg).
  • docker-compose.local.yml — отдельный compose-файл для локальной разработки (без внешних зависимостей, с прямой привязкой к исходникам).

update-custom.sh — обновление без перезаписи compose

Обновление с пересборкой образов из форка, не трогая docker-compose.yml пользователя:

  • Создаёт docker-compose.custom.yml как override-файл (Docker Compose merge).
  • Бэкапит .env перед обновлением.
  • Автофикс nginx-конфига: добавляет X-Forwarded-Proto, корректные таймауты (connect 10s, send/read 650s) и location /bus/ если его нет.
  • Проверяет учётные данные и заменяет дефолтные на безопасные.
  • Проверяет наличие RealiTLScanner binary в контейнере после обновления.

delete-custom.sh — удаление custom-установки

Полный скрипт удаления:

  • Остановка и удаление контейнеров (3dp-frontend, 3dp-backend, 3dp-postgres).
  • Удаление образов (3dp-manager-server, 3dp-manager-client).
  • Удаление Docker volume (3dp-manager_pg_data).
  • Удаление исходников (/opt/3dp-manager-src).
  • Удаление Docker сети (3dp-manager_app-network).
  • Опциональное удаление Hysteria 2: сервисы hysteria-server.service, hysteria-server@.service, конфиги /etc/hysteria, бинарник, пользователь, firewall-правила UFW.
  • Очистка кэша Docker (docker image prune -f).

2. Nginx (client/nginx.conf)

  • Убран лишний server block на порту 3100 — больше не слушает порт 3100 напрямую (безопасность, нет смысла за NAT).
  • Добавлен X-Forwarded-Proto $scheme — критично для корректного определения HTTPS в bus-ссылках и QR-кодах. Без этого при reverse proxy ссылки генерировались как http:// даже при HTTPS-подключении.
  • Добавлены X-Real-IP и X-Forwarded-For — для корректной передачи реального IP клиента на бэкенд.

3. Клиентская часть (frontend)

copyToClipboard.ts — утилита копирования

Новый файл. Универсальная функция копирования с fallback:

  • Использует navigator.clipboard.writeText когда доступен (HTTPS).
  • Fallback для HTTP: создаёт невидимый <textarea>, выделяет текст и вызывает document.execCommand('copy') — работает без HTTPS.
  • Используется в шаблоне подписки и на страницах настроек.

SettingsPage.tsx / SubscriptionsPage.tsx

  • Кнопки копирования используют новую утилиту copyToClipboard.
  • Динамический текст и цвет кнопки в confirmDialog — цвет кнопки копирования меняется на зелёный (var(--button-success)) при успехе, текст временно становится "Скопировано!" и возвращается обратно через 2 секунды.
  • SSL-меню: цвета для заголовка и значения по умолчанию.

client/Dockerfile, client/vite.config.ts

  • Синхронизированы с состоянием dp-custom.

4. Серверная часть (backend)

Rate Limiting (server/src/app.module.ts, client.controller.ts)

Глобальный throttle:

  • Было: limit: 5 запросов в минуту.
  • Стало: limit: 1000 запросов в минуту — лояльный лимит, не блокирующий нормальное использование API.

Публичные endpoints (/bus/:uuid, /bus/:uuid/:tunnelId):

  • Добавлен отдельный @Throttle({ default: { limit: 300, ttl: 60000 } }) — защита от злоупотреблений на публичных ссылках подписок.

subscription.template.ts — fallback копирования ссылки

HTML-шаблон страницы подписки:

  • До: использовал только navigator.clipboard.writeTextне работает по HTTP (требует Secure Context).
  • После: проверяет доступность Clipboard API, если недоступен — fallback через <textarea> + document.execCommand('copy'). Копирование работает и по HTTP, и по HTTPS.

install.sh (оригинальный)

  • Убран server block на порту 3100 из обоих режимов (SSL/HTTP).
  • Убран маппинг порта 3100:3100 из docker-compose.yml — порт 3100 больше не экспонируется наружу (безопасность, используется только внутренняя Docker-сеть).

5. Документация

debug.md (458 строк)

Подробный отладочный гайд:

  • Диагностика контейнеров (статус, логи, curl-проверки).
  • Методология SSH-отладки: сбор данных → гипотезы → минимальные изменения → верификация.
  • Чек-листы для проверки nginx, БД, API, CORS, WebSocket.
  • Типичные проблемы и решения.

api.md (878 строк)

Полная документация API:

  • Аутентификация (login, смена пароля, обновление профиля).
  • Подписки (CRUD, массовое управление).
  • Домены (CRUD, проверка доступности).
  • Туннели (CRUD, ping, bulk-операции).
  • Настройки (чтение/запись, ротация учётных данных).
  • Ротация (статус, ручной запуск, расписание).
  • Публичные клиентские endpoints (/bus/:uuid).

Философия custom-скриптов

Эти правки не являются форком в классическом смысле. Это:

  1. Площадка для экспериментов — тестирование гипотез, UX-улучшений, инфраструктурных изменений.
  2. Объект для анализа — автор оригинального проекта может посмотреть, что было изменено, и взять идеи для основного репозитория.
  3. Не продакшен — скрипты *-custom.sh заточены под код из моего репо и могут не работать с upstream напрямую.

Каждый custom-скрипт автономен и не ломает оригинальные install.sh / update.sh.


Сводка изменений

Файл Что изменено
install-custom.sh +731 строк — самостоятельный установщик с SSL-меню
update-custom.sh +384 строки — обновление без перезаписи compose
delete-custom.sh +245 строк — полное удаление + опционально Hysteria 2
docker-compose.local.yml +57 строк — локальный compose для разработки
client/nginx.conf Убран порт 3100, добавлен X-Forwarded-Proto, X-Real-IP
copyToClipboard.ts +25 строк — утилита с HTTP-fallback
subscription.template.ts Fallback копирования для HTTP
SettingsPage.tsx / SubscriptionsPage.tsx Новые кнопки копирования, confirmDialog
app.module.ts Rate limit: 5 → 1000
client.controller.ts Throttle 300/мин на публичные /bus/ endpoints
install.sh Убран порт 3100 из nginx и compose
debug.md +458 строк — отладочный гайд
api.md +878 строк — полная документация API

Итого: 19 файлов, +2850 / -65 строк.