Delete pub.md
This commit is contained in:
@@ -1,149 +0,0 @@
|
||||
# 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 строк.
|
||||
Reference in New Issue
Block a user