[{"data":1,"prerenderedAt":471},["ShallowReactive",2],{"navigation_docs":3,"-usage-tcp-tls":125,"-usage-tcp-tls-surround":466},[4,24,67,85,103],{"title":5,"path":6,"stem":7,"children":8,"icon":23},"Начало работы","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11,15,19],{"title":10,"path":6,"stem":7},"Введение",{"title":12,"path":13,"stem":14},"Возможности","\u002Fgetting-started\u002Fopportunities","1.getting-started\u002F2.opportunities",{"title":16,"path":17,"stem":18},"Установка и запуск","\u002Fgetting-started\u002Finstalling","1.getting-started\u002F3.installing",{"title":20,"path":21,"stem":22},"Вход и пароль","\u002Fgetting-started\u002Ffirst-login","1.getting-started\u002F4.first-login","i-lucide-book-open",{"title":25,"icon":26,"path":27,"stem":28,"children":29,"page":66},"Управление","i-lucide-folder-kanban","\u002Fusage","2.usage",[30,34,38,42,46,50,54,58,62],{"title":31,"path":32,"stem":33},"Проекты","\u002Fusage\u002Fprojects","2.usage\u002F1.projects",{"title":35,"path":36,"stem":37},"Доменные имена","\u002Fusage\u002Fconstructor","2.usage\u002F2.constructor",{"title":39,"path":40,"stem":41},"Прокси и защита","\u002Fusage\u002Fproxy-settings","2.usage\u002F3.proxy-settings",{"title":43,"path":44,"stem":45},"TCP с TLS","\u002Fusage\u002Ftcp-tls","2.usage\u002F4.tcp-tls",{"title":47,"path":48,"stem":49},"Ручной Caddyfile","\u002Fusage\u002Fmanual-block","2.usage\u002F5.manual-block",{"title":51,"path":52,"stem":53},"Тестовые поддомены","\u002Fusage\u002Ftest-subdomains","2.usage\u002F6.test-subdomains",{"title":55,"path":56,"stem":57},"Пользователи","\u002Fusage\u002Fusers","2.usage\u002F7.users",{"title":59,"path":60,"stem":61},"Права доступа","\u002Fusage\u002Froles","2.usage\u002F8.roles",{"title":63,"path":64,"stem":65},"Обновление","\u002Fusage\u002Fupdating","2.usage\u002F9.updating",false,{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":66},"Docker","i-lucide-container","\u002Fdocker","3.docker",[73,77,81],{"title":74,"path":75,"stem":76},"Контейнеры","\u002Fdocker\u002Fcontainers","3.docker\u002F1.containers",{"title":78,"path":79,"stem":80},"Логи и терминал","\u002Fdocker\u002Flogs-terminal","3.docker\u002F2.logs-terminal",{"title":82,"path":83,"stem":84},"Сети","\u002Fdocker\u002Fnetworks","3.docker\u002F3.networks",{"title":86,"icon":87,"path":88,"stem":89,"children":90,"page":66},"Хранилища и файлы","i-lucide-folder-open","\u002Ffiles","4.files",[91,95,99],{"title":92,"path":93,"stem":94},"Хранилища","\u002Ffiles\u002Fvolumes","4.files\u002F1.volumes",{"title":96,"path":97,"stem":98},"Файловый менеджер","\u002Ffiles\u002Fmanager","4.files\u002F2.manager",{"title":100,"path":101,"stem":102},"Текстовый редактор","\u002Ffiles\u002Feditor","4.files\u002F3.editor",{"title":104,"icon":105,"path":106,"stem":107,"children":108,"page":66},"Обслуживание","i-lucide-wrench","\u002Foperations","5.operations",[109,113,117,121],{"title":110,"path":111,"stem":112},"Диск и настройки","\u002Foperations\u002Fmaintenance","5.operations\u002F1.maintenance",{"title":114,"path":115,"stem":116},"Резервные копии","\u002Foperations\u002Fbackups","5.operations\u002F2.backups",{"title":118,"path":119,"stem":120},"Решение проблем","\u002Foperations\u002Ftroubleshooting","5.operations\u002F3.troubleshooting",{"title":122,"path":123,"stem":124},"Безопасность","\u002Foperations\u002Fsecurity","5.operations\u002F4.security",{"id":126,"title":43,"body":127,"description":459,"extension":460,"links":461,"meta":462,"navigation":463,"path":44,"seo":464,"stem":45,"__hash__":465},"docs\u002F2.usage\u002F4.tcp-tls.md",{"type":128,"value":129,"toc":452},"minimark",[130,139,146,151,162,165,169,213,216,230,233,240,243,247,260,263,267,274,370,385,403,430,434,441,448],[131,132,133,134,138],"p",{},"Режим ",[135,136,137],"strong",{},"«Защищённый TCP (TLS)»"," нужен для сервисов, которые используют TLS, но не говорят по HTTP. Например, встроенный TURN-сервер LiveKit принимает подключения браузера по TURN\u002FTLS. Обычный HTTPS reverse proxy такой протокол не передаст.",[131,140,141,142,145],{},"HTTPS — это HTTP внутри TLS. Здесь Caddy завершает TLS и передаёт приложению исходный поток TCP без HTTP-обработки. Создавать, изменять и удалять такие домены может только ",[135,143,144],{},"администратор всего Asmy",".",[147,148,150],"h2",{"id":149},"как-устроено-подключение","Как устроено подключение",[131,152,153,154,158,159,145],{},"Клиент подключается к ",[155,156,157],"code",{},"turn.example.com:443"," и передаёт имя домена через TLS SNI. Caddy выбирает нужный маршрут по этому имени, использует сертификат домена и соединяется с внутренним портом приложения в сети ",[155,160,161],{},"server",[131,163,164],{},"Обычные HTTPS-сайты продолжают использовать тот же внешний TCP-порт 443. Дополнительный публичный порт для этого маршрута не требуется. Режим рассчитан на TLS с самого начала соединения и SNI; он не предназначен для STARTTLS, произвольного TCP без TLS или UDP.",[147,166,168],{"id":167},"настройка-домена","Настройка домена",[170,171,172,179,186,189,195,205],"ol",{},[173,174,175,176,178],"li",{},"Подключите контейнер приложения к общей Docker-сети ",[155,177,161],{},". Он должен слушать интерфейс контейнера, доступный из Caddy.",[173,180,181,182,185],{},"Настройте DNS имени ",[155,183,184],{},"turn.example.com"," на сервер. Проверьте A и AAAA, если обе записи существуют.",[173,187,188],{},"Откройте проект → «Домены» → добавление домена.",[173,190,191,192,194],{},"Выберите ",[135,193,137],{},". Введите имя домена без протокола, пути и порта.",[173,196,197,198,201,202,145],{},"Укажите Alias контейнера или сервиса и ",[135,199,200],{},"внутренний порт",", например ",[155,203,204],{},"livekit:5349",[173,206,207,208,145],{},"Сохраните и ",[209,210,212],"a",{"href":211},"\u002Fusage\u002Fconstructor#%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5","примените конфигурацию",[131,214,215],{},"Не используйте это же имя одновременно для сайта, другого маршрута или ручного блока. Caddy управляет сертификатом автоматически: публичные DNS и доступные извне TCP-порты 80\u002F443 должны позволять проверку домена центром сертификации. Отдельный HTTP-сайт под TURN-доменом создавать не нужно.",[131,217,218,219,221,222,225,226,229],{},"Внутри сети ",[155,220,161],{}," Caddy передаёт ",[135,223,224],{},"незашифрованный TCP",". Upstream должен ожидать именно его; не направляйте маршрут на порт, где приложение самостоятельно ждёт TLS. Не публикуйте этот внутренний порт через ",[155,227,228],{},"ports"," без самостоятельной необходимости: это создаст путь в обход Caddy.",[131,231,232],{},"Настройки www, HTTP-заголовков, Basic Auth, WebSocket и тестовых поддоменов в этом режиме недоступны: они относятся к HTTP. Asmy не создаёт сам TURN-сервер, пользователей или правила доступа к приложению.",[131,234,235],{},[236,237],"img",{"alt":238,"src":239},"Настройка TCP\u002FTLS для LiveKit на локальном стенде","\u002Fimages\u002Ftcp-tls.jpg",[131,241,242],{},"На иллюстрации — локальный пример с включённой передачей IP. Для рабочего подключения подставьте свой публичный домен и Alias приложения.",[147,244,246],{"id":245},"передача-ip-клиента","Передача IP клиента",[131,248,249,252,253,256,257,145],{},[135,250,251],{},"«Передавать IP клиента»"," выключено по умолчанию. При включении Caddy добавляет к потоку заголовок ",[135,254,255],{},"PROXY protocol v2",". Это не HTTP-заголовок ",[155,258,259],{},"X-Forwarded-For",[131,261,262],{},"Включайте настройку только если upstream поддерживает PROXY protocol и настроен принимать его от Caddy. Иначе соединение не заработает. На стороне upstream ограничьте доверенные адреса реальной сетью или адресами Caddy; не доверяйте PROXY-заголовкам из любых источников.",[147,264,266],{"id":265},"пример-встроенный-turn-livekit","Пример: встроенный TURN LiveKit",[131,268,269,270,273],{},"Для LiveKit ",[135,271,272],{},"1.13.10"," соответствующая часть конфигурации выглядит так:",[275,276,281],"pre",{"className":277,"code":278,"language":279,"meta":280,"style":280},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","turn:\n  enabled: true\n  domain: turn.example.com\n  tls_port: 5349\n  external_tls: true\n  proxy_protocol: true\n  proxy_protocol_trusted_cidrs:\n    - 172.28.0.0\u002F24\n","yaml","",[155,282,283,296,309,321,333,343,353,361],{"__ignoreMap":280},[284,285,288,292],"span",{"class":286,"line":287},"line",1,[284,289,291],{"class":290},"swJcz","turn",[284,293,295],{"class":294},"sMK4o",":\n",[284,297,299,302,305],{"class":286,"line":298},2,[284,300,301],{"class":290},"  enabled",[284,303,304],{"class":294},":",[284,306,308],{"class":307},"sfNiH"," true\n",[284,310,312,315,317],{"class":286,"line":311},3,[284,313,314],{"class":290},"  domain",[284,316,304],{"class":294},[284,318,320],{"class":319},"sfazB"," turn.example.com\n",[284,322,324,327,329],{"class":286,"line":323},4,[284,325,326],{"class":290},"  tls_port",[284,328,304],{"class":294},[284,330,332],{"class":331},"sbssI"," 5349\n",[284,334,336,339,341],{"class":286,"line":335},5,[284,337,338],{"class":290},"  external_tls",[284,340,304],{"class":294},[284,342,308],{"class":307},[284,344,346,349,351],{"class":286,"line":345},6,[284,347,348],{"class":290},"  proxy_protocol",[284,350,304],{"class":294},[284,352,308],{"class":307},[284,354,356,359],{"class":286,"line":355},7,[284,357,358],{"class":290},"  proxy_protocol_trusted_cidrs",[284,360,295],{"class":294},[284,362,364,367],{"class":286,"line":363},8,[284,365,366],{"class":294},"    -",[284,368,369],{"class":319}," 172.28.0.0\u002F24\n",[131,371,372,373,376,377,380,381,384],{},"Здесь ",[155,374,375],{},"172.28.0.0\u002F24"," — ",[135,378,379],{},"пример",", а не универсальное значение. Подставьте фактическую доверенную подсеть подключения Caddy, проверив ",[155,382,383],{},"docker network inspect server"," и адрес, с которого LiveKit принимает соединение. Остальная конфигурация LiveKit — ключи, доступ к комнатам, node IP, media-порты и ограничения relay — настраивается отдельно владельцем приложения.",[131,386,387,388,390,391,394,395,398,399,402],{},"В Asmy задайте ",[155,389,184],{},", Alias ",[155,392,393],{},"livekit",", порт ",[155,396,397],{},"5349"," и включите передачу IP. ",[155,400,401],{},"external_tls: true"," означает, что TLS завершается в Caddy: экспортировать сертификат и приватный ключ в LiveKit не нужно. Если передача IP не нужна, выключите её с обеих сторон и уберите параметры PROXY protocol из примера.",[131,404,405,406,409,410,413,414,417,418,424,425,145],{},"В этой версии LiveKit объявляет клиенту внешний TURN\u002FTLS-порт ",[135,407,408],{},"443"," при ",[155,411,412],{},"external_tls","; ",[155,415,416],{},"tls_port: 5349"," задаёт внутренний listener. Не используйте его как ожидаемый внешний порт. При другой версии проверьте соответствующие ",[209,419,423],{"href":420,"rel":421},"https:\u002F\u002Fgithub.com\u002Flivekit\u002Flivekit\u002Fblob\u002Fv1.13.10\u002Fpkg\u002Fconfig\u002Fconfig.go",[422],"nofollow","настройки LiveKit"," и ",[209,426,429],{"href":427,"rel":428},"https:\u002F\u002Fgithub.com\u002Flivekit\u002Flivekit\u002Fblob\u002Fv1.13.10\u002Fpkg\u002Fservice\u002Fturn.go",[422],"реализацию TURN",[147,431,433],{"id":432},"проверка-и-ограничения","Проверка и ограничения",[131,435,436,437,440],{},"Проверьте сертификат снаружи по нужному имени и работу ",[135,438,439],{},"самого протокола",", а не только открытый порт. Для TURN нужен успешный relay трафика. Страница в браузере под TURN-доменом не является проверкой: этот маршрут не обслуживает HTTP.",[131,442,443,444,447],{},"При проблеме начните с ",[209,445,446],{"href":119},"логов Caddy",", DNS, сети, внутреннего порта и согласованности PROXY protocol. Успешное применение конфигурации подтверждает запуск Caddy, но не готовность upstream и не завершение выдачи сертификата. Пересоздание Caddy при применении может оборвать текущие соединения. Обычное автоматическое продление сертификата не требует перезапуска LiveKit.",[449,450,451],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":280,"searchDepth":298,"depth":298,"links":453},[454,455,456,457,458],{"id":149,"depth":298,"text":150},{"id":167,"depth":298,"text":168},{"id":245,"depth":298,"text":246},{"id":265,"depth":298,"text":266},{"id":432,"depth":298,"text":433},"Как открыть TURN или другой TCP-сервис через общий порт 443 с сертификатом Caddy.","md",null,{},{"title":43},{"title":43,"description":459},"gVWkW6ZL1XSNpBYZCWeRywyQ4yZg4XsR358CNWcjPPI",[467,469],{"title":39,"path":40,"stem":41,"description":468,"children":-1},"Перенаправления, внешний upstream, заголовки ответов и Basic Auth.",{"title":47,"path":48,"stem":49,"description":470,"children":-1},"Когда использовать Caddyfile, как включить блок и проверить результат.",1792043053512]