Финальная архитектура проекта 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/

Обслуживание

Регулярные задачи

  1. Автоматическое обновление SSL сертификатов - дважды в день
  2. Проверка статуса сервисов - ежедневно
  3. Проверка резервных копий - еженедельно
  4. Обновление системы - ежемесячно

Команды для проверки

# Статус контейнеров
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/

Статус: ✅ Архитектура настроена и работает корректно.