Удалённый доступ
ThreadCells ориентирован прежде всего на loopback: сервер должен слушать 127.0.0.1, а не публичный интерфейс. Обычный Web UI — это консоль оператора и не предоставляет общую границу входа.
Не открывайте необработанный порт ThreadCells напрямую в публичный Интернет.
Для редкого доступа выберите SSH-туннель. Если нужен постоянный URL и владелец хоста явно одобрил такую границу аутентификации и проксирования, используйте аутентифицированный HTTPS reverse proxy.
Вариант A: SSH-туннель
На ноутбуке подключитесь к хосту ThreadCells и перенаправьте локальный порт:
ssh -L 9889:127.0.0.1:9889 user@serverНе закрывайте эту SSH-сессию, затем откройте:
http://127.0.0.1:9889Браузер подключается к порту 9889 на ноутбуке. SSH шифрует трафик и направляет его на 127.0.0.1:9889 сервера. ThreadCells по-прежнему слушает только loopback-интерфейс сервера.
Если локальный порт 9889 занят, используйте другой локальный порт:
ssh -L 19889:127.0.0.1:9889 user@serverЗатем откройте http://127.0.0.1:19889. Туннель завершается при отключении SSH; подключитесь снова той же командой. OpenSSH использует тот же синтаксис -L в актуальных установках Linux, macOS и Windows.
Вариант B: Caddy и Authelia
Для удобного постоянного URL поместите аутентификацию и HTTPS перед ThreadCells:
Browser
↓ HTTPS
Caddy reverse proxy
↓ forward-auth
Authelia login and second factor
↓ approved request
ThreadCells at 127.0.0.1:9889Caddy завершает TLS и проксирует HTTP/WebSocket-трафик. Authelia предоставляет границу аутентификации пользователя. ThreadCells остаётся локальным upstream; эта настройка не создаёт вторую систему авторизации ThreadCells.
Предварительные требования
- DNS-записи для
threadcells.example.comиauth.example.com, указывающие на хост; - входящие TCP-порты 80 и 443, доступные Caddy;
- работоспособный ThreadCells на
127.0.0.1:9889; - Caddy и Authelia, установленные по их официальным инструкциям;
- безопасно настроенные хранилище Authelia, session secrets, notifier и как минимум один пользователь.
THREADCELLS_TRUSTED_PROXY_ORIGINS=https://threadcells.example.com, заданная в существующем окружении службы ThreadCells.
Используйте официальное руководство по установке Caddy и официальное руководство по началу работы с Authelia. Authelia документирует развёртывания bare-metal и в контейнере.
Подключите Caddy к Authelia
Следуйте актуальному руководству по интеграции Caddy от Authelia. Компактная форма Caddyfile:
auth.example.com {
reverse_proxy 127.0.0.1:9091
}
threadcells.example.com {
forward_auth 127.0.0.1:9091 {
uri /api/authz/forward-auth
copy_headers Remote-User Remote-Groups Remote-Email Remote-Name
}
reverse_proxy 127.0.0.1:9889 {
header_up Host 127.0.0.1:9889
}
}Считайте это связью между сервисами, а не полной конфигурацией Authelia. В Authelia настройте публичные URL, cookie domain, access-control policy, пользователей, notifier, storage и второй фактор по официальным руководствам. Храните сгенерированные secrets вне репозитория. Перезапустите ThreadCells после добавления или изменения THREADCELLS_TRUSTED_PROXY_ORIGINS; значение представляет собой точный разделённый запятыми allowlist HTTPS origins без path. Оно позволяет изменяющим запросам оператора с cookie-аутентификацией принимать public browser origin, не доверяя произвольным proxy headers.
forward_auth Caddy проверяет каждый запрос, прежде чем тот достигнет ThreadCells. Переопределение upstream Host сохраняет границу Trusted Host ThreadCells, доступную только через loopback, тогда как Caddy владеет внешним hostname и границей аутентификации. reverse_proxy Caddy поддерживает WebSocket upgrades, которые использует live terminal.
Запуск и проверка
Проверьте конфигурацию до перезагрузки сервисов:
caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
sudo systemctl status caddy authelia --no-pagerЗатем проверьте всё перечисленное:
https://auth.example.comпоказывает ожидаемую страницу Authelia;- переход на
https://threadcells.example.comбез входа отклоняется или перенаправляется; - вход и прохождение настроенного второго фактора открывают ThreadCells;
- терминал агента передаёт вывод и переподключается после обновления браузера;
curl http://127.0.0.1:9889/healthпо-прежнему работает на хосте;- порт 9889 недоступен из публичной сети.
Частые проблемы
- Цикл перенаправления: публичный URL Authelia, cookie domain или access-control host не совпадает с DNS. Сравните их в точности.
- 502 Bad Gateway: Caddy не может подключиться к локальному listener ThreadCells или Authelia. Проверьте оба сервиса и их loopback-порты.
- Вход работает, но терминал не передаёт вывод: убедитесь, что запрос достигает
reverse_proxyCaddy и другой proxy не удаляет WebSocket upgrade headers. - Не удаётся выпустить сертификат: проверьте публичный DNS и входящие порты 80/443. В документации Caddy об автоматическом HTTPS объясняются требования.
Сохраняйте SSH forwarding как аварийный путь. Он остаётся полезен при восстановлении DNS, TLS или внешнего слоя аутентификации.
