Конфигурация доменов проекта DENKART

Дата создания: 2026-01-08
Последнее обновление: 2026-02-08
Версия проекта: 1.0.0
Статус: ✅ Настроено и работает (🟢 nginx-reverse-proxy — единая точка входа)

Домены проекта

denkart.cdto.life и denkart.cdto.group

  • Назначение: Интерфейс управления хостингом (Cockpit)
  • Маршрутизация (с 2026-02-08): nginx-reverse-proxy (10.218.14.200:80/443) → Cockpit (10.218.14.1:9090)
  • Статус: ✅ Работает
  • Важно: В /etc/cockpit/cockpit.conf на хосте в Origins должны быть оба домена (см. config/cockpit/cockpit-denkart.conf).

docs.cdto.life и docs.cdto.group

  • Назначение: Интерфейс с документацией проекта
  • Маршрутизация (с 2026-02-08): nginx-reverse-proxy (10.218.14.200) → docs-denkart (10.218.14.102:80)
  • Статус: ✅ Работает

school.cdto.life

  • Назначение: Рабочая версия проекта (BigBlueButton)
  • Маршрутизация (с 2026-02-08): nginx-reverse-proxy (10.218.14.200) → BBB-CONT22-1 (10.218.14.37:80)
  • Статус: ✅ Работает (требует HTTPS)

Текущая конфигурация (с 2026-02-08)

Маршрутизация

Единая точка входа: nginx-reverse-proxy (10.218.14.200)

Правила iptables:

# Порт 80  → nginx-reverse-proxy (10.218.14.200:80)
# Порт 443 → nginx-reverse-proxy (10.218.14.200:443)

nginx-reverse-proxy маршрутизирует по Host на:
- denkart.cdto.group / .life → Cockpit (10.218.14.1:9090)
- docs.cdto.group / .life → docs-denkart (10.218.14.102:80)
- school.cdto.life → BBB-CONT22-1 (10.218.14.37:80)

Конфигурация Nginx в docs-denkart

Файл: /etc/nginx/sites-enabled/00-denkart-routing.conf

Содержит конфигурацию для всех трех доменов:
- denkart.cdto.life → проксирование на Cockpit (10.218.14.1:9090)
- docs.cdto.life → проксирование на Python веб-сервер (127.0.0.1:8090)
- school.cdto.life → проксирование на BigBlueButton (10.218.14.37:80)

Решение проблемы с маршрутизацией ✅

Проблема решена: Добавлена конфигурация маршрутизации в BBB-CONT22-1, которая проксирует запросы на docs.cdto.life и denkart.cdto.life в контейнер docs-denkart.

Подробности: См. docs/operations/routing-solution.md

Архитектура маршрутизации (с 2026-02-08)

Внешний запрос → Хост (iptables 80/443) → nginx-reverse-proxy (10.218.14.200)
                                                    ↓
                        ┌───────────────────────────┼───────────────────────────┐
                        ↓                           ↓                           ↓
            denkart.cdto.group/.life      docs.cdto.group/.life      school.cdto.life
                        ↓                           ↓                           ↓
                Cockpit (10.218.14.1:9090)   docs-denkart (10.218.14.102:80)   BBB-CONT22-1 (10.218.14.37:80)

При остановке BBB-CONT22-1 остаются доступны denkart и docs.

Проверка работы

Внутри контейнера docs-denkart

# docs.cdto.life
lxc exec docs-denkart -- curl -I http://127.0.0.1:80/ -H "Host: docs.cdto.life"
# Результат: HTTP/1.1 200 OK ✅

# denkart.cdto.life
lxc exec docs-denkart -- curl -I http://127.0.0.1:80/ -H "Host: denkart.cdto.life"
# Результат: HTTP/1.1 200 OK ✅

# school.cdto.life
lxc exec docs-denkart -- curl -I http://127.0.0.1:80/ -H "Host: school.cdto.life"
# Результат: HTTP/1.1 301 (редирект на HTTPS - нормально) ✅

Снаружи

# docs.cdto.life
curl -I http://docs.cdto.life/
# Результат: HTTP/1.1 200 OK ✅

# denkart.cdto.life
curl -I http://denkart.cdto.life/
# Результат: HTTP/1.1 200 OK ✅

# school.cdto.life
curl -I http://school.cdto.life/
# Результат: HTTP/1.1 301 (редирект на HTTPS - нормально) ✅

