Portal Drive: как идут файлы
Коротко: диск работает сразу после установки Portal, без какой-либо отдельной службы. S3_PUBLIC_ENDPOINT — это не программа и не «ещё один сервер из коробки». Это необязательный адрес хранилища с компьютеров сотрудников, чтобы файлы диска не шли через API портала.
1. Что это вообще
Заголовок раздела «1. Что это вообще»У Portal два адреса хранилища файлов:
| Адрес | Для кого | Пример |
|---|---|---|
Внутренний (S3_ENDPOINT) | Сервисы Portal в Docker/K8s/на сервере | seaweedfs, localhost, s3.corp.local |
С рабочих мест (S3_PUBLIC_ENDPOINT) | Компьютеры с Portal Drive | files.company.ru |
Внутренний ставится всегда (встроенный SeaweedFS в Docker/K8s или ваш S3 в Native).
Публичный ни в одном канале сам не появляется. Пока он пустой, Drive качает и заливает файлы через портал. Это нормально и уже работает.
flowchart LR PC[Компьютер с диском] API[Portal API] S3[Хранилище файлов]
PC -->|"всегда: список папок, права"| API PC -->|"обычный режим: само содержимое файлов"| API API --> S3 PC -.->|"если задан публичный адрес: само содержимое"| S32. Стоит ли он у вас «из коробки»
Заголовок раздела «2. Стоит ли он у вас «из коробки»»| Поставка | Хранилище после установки | Публичный адрес для диска |
|---|---|---|
| Docker | SeaweedFS в compose (S3_ENDPOINT=seaweedfs) | Нет. С хоста стенда порт 9000 часто только 127.0.0.1 — с чужого ПК не достучаться |
| Kubernetes | SeaweedFS в кластере (ClusterIP) | Нет. Из офисной сети подов не видно, пока вы сами не выпустите Ingress/балансировщик |
| Native Linux / Windows | Ваш S3, который вы указали при установке | Нет автоматически. Если этот S3 и так открыт с рабочих мест — можно прописать тот же хост как публичный |
Итого: устанавливать «эндпоинт» не нужно — хранилище уже есть. Публичный адрес задаёте только если хотите разгрузить API.
3. Обычный режим (ничего не трогайте)
Заголовок раздела «3. Обычный режим (ничего не трогайте)»Оставьте S3_PUBLIC_ENDPOINT пустым.
- Сотрудник нажимает Диск, ставит клиент, монтирует папку.
- Список файлов и права — через портал.
- Содержимое файлов — тоже через портал (
/api/v1/drive/…).
Так и задумано для стенда и небольших установок.
4. Быстрый режим (по желанию)
Заголовок раздела «4. Быстрый режим (по желанию)»Нужен, если диск активно читают/пишут большие файлы и не хотите грузить API.
Условие: с компьютера сотрудника в браузере или curl открывается тот же бакет, что использует Portal, по имени хоста (не seaweedfs и не внутренний DNS кластера).
Задайте три переменные (хост без https://):
S3_PUBLIC_ENDPOINT=files.company.ruS3_PUBLIC_PORT=443S3_PUBLIC_USE_SSL=trueЛибо в portal.config.yaml:
storage: endpoint: seaweedfs # как и раньше, для API publicEndpoint: files.company.ru publicPort: 443 publicUseSsl: trueЗатем пересоздайте API (и worker не обязателен для Drive, но рестарт пары не повредит):
- Docker: допишите переменные в
.env,docker compose up -d --force-recreate backend - Native:
/etc/portal/portal.envилиC:\ProgramData\Portal\portal.env, рестарт служб - Kubernetes:
s3.publicEndpointв values,portal-cli upgrade --mode k8s
Проверка: GET /api/v1/drive/{token}/ (после сессии из Диск) содержит "presign": true. Если false — портал по-прежнему шлёт байты через API (публичный адрес пустой или недоступен). В окне Диск этой настройки нет: сотруднику достаточно нажать «Подключить диск».
5. Типичные ошибки
Заголовок раздела «5. Типичные ошибки»| Что написали | Почему не сработает |
|---|---|
S3_PUBLIC_ENDPOINT=seaweedfs | Это имя контейнера, с ПК сотрудника его нет |
S3_PUBLIC_ENDPOINT=https://files.company.ru | Нужен только хост: files.company.ru |
127.0.0.1 / localhost | Сработает только на той же машине, где Portal |
| Открыли порт 9000 в интернет без TLS | Presign-ссылки — временные, но сам S3 лучше держать за HTTPS и корпоративной сетью |
Не ставьте публичный адрес «на всякий случай», если хранилище с рабочих мест не открыто: диск от этого не сломается, просто останется обычный режим.