Запуск практики
Практика работает целиком на вашей машине: браузер, Postgres и проверки — всё локально, интернет после скачивания образа не нужен.
Что нужно
Docker с docker compose. Больше ничего: Python, Node и клиент Postgres ставить не надо.
docker compose pull && docker compose up
Открыть localhost:8766. Первый запуск дольше — образ скачивается и накатывается схема базы.
pull нужен на каждом новом комплекте: версия образа закреплена подвижным тегом :1, и без него docker поднимет тот образ, что уже лежит на диске, даже если он месячной давности.

Первый вход
В первый раз приложение открывается на странице «Как всё устроено» и спрашивает, показать ли, что где находится. «Да» запускает показ по экрану: два десятка шагов с подсветкой — список заданий, условие, редактор, меню живой базы, вкладки панели, проверка. Показ ничего не нажимает за вас и не трогает базу: он только переключает вид и возвращает его как было.
«Нет, я уже работал» — и следующие домашки открываются сразу на задании. Ответ запоминается в браузере, поэтому вопрос не повторяется от пака к паку. Сама страница остаётся первым пунктом в списке слева: там же кнопка запустить показ заново.
Две базы, и это важно
| База | Что в ней | Кто её меняет |
|---|---|---|
| живая | ваши эксперименты: любые SELECT, INSERT, CREATE, загруженные примеры данных | вы, кнопкой «Выполнить» |
| проверочная | чистая копия схемы, куда наливаются варианты данных задания | только проверка, автоматически |
Поэтому сломать себе проверку экспериментами невозможно: «Проверить решение» не смотрит на живую базу вообще. И наоборот — то, что запрос «отработал» в живой базе с одним набором строк, ещё не значит, что задание решено.
Открываете задание — в живой базе сразу его первый пример данных, можно писать SELECT и видеть строки. Что сейчас в базе, показывает меню «База: …» рядом с «Выполнить»: там же другие примеры задания, «Перезагрузить текущие данные» (после DELETE и UPDATE) и «Очистить до пустой схемы». Если вы меняли данные сами, при переходе к другому заданию они не затираются — приложение предложит загрузить пример, но решать вам. Решения все эти кнопки не трогают.
Папка solutions/
Рядом с docker-compose.yml создаётся папка solutions/ — по файлу на задание:
solutions/
t01_active_shops_with_seats.sql
t02_espresso_available.sql
.status.json что и когда проходило проверку
.history/ история запросов и закладки, в git не попадает
Это и есть ваша сдача: коммитьте solutions/ в свой репозиторий. Раннер сам дописывает .history/ в solutions/.gitignore, чтобы черновики не попали в коммит. Как проверяет преподаватель
Обновление практики
Практику раздаёт преподаватель — файлом pack.enc в каталоге комплекта; раннер монтирует его только на чтение и распаковывает в память. Когда преподаватель прислал новый pack.enc, достаточно перезапустить раннер:
docker compose up -d --force-recreate runner
Сам раннер обновляется отдельно, и без pull новая версия не приедет:
docker compose pull && docker compose up -d
Комплект собран на версии новее вашего образа — в списке заданий появится «Обновите практику» с этой же командой: раннер сверяет свою версию с той, что записана в паке.
Данные живой базы переживают перезапуск: они лежат в томе pgdata. Ваши решения тоже — они на диске рядом, а не в контейнере.
Если преподаватель положил в пак тему, приложение возьмёт из неё цвета, шрифты, логотип и название курса. Светлую или тёмную схему выбираете вы кнопкой в списке заданий — если тема не зафиксировала одну из них. Посмотреть оформление по умолчанию: localhost:8766/?theme=off.