11 KiB
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://vshttp://) независимо от формата хоста.- Проверка и автофикс учётных данных — при установке генерируются случайные
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/если его нет. - Проверяет учётные данные и заменяет дефолтные на безопасные.
- Проверяет наличие
RealiTLScannerbinary в контейнере после обновления.
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-скриптов
Эти правки не являются форком в классическом смысле. Это:
- Площадка для экспериментов — тестирование гипотез, UX-улучшений, инфраструктурных изменений.
- Объект для анализа — автор оригинального проекта может посмотреть, что было изменено, и взять идеи для основного репозитория.
- Не продакшен — скрипты
*-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 строк.