Files
3dp-manager/pub.md
T

150 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 строк.