История портала
Что происходит с vibe.paav.ru — коротко, по-человечески. Сверху свежее, снизу — начало пути. 🚀
26 маявт
🎉 Запуск vibe.paav.ru — портал для платного курса
🪄 Что это: отдельный портал курса. Каждый ученик работает в своём docker-контейнере с VS Code в браузере и помощником Claude. Шаблоны проектов общие с командой Киселёв Груп — нажал на dev «опубликовать», и он сразу доступен здесь.
🔒 Главное: полная изоляция. Ученик видит только свой workspace, не имеет доступа к dev-проектам, чужим файлам или серверным сервисам. Даже Claude внутри контейнера ходит через прокси — реальный OAuth-токен живёт только на хосте.
🏗️ Архитектура
🐳 Образ vibe-workspace: Debian 12 + Node 22 + code-server + claude-cli. Запускается per-student, не от root, с лимитом 1.5 ГБ RAM и 1 CPU.
🌐 Своя docker-сеть vibe-net (172.30.0.0/24). iptables-фильтр (VIBE-FILTER + VIBE-INPUT) разрешает только: shim для Claude + интернет (для npm/git). Всё остальное — блок: host-сервисы, другие docker-сети, NAT-loopback на nginx/sshd, даже другие ученики.
🤖 Anthropic shim (порт 8190 на хосте): принимает запросы из контейнера → подменяет фейковый токен на реальный OAuth → форвардит в api.anthropic.com через наш внешний прокси. Авто-рефреш токена за минуту до истечения.
🔄 Смена аккаунта Claude: положил новый credentials.json + systemctl restart anthropic-shim. Контейнеры учеников не рестартуют.
🖥️ Что есть в UI
🚪 Вход и welcome — в стиле dev'а. Логин/пароль через htpasswd-vibe, своя сессионка.
📦 Мои проекты — список папок в твоём workspace. Кнопка «VS Code →» открывает code-server в контейнере.
📐 Шаблоны — общие с командой dev. «Создать из шаблона» — копирует с заменой {{PROJECT_NAME}} в твой workspace.
⚙️ Настройки (admin) — slide-in справа: список учеников с ролями, кнопка «+ Добавить» открывает форму с авто-сгенерированным паролем без визуально схожих символов (нет 0/O, 1/l/I).
⏱️ Lifecycle контейнеров
Контейнер создаётся в момент добавления ученика админом (статус Created — лежит на диске, не ест RAM).
Стартует автоматически при первом клике «Открыть VS Code».
Idle reaper каждые 5 минут проверяет активность: если 30 минут нет heartbeat'а от вкладки — docker stop. Workspace сохраняется между запусками.
🔐 Что доступно ученику и что нет
✅ Свой workspace в /home/student/workspace/ (read-write, владелец uid 1000).
✅ Шаблоны проектов в /home/student/templates/ (read-only mount).
✅ Claude — через шим, в чате VS Code или в терминале (claude).
✅ Интернет — npm, git, github, любые публичные API.
⛔ Чужие workspaces, dev-проекты, шаблоны на запись.
⛔ Host filesystem за пределами контейнера (/etc, /data хоста).
⛔ Серверные сервисы (panel:3010, handoff, sshd, nginx) — blocked iptables.
⛔ Реальный OAuth-токен Claude — никогда не уходит в контейнер.
Это первая запись. По мере развития здесь будет таймлайн обновлений.