Финальная архитектура проекта DENKART
Дата: 2026-01-08
Версия: 1.2 (обновлено 2026-02-15: рабочая базовая линия — трафик в BBB-CONT22-1)
Обзор архитектуры
Проект DENKART представляет собой инфраструктуру для разработки и хостинга BigBlueButton, включающую:
- BigBlueButton - система веб-конференций (основной продукт)
- Cockpit - веб-интерфейс управления хостингом
- Документация - веб-интерфейс с документацией проекта
- Moodle 4.5 LTS - LMS на lms.cdto.life
Все сервисы размещены в LXD контейнерах для изоляции и управления ресурсами.
Сетевая архитектура — рабочая версия (baseline, с 2026-02-08)
Точка входа (производственная): BBB-CONT22-1 (10.218.14.37). Трафик 80/443 с хоста по iptables DNAT направляется напрямую в BBB-CONT22-1, внутри которого HAProxy/Nginx маршрутизирует по Host на приложения.
Интернет (89.179.242.240) → Роутер → Хост (192.168.1.112) iptables DNAT 80/443
↓
BBB-CONT22-1 (10.218.14.37) :80, :443 — HAProxy/Nginx внутри контейнера
├─→ denkart.cdto.group / .life → Cockpit (хост:9090)
├─→ docs.cdto.group / .life → docs-denkart (10.218.14.102:80)
├─→ school.cdto.life → BigBlueButton
└─→ lms.cdto.life → moodle (10.218.14.104:80)
Альтернативная версия 1.0: единая точка входа nginx-reverse-proxy (10.218.14.200) — см. architecture-versions.md, architecture-version-nginx-reverse-proxy.md.
Домены
| Домен | Назначение | Бэкенд | Внешний IP |
|---|---|---|---|
denkart.cdto.group / .life |
Управление (Cockpit) | хост:9090 | 89.179.242.240 |
docs.cdto.group / .life |
Документация | docs-denkart:80 | 89.179.242.240 |
school.cdto.life |
BigBlueButton | BBB-CONT22-1 (внутри контейнера) | 89.179.242.240 |
lms.cdto.life |
Moodle 4.5 LTS | moodle:80 | 89.179.242.240 |
Внутренняя сеть (LXD)
- Сеть:
lxdbr0(10.218.14.0/24) - Шлюз: 10.218.14.1 (хост)
Контейнеры и IP адреса
| Контейнер | IP адрес | Назначение | Статус |
|---|---|---|---|
| BBB-CONT22-1 | 10.218.14.37 | Точка входа 80/443, BigBlueButton, маршрутизация | ✅ RUNNING |
| docs-denkart | 10.218.14.102 | Документация | ✅ RUNNING |
| moodle | 10.218.14.104 | Moodle 4.5 LTS (lms.cdto.life) | ✅ RUNNING |
| nginx-reverse-proxy | 10.218.14.200 | Альтернативная точка входа (v1.0) | ✅ RUNNING |
SSL/TLS сертификаты
Сертификаты Let's Encrypt
Все домены используют SSL сертификаты Let's Encrypt, полученные через Certbot:
denkart.cdto.life- до 2026-04-08 (89 дней)docs.cdto.life- до 2026-04-08 (89 дней)school.cdto.life- до 2026-03-27 (77 дней)
HAProxy Bundle
Все сертификаты объединены в один bundle для HAProxy:
- Файл: /etc/haproxy/certbundle.pem
- Автоматическое обновление: Настроено через Certbot deploy-hook
Автоматическое обновление
- Timer: Systemd timer (дважды в день: 00:00 и 12:00 UTC)
- Deploy Hook:
/usr/local/bin/certbot-renewal-hook.sh - Обновление HAProxy: Автоматическое после обновления Certbot
Компоненты системы
1. HAProxy
Контейнер: BBB-CONT22-1 (хост)
Порт: 443 (HTTPS)
Режим: HTTP (для Host-based routing)
Функции:
- SSL терминация
- Маршрутизация по Host заголовку
- HTTP/2 поддержка
Конфигурация:
- /etc/haproxy/haproxy.cfg
- Bundle сертификатов: /etc/haproxy/certbundle.pem
Тестирование
Для проверки работоспособности HAProxy и доступности через него:
cd /home/cdto/DENKART/scripts/docs-testing
python3 docs_e2e_test.py
При запуске укажите URL одного из доменов (docs.cdto.group, denkart.cdto.group, school.cdto.life) для проверки доступности через HAProxy.
2. Nginx
Контейнер: BBB-CONT22-1
Порты:
- 8443 (HTTP) - для маршрутизации denkart.cdto.life и docs.cdto.life
- 81 (HTTP/1.1) - для BigBlueButton
- 82 (HTTP/2) - резерв для BigBlueButton
Функции:
- Проксирование в docs-denkart
- Проксирование в BigBlueButton
- WebSocket поддержка
Конфигурация:
- /etc/nginx/sites-enabled/bbb-https-routing.conf (порт 8443)
- /etc/nginx/sites-enabled/bigbluebutton (BigBlueButton)
Тестирование
Для проверки маршрутизации Nginx и доступности сервисов:
cd /home/cdto/DENKART/scripts/docs-testing
python3 docs_e2e_test.py
Тестирование проверяет корректность маршрутизации трафика через Nginx на порту 8443.
3. BigBlueButton
Контейнер: BBB-CONT22-1
IP: 10.218.14.37
Порты:
- 80, 443 (HTTP/HTTPS)
- 16384-32768 (UDP/TCP) - WebRTC
- 3478 (UDP/TCP) - TURN
Компоненты:
- Nginx (проксирование)
- BigBlueButton API
- TURN сервер (coturn)
- FreeSWITCH (SIP)
- Kurento Media Server (WebRTC)
Домен: school.cdto.life
Тестирование
Для комплексного тестирования BigBlueButton доступны следующие тесты:
E2E тестирование (полный цикл):
cd /home/cdto/DENKART/scripts/bbb-testing
python3 bbb_e2e_test.py
Мониторинговый тест:
cd /home/cdto/DENKART/scripts/bbb-testing
python3 bbb_monitoring_test.py
Анализ DOM интерфейса:
cd /home/cdto/DENKART/scripts/bbb-testing
python3 bbb_dom_analyzer.py
Подробнее о тестировании BBB см. README.md
4. Cockpit
Расположение: Хост-система
Порт: 9090
Доступ: https://denkart.cdto.life/
Маршрутизация:
1. HAProxy (443) → Nginx:8443
2. Nginx:8443 → docs-denkart:80
3. docs-denkart:80 → хост:9090 (Cockpit)
Тестирование
Для проверки доступности Cockpit:
cd /home/cdto/DENKART/scripts/docs-testing
python3 docs_e2e_test.py
При запуске укажите URL: https://denkart.cdto.life/ для проверки доступности веб-интерфейса Cockpit.
5. Документация
Контейнер: docs-denkart
Порт: 8090
Доступ: https://docs.cdto.life/
Веб-сервер: Python HTTP server (Markdown рендеринг)
Маршрутизация:
1. HAProxy (443) → Nginx:8443
2. Nginx:8443 → docs-denkart:80
3. docs-denkart:80 → localhost:8090 (Python)
Тестирование
Для проверки документации docs.cdto.group доступны следующие тесты:
Основной E2E тест (доступность и GUI):
cd /home/cdto/DENKART/scripts/docs-testing
python3 docs_e2e_test.py
Анализ DOM структуры:
cd /home/cdto/DENKART/scripts/docs-testing
python3 docs_dom_analyzer.py
Тест авторизации (личный кабинет):
cd /home/cdto/DENKART/scripts/docs-testing
python3 docs_auth_test.py
Запуск всех тестов:
cd /home/cdto/DENKART/scripts/docs-testing
./run_all_tests.sh
Подробнее о тестировании документации см. README.md
6. TURN сервер
Контейнер: BBB-CONT22-1
Порт: 3478 (UDP/TCP)
Сервис: coturn
Конфигурация:
- Realm: school.cdto.life
- Listening IP: 0.0.0.0
- External IP: 89.179.242.240
- Relay IP: 10.218.14.37
- Relay порты: 32769-65535
Тестирование
TURN сервер тестируется в составе BigBlueButton при проверке медиа-функциональности:
cd /home/cdto/DENKART/scripts/bbb-testing
python3 bbb_e2e_test.py
Тест проверяет установление WebRTC соединений, работу медиа (видео/аудио) и использование TURN сервера для NAT traversal.
Маршрутизация трафика
HTTPS трафик (порт 443)
Клиент (HTTPS)
↓
HAProxy (порт 443, SSL терминация, HTTP режим)
↓
├─→ Host: denkart.cdto.life
│ → Backend: nginx-8443
│ → Nginx:8443 (HTTP)
│ → docs-denkart:80
│ → хост:9090 (Cockpit)
│
├─→ Host: docs.cdto.life
│ → Backend: nginx-8443
│ → Nginx:8443 (HTTP)
│ → docs-denkart:80
│ → localhost:8090 (Python документация)
│
└─→ Host: school.cdto.life
→ Backend: nginx (порт 81, HTTP/1.1)
→ Nginx:81
→ BigBlueButton
HTTP трафик (порт 80)
HTTP трафик маршрутизируется аналогично HTTPS, но без SSL терминации.
Безопасность
SSL/TLS
- Все домены используют SSL сертификаты Let's Encrypt
- Поддержка TLS 1.2 и 1.3
- HTTP/2 поддержка
Файрвол
- UFW на хосте
- iptables правила для DNAT
Изоляция
- Все сервисы в LXD контейнерах
- Сетевая изоляция через lxdbr0
Резервное копирование
Автоматическое резервное копирование
Скрипты резервного копирования:
- scripts/backup-full-server.sh - полное резервное копирование сервера
- scripts/backup-postgres.sh - резервное копирование PostgreSQL
- scripts/backup-project.sh - резервное копирование проекта
Хранение секретов
- Файл:
/home/cdto/DENKART/config/secrets - Права: 600
- Скрипты загрузки:
scripts/load-secrets.sh,scripts/get-secret.sh
Мониторинг
Системные метрики
- Cockpit - веб-интерфейс для мониторинга системы
- Доступ:
https://denkart.cdto.life/
Логирование
- Nginx:
/var/log/nginx/ - HAProxy:
/var/log/haproxy/ - Certbot:
/var/log/letsencrypt/ - TURN:
/var/log/turnserver/
Обслуживание
Регулярные задачи
- Автоматическое обновление SSL сертификатов - дважды в день
- Проверка статуса сервисов - ежедневно
- Проверка резервных копий - еженедельно
- Обновление системы - ежемесячно
Команды для проверки
# Статус контейнеров
lxc list
# Статус сервисов
lxc exec BBB-CONT22-1 -- systemctl status haproxy nginx coturn
# Статус SSL сертификатов
lxc exec BBB-CONT22-1 -- certbot certificates
# Проверка маршрутизации
curl -I https://denkart.cdto.life/
curl -I https://docs.cdto.life/
curl -I https://school.cdto.life/
Известные ограничения
TURN протокол
TURN сервер работает на порту 3478, а не на порту 443. Это связано с тем, что HAProxy в HTTP режиме не может обрабатывать TCP трафик TURN на том же порту. Для работы TURN через порт 443 потребуется отдельная настройка.
HTTP/2 для BigBlueButton
Все запросы к BigBlueButton идут на порт 81 (HTTP/1.1) для избежания проблем с "broken header" при использовании HTTP/2.
Документация
Основная документация доступна в docs/:
- docs/README.md - обзор документации
- docs/AI-ASSISTANT-GUIDE.md - руководство для AI ассистентов
- docs/operations/ - операционная документация
- docs/setup/ - документация по настройке
Контакты и поддержка
- Проект: DENKART
- Документация: https://docs.cdto.life/
- Управление: https://denkart.cdto.life/
Статус: ✅ Архитектура настроена и работает корректно.