Если denkart.cdto.group не открывается (порты на роутере проброшены)

  1. Проверка с сервера:
    curl -sI -k -H "Host: denkart.cdto.group" https://127.0.0.1/ — ожидается HTTP/2 200.
    curl -sI -k -H "Host: denkart.cdto.group" https://192.168.1.112/ — то же (приём на LAN).

  2. Cockpit Origins: В /etc/cockpit/cockpit.conf на хосте в [WebService]:
    Origins = ... https://denkart.cdto.group wss://denkart.cdto.group
    Затем: sudo systemctl restart cockpit.socket.

  3. Доступ из той же сети (NAT hairpinning):
    Многие роутеры не отдают свой внешний IP «назад» в LAN. Если вы открываете https://denkart.cdto.group с того же Wi‑Fi/сети, что и сервер, браузер идёт на 89.179.242.240, и запрос может не доходить.
    Что сделать:

  4. Проверить с другой сети (мобильный интернет 4G/5G или другой провайдер): открыть https://denkart.cdto.group в браузере.
  5. Или с ПК в той же LAN: добавить в C:\Windows\System32\drivers\etc\hosts (Windows) или /etc/hosts (Linux/macOS) строку:
    192.168.1.112 denkart.cdto.group
    затем открыть https://denkart.cdto.group (трафик пойдёт на 192.168.1.112 в обход роутера).

  6. Роутер: Проброс 80 и 443 на 192.168.1.112 (см. ROUTER-SETUP-QUICK-GUIDE.md). Внешний IP роутера должен совпадать с DNS для denkart.cdto.group (89.179.242.240).

Восстановление доступа (denkart.cdto.group / docs.cdto.group недоступны)

Если домены denkart.cdto.group и docs.cdto.group не открываются, выполните по порядку:

1. Запустить контейнеры

lxc start nginx-reverse-proxy
lxc start docs-denkart
lxc list nginx-reverse-proxy docs-denkart

У контейнера nginx-reverse-proxy должен быть IPv4 10.218.14.200. Если после перезагрузки IP нет:

lxc exec nginx-reverse-proxy -- ip addr add 10.218.14.200/24 dev eth0 2>/dev/null
lxc exec nginx-reverse-proxy -- ip route add default via 10.218.14.1 2>/dev/null

2. Развернуть конфиг и сертификаты в nginx-reverse-proxy

Сертификаты в certs-work/ принадлежат root — скрипт запускать с sudo:

sudo /home/cdto/DENKART/scripts/deploy-nginx-reverse-proxy-cdto-group.sh

Скрипт копирует config/nginx/nginx-reverse-proxy-routing.conf в контейнер как 01-routing.conf и сертификаты из /home/cdto/certs-work/ в контейнер.

3. Проверить iptables

Порты 80 и 443 должны направляться в nginx-reverse-proxy (10.218.14.200), а не в BBB (10.218.14.37):

sudo iptables -t nat -L PREROUTING -n -v | grep -E '80|443'

Если для 80/443 указан 10.218.14.37, нужно применить правила проброса на 10.218.14.200 (см. снимки в config/snapshots/ или настройки роутера).

4. Проверка с хоста

# HTTP
curl -sI -H "Host: denkart.cdto.group" http://127.0.0.1/
curl -sI -H "Host: docs.cdto.group" http://127.0.0.1/

# HTTPS (если сертификаты развёрнуты)
curl -sI -k -H "Host: denkart.cdto.group" https://127.0.0.1/
curl -sI -k -H "Host: docs.cdto.group" https://127.0.0.1/

Ожидается ответ с кодом 200 или 301/302.

5. Cockpit (только для denkart.cdto.group)

В /etc/cockpit/cockpit.conf на хосте в [WebService] должны быть:

Origins = https://denkart.cdto.group wss://denkart.cdto.group https://denkart.cdto.life wss://denkart.cdto.life

Затем: sudo systemctl restart cockpit.socket.

6. Доступ из той же сети (NAT)

Если сервер и клиент в одной LAN, роутер может не отдавать свой внешний IP «назад». Проверьте с другой сети (мобильный интернет) или добавьте в hosts на клиенте: 192.168.1.112 denkart.cdto.group docs.cdto.group.


Следующие шаги

  1. ⏳ Получить SSL сертификаты для всех доменов
  2. ⏳ Настроить HTTPS для всех доменов
  3. ⏳ Настроить автоматическое обновление SSL сертификатов

Статус: ✅ Конфигурация создана, маршрутизация настроена и работает