Перейти к содержимому

Portal Drive: как идут файлы

Коротко: диск работает сразу после установки Portal, без какой-либо отдельной службы. S3_PUBLIC_ENDPOINT — это не программа и не «ещё один сервер из коробки». Это необязательный адрес хранилища с компьютеров сотрудников, чтобы файлы диска не шли через API портала.


У Portal два адреса хранилища файлов:

АдресДля когоПример
Внутренний (S3_ENDPOINT)Сервисы Portal в Docker/K8s/на сервереseaweedfs, localhost, s3.corp.local
С рабочих мест (S3_PUBLIC_ENDPOINT)Компьютеры с Portal Drivefiles.company.ru

Внутренний ставится всегда (встроенный SeaweedFS в Docker/K8s или ваш S3 в Native).

Публичный ни в одном канале сам не появляется. Пока он пустой, Drive качает и заливает файлы через портал. Это нормально и уже работает.

flowchart LR
PC[Компьютер с диском]
API[Portal API]
S3[Хранилище файлов]
PC -->|"всегда: список папок, права"| API
PC -->|"обычный режим: само содержимое файлов"| API
API --> S3
PC -.->|"если задан публичный адрес: само содержимое"| S3

ПоставкаХранилище после установкиПубличный адрес для диска
DockerSeaweedFS в compose (S3_ENDPOINT=seaweedfs)Нет. С хоста стенда порт 9000 часто только 127.0.0.1 — с чужого ПК не достучаться
KubernetesSeaweedFS в кластере (ClusterIP)Нет. Из офисной сети подов не видно, пока вы сами не выпустите Ingress/балансировщик
Native Linux / WindowsВаш S3, который вы указали при установкеНет автоматически. Если этот S3 и так открыт с рабочих мест — можно прописать тот же хост как публичный

Итого: устанавливать «эндпоинт» не нужно — хранилище уже есть. Публичный адрес задаёте только если хотите разгрузить API.


Оставьте S3_PUBLIC_ENDPOINT пустым.

  1. Сотрудник нажимает Диск, ставит клиент, монтирует папку.
  2. Список файлов и права — через портал.
  3. Содержимое файлов — тоже через портал (/api/v1/drive/…).

Так и задумано для стенда и небольших установок.


Нужен, если диск активно читают/пишут большие файлы и не хотите грузить API.

Условие: с компьютера сотрудника в браузере или curl открывается тот же бакет, что использует Portal, по имени хоста (не seaweedfs и не внутренний DNS кластера).

Задайте три переменные (хост без https://):

Окно терминала
S3_PUBLIC_ENDPOINT=files.company.ru
S3_PUBLIC_PORT=443
S3_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 (публичный адрес пустой или недоступен). В окне Диск этой настройки нет: сотруднику достаточно нажать «Подключить диск».


Что написалиПочему не сработает
S3_PUBLIC_ENDPOINT=seaweedfsЭто имя контейнера, с ПК сотрудника его нет
S3_PUBLIC_ENDPOINT=https://files.company.ruНужен только хост: files.company.ru
127.0.0.1 / localhostСработает только на той же машине, где Portal
Открыли порт 9000 в интернет без TLSPresign-ссылки — временные, но сам S3 лучше держать за HTTPS и корпоративной сетью

Не ставьте публичный адрес «на всякий случай», если хранилище с рабочих мест не открыто: диск от этого не сломается, просто останется обычный режим.