Репетитор раздаёт материалы сорока ученикам: своя площадка вместо папки
Пока учеников пять-семь, общая папка в Я.Диске или Google Drive работает нормально: скинул ссылку, все скачали, никто не жалуется. Но когда счёт идёт на десятки — папка превращается в свалку, где сам репетитор не может быстро найти нужный файл, а ученики видят чужие домашки и просроченные версии. Ниже — как устроена простая учебная площадка на своём сервере, которая решает именно эту проблему, без раздутой LMS с тестами и прогресс-барами.
Содержание
Почему общая папка перестаёт работать на масштабе
Дело не в объёме данных — материалы репетитора редко весят больше нескольких гигабайт. Дело в том, что папка не умеет разграничивать доступ, а с ростом числа учеников это становится критично.
Типичная эволюция такая. Сначала одна папка «Материалы» на всех. Потом внутри неё появляются подпапки по классам или уровням — но ссылка на верхнюю папку у всех одна и та же, поэтому ученик 9 класса при желании открывает и папку 11 класса, а заодно видит домашние задания других учеников, если они лежат тут же. Дальше начинается путаница с версиями: файл «Тест по алгебре», потом «Тест по алгебре (2)», потом «Тест по алгебре ФИНАЛ», и через месяц никто не помнит, какой из них актуальный, включая самого репетитора.
Отдельная проблема — расшаривание за пределы круга учеников. Ссылка на папку в облаке рано или поздно попадает в родительский чат, пересылается «на всякий случай» другу, остаётся сохранённой у ученика, который перестал заниматься полгода назад. Отозвать доступ у одного человека, не трогая остальных, штатными средствами облачных дисков неудобно: либо всё живёт на одной ссылке, либо приходится создавать отдельную папку и ссылку под каждого ученика вручную, что на сорока учениках означает сорок ссылок, которые надо помнить и обновлять.
И последнее — поиск. Когда в одной папке лежат материалы по пяти предметам, трём уровням подготовки и двум годам работы, найти конкретный файл занимает не десять секунд, а несколько минут пролистывания. Это мелочь, если считать один раз, но она повторяется каждый день перед каждым занятием.
Что должна уметь площадка вместо папки
Задача не в том, чтобы построить полноценную образовательную платформу с курсами, тестами и отслеживанием прогресса — для большинства репетиторов это избыточно и добавляет работы больше, чем экономит. Нужна вещь куда проще: структурированное хранилище с раздельным доступом.
Минимальный набор требований такой:
- у каждого ученика или группы — свой вход, а не общая ссылка на всё сразу;
- ученик видит только свою папку (или папку своей группы), а не весь массив материалов репетитора;
- материалы разложены по предметам/уровням/группам структурно, а не одним списком;
- отключить доступ одному ученику можно без пересборки структуры для остальных;
- ученику не нужно ничего устанавливать — открыл ссылку в браузере, ввёл логин и пароль, увидел файлы.
Это описание подходит под обычный файловый портал с системой пользователей, а не под LMS. Ниже — конкретный инструмент, который закрывает именно этот набор требований, и как его поднять на арендованном сервере.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверFile Browser: простой портал с личными кабинетами учеников
File Browser — лёгкое self-hosted веб-приложение для работы с файлами через браузер: у него есть система пользователей, у каждого пользователя — своя «область» (scope), то есть конкретная директория на диске, за пределы которой он не видит вообще ничего. Это ровно то поведение, которое нужно вместо одной папки на всех. Готовый docker-compose для него уже разбирали отдельно — можно взять оттуда конфиг как основу: File Browser в Docker Compose.
Базовый docker-compose.yml:
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
restart: unless-stopped
ports:
- "127.0.0.1:8090:80"
volumes:
- /srv/materials:/srv
- ./filebrowser.db:/database/filebrowser.db
- ./filebrowser.json:/.filebrowser.json
Перед первым запуском стоит создать структуру данных и файл конфигурации:
mkdir -p /srv/materials
touch filebrowser.db
cat > filebrowser.json <<'EOF'
{
"port": 80,
"baseURL": "",
"address": "",
"log": "stdout",
"database": "/database/filebrowser.db",
"root": "/srv"
}
EOF
docker compose up -d
По умолчанию создаётся один администратор — им должен пользоваться только репетитор, для управления учениками. Ученикам создаются отдельные учётные записи с урезанными правами и собственным scope:
docker exec -it filebrowser filebrowser users add ivan_petrov "temp-pass-123" \
--scope /group-ege-matematika-2026 \
--perm.admin=false \
--perm.create=false \
--perm.delete=false \
--perm.rename=false \
--perm.download=true
Флаги здесь важны: --perm.download=true оставляет ученику право скачивать файлы, а create/delete/rename отключены, чтобы никто случайно не переименовал или не удалил чужой материал. Пароль выдаётся временный, ученик меняет его при первом входе через раздел настроек профиля.
Доступ снаружи нужно закрыть за обратным прокси с HTTPS — File Browser сам по себе отдаёт обычный HTTP, и в интернет без TLS его пускать не стоит. Минимальный пример на Caddy:
materials.example.ru {
reverse_proxy 127.0.0.1:8090
}
Caddy сам выпустит сертификат Let's Encrypt при первом запуске — дополнительных действий не требуется, если домен уже указывает на IP сервера.
Если хочется больше готовых сервисов вокруг материалов — совместное редактирование документов, календарь, заметки, — есть смысл посмотреть на Nextcloud: как установить и настроить Nextcloud на VPS. Он тяжелее в администрировании, чем File Browser, но закрывает больше сценариев сразу. Для сравнения с Seafile, у которого похожая логика групп и общих папок, но другая модель синхронизации, есть отдельный разбор: Nextcloud против Seafile — что выгоднее и когда.
Структура материалов: не сваливать всё в одну кучу
Инструмент решает половину задачи — вторая половина в том, как разложены файлы внутри. Плоская папка «Материалы» с полутора сотнями файлов будет мешать, даже если у каждого ученика к ней ограниченный доступ.
Рабочая схема — разделение по группам и по предметной структуре внутри группы:
/srv/materials/
├── group-ege-matematika-2026/
│ ├── 01-algebra/
│ ├── 02-geometriya/
│ ├── 03-probnye-varianty/
│ └── domashnie-zadaniya/
├── group-oge-fizika-2026/
│ ├── 01-mehanika/
│ ├── 02-elektrichestvo/
│ └── domashnie-zadaniya/
└── individualnye/
├── ivan-petrov/
└── anna-sidorova/
Групповые папки — для потоковых занятий, где материал общий для всех в группе. Индивидуальные — для учеников на разовых занятиях или с персональной программой. Учётная запись ученика получает scope на нужную ему папку (или папки, если File Browser настроен со ссылками между директориями через bind mount).
Отдельная договорённость с самим собой — правило именования файлов без «финалов» и номеров версий. Вместо Тест_ФИНАЛ_v3.pdf — дата в начале имени: 2026-08-25-test-proizvodnaya.pdf. При сортировке по имени файлы автоматически выстраиваются по хронологии, и видно, какой самый свежий, без необходимости открывать каждый и сверять содержимое. Это не техническое ограничение File Browser, а просто привычка, которая экономит время на масштабе в десятки учеников.
Доступ по ученикам и группам, а не по общей ссылке
Ключевое отличие от папки в облаке — доступ выдаётся персонально, и его так же персонально можно забрать.
Для группы учеников, которые занимаются вместе (например, мини-группа подготовки к ОГЭ из четырёх человек), логично не плодить четыре учётные записи с идентичным scope, а завести общую директорию и создать пользователей, у каждого из которых --scope указывает на эту же папку. Права у всех одинаковые, но входят под своими логинами — это удобно, если позже понадобится посмотреть логи или временно закрыть доступ одному человеку из группы, не трогая остальных.
Когда ученик заканчивает занятия, доступ отключается одной командой:
docker exec -it filebrowser filebrowser users rm ivan_petrov
Это критично отличается от общей ссылки на облачную папку: там отзыв доступа у одного человека требует либо смены ссылки для всех (и рассылки новой), либо переноса вообще всех материалов в новую структуру. Здесь достаточно удалить одну учётную запись — все остальные продолжают работать как раньше.
Если нужно тоньше разграничить доступ внутри одной группы — например, у продвинутых учеников есть дополнительная папка с усложнёнными заданиями, а у остальных её быть не должно, — в File Browser есть механизм правил (rules) на уровне пользователя: можно разрешить или запретить доступ к конкретным вложенным путям регулярным выражением, не создавая для этого отдельную корневую структуру. Это менее наглядно, чем просто раздельные scope-папки, и на практике для большинства репетиторов хватает варианта с отдельной папкой на подгруппу — так проще потом не запутаться самому, какое правило что перекрывает.
Стоит сразу закладывать резервное копирование директории с материалами — потеря наработок за несколько лет обиднее, чем кажется на старте. Простая схема с ежедневным снапшотом в отдельное хранилище описана здесь: Restic в Docker Compose.
Что это меняет на практике
Разница между общей папкой и своей площадкой не в красивом интерфейсе, а в том, сколько ручной работы и рисков она снимает с репетитора.
| Общая папка в облаке | Своя площадка (File Browser на сервере) | |
|---|---|---|
| Доступ | Одна ссылка на всех или ручное создание отдельных папок под каждого | Персональный логин, ограниченный scope на директорию |
| Отзыв доступа у одного ученика | Требует смены ссылки или переноса структуры | Одна команда, остальные не затронуты |
| Видимость чужих материалов | Часто есть, если структура плоская | Исключена — за пределы scope ученик не выходит |
| Версии файлов | Путаница с «финал», «финал2» | Порядок задаётся именованием и структурой папок, зависит от дисциплины репетитора |
| Поиск нужного файла | Долго на большом объёме в одной папке | Быстро — материалы разложены по группам и темам |
| Обслуживание | Не требуется — за облако отвечает провайдер | Требуется: обновления контейнера, бэкапы, TLS-сертификат |
Последняя строка — честное ограничение подхода. Своя площадка добавляет ответственность: сервер нужно обновлять, следить за диском, настроить резервное копирование. Это не бесплатно ни по деньгам, ни по времени, в отличие от бесплатного тарифа облачного диска. Но при десятках учеников время, которое раньше уходило на разбор путаницы в общей папке и на объяснения «это не тебе, удали», обычно перевешивает время на разовую настройку и периодическое обслуживание сервера.
Стоит также не переоценивать инструмент: File Browser — это файловый портал, а не образовательная платформа. В нём нет тестов, автоматической проверки домашних заданий, статистики прохождения материала. Если репетитору со временем понадобятся именно эти функции — это уже отдельная задача с другим набором инструментов, и решать её имеет смысл только тогда, когда простого файлового доступа реально перестанет хватать, а не заранее «на вырост».
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Нужно ли ученику что-то устанавливать, чтобы попасть на площадку?
Нет, достаточно браузера на любом устройстве — телефоне, планшете, компьютере. File Browser отдаёт обычную веб-страницу, приложение не требуется.
Что если ученик забыл пароль?
Репетитор как администратор сбрасывает пароль одной командой: docker exec -it filebrowser filebrowser users update ivan_petrov --password "new-pass". Дополнительных писем и восстановлений через почту не нужно, поскольку регистрация e-mail при создании пользователя не обязательна.
Можно ли ограничить доступ на определённый срок, например до конца четверти?
Встроенного автоматического истечения доступа в File Browser нет — учётную запись нужно удалять вручную командой, когда занятия закончились. Для десятков учеников это несложно делать по календарю оплат, но если нужен автоматический контроль сроков, потребуется либо более сложная система, либо простой скрипт по расписанию, который убирает просроченные учётные записи.
Сколько ресурсов сервера нужно для такой площадки на сорок учеников?
File Browser сам по себе лёгкий и не требователен к ресурсам — основная нагрузка на диск определяется объёмом материалов, а не числом одновременных пользователей. Для типичного набора текстовых материалов, PDF и изображений небольшого VPS достаточно с запасом; если материалы — это в основном видео большого объёма, дисковое пространство стоит планировать заранее с запасом на рост.
Что делать, если материалов накопится действительно много, десятки гигабайт видео?
Структура на локальном диске сервера продолжает работать, но стоит заранее считать место с запасом и настроить мониторинг заполнения диска, чтобы не упереться в лимит в неподходящий момент.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →