2023 — сейчас · EdTech-платформа
Verbal Voyager
Рабочая среда языковой студии: преподаватели ведут учеников и расписание, ученики проходят упражнения и собирают словарь.
verbal-voyager.ru ↗О проекте
Одно окно для студии
Вместо расписания в мессенджерах, файлов в облаке и слов в сторонних приложениях: всё, что нужно преподавателю и ученику, в одном месте.
Преподавателю
- Проекты с учениками и автоматическое расписание уроков
- Календарь со статусами занятий и оплат
- Планы уроков и конструктор интерактивных страниц
- Доходы и тарифы, роль бухгалтера
Ученику
- Упражнения в пять шагов: от запоминания до перевода
- Диалоги, сгенерированные на изучаемой лексике
- Словарь с транскрипцией, аудио и примерами
- Расписание в собственном часовом поясе
Штат
Кто отвечает за что
| Роль | Сотрудник | Зона ответственности |
|---|---|---|
| Fullstack-разработчик | Иван Карасёв | Модели данных, backend, интерфейсы, интеграции с OpenAI и SkyEng |
| DevOps-инженер | Иван Карасёв | Сервер, CI, мониторинг, безопасность, резервные копии |
| Дизайн и редизайн | Иван Карасёв | Интерфейс платформы и прототип «Mystic Space HUD» |
| Заказчик | Студия WhyNot? | Требования, приёмка, пилоты на реальных учениках |
Стек
На чём работает
- Python 3.12
- Django 5.2
- PostgreSQL 16
- Redis
- pytest
- Ruff
- JavaScript ES-модули
- HTML/CSS
- CKEditor 5
- Ubuntu
- nginx
- Gunicorn
- Supervisor
- systemd
- Let's Encrypt
- ufw + fail2ban
- S3 + CDN
- Gitea
- GitHub Actions
- Zabbix
- OpenAI API
- SkyEng API
- reCAPTCHA
Инфраструктура
Как устроен прод
Прокручивайте: слева шаги, справа схема собирается по ним. Наведите на любой узел, подробности появятся под схемой.
Все запросы приходят на nginx
HTTP/2, TLS 1.2 и 1.3. Всё, что пришло на 80-й порт, уходит на HTTPS.
Тяжёлое идёт мимо сервера
Картинки, скрипты и медиа раздаются из S3-хранилища через CDN. Сервер с 2 ГБ памяти занят только логикой.
nginx → Gunicorn → Django
Gunicorn слушает только 127.0.0.1:8001, снаружи его не видно.
PostgreSQL и Redis
Основная база и кэш с сессиями. Оба слушают только локальный адрес.
Кто следит за процессами
Supervisor перезапускает Gunicorn, certbot продлевает сертификаты, nginx, базы и Gitea работают как службы systemd.
Снаружи открыты три порта
22, 80 и 443. ufw с запретом по умолчанию, fail2ban заблокировал больше 10 000 попыток подбора пароля.
Мониторинг и алерты
Агент Zabbix отдаёт метрики внешнему серверу мониторинга, о сбоях сообщает Telegram-бот.
Наведите на узел схемы или нажмите на него: здесь появятся роль, порт и то, кто за ним следит.
История
Как рос проект
Коммиты по месяцам, прямо из git. Янтарным отмечены месяцы с крупными релизами.
Разборы
Задачи, которые стоило решить
Каждый разбор устроен одинаково: что сломалось, почему, что сделано и как проверено.
Доход, которого не было
Кабинет преподавателя показывал доход на 42 % больше реального.
Читать разбор →Время, которое держалось на совпадении
Скрытая ошибка настройки, из-за которой при переезде сервера все занятия молча сдвинулись бы на четыре часа.
Читать разбор →Календарь и баг, который живёт три дня в месяц
От зависаний на больших объёмах до ошибки, которая воспроизводится только 29–31 числа.
Читать разбор →Весь прод на одном сервере
Сайт, база, кэш, Git-сервер и мониторинг на одной VPS с 2 ГБ памяти.
Читать разбор →Взлом, который пережил первую чистку
Заметил атаку по сломанному деплою, вычистил её, а через три недели повторный аудит нашёл то, что атакующий спрятал глубже.
Читать разбор →