Подключиться к удалённому серверу
Каждый клиент — это отрисовщик поверх cc_server, которому принадлежат данные.
Приложение для компьютера может запустить сервер внутри себя; веб-приложение по
адресу app.usectrl.dev не может, потому что вкладка
браузера не способна обслуживать сервер. В любом случае это руководство
направляет клиент на сервер, работающий в другом месте, — небольшую машину,
облачную ВМ, сборочный сервер.
Предварительные требования
Заголовок раздела «Предварительные требования»- Работающий
cc_server. Если его у вас нет, см. Запустить headless-сервер. - Либо три значения для сопряжения, выданные сервером, — URL сервера (
ws://…/rpcилиwss://…/rpc), ID устройства и ключ сопряжения, — либо одноразовый код приглашения от администратора рабочего пространства. Активация приглашения создаёт вашего пользователя, записывает ваше членство и выдаёт учётные данные для этого клиента за вас, поэтому вам никогда не приходится иметь дело с ID устройства или ключом.
Убедитесь, что сервер доступен
Заголовок раздела «Убедитесь, что сервер доступен»Локальному серверу ничего не нужно: ws://localhost:9030/rpc работает и из
приложения для компьютера, и из браузера, потому что браузеры считают локальный
интерфейс доверенным источником.
Сервер на другой машине — другое дело. app.usectrl.dev отдаётся по HTTPS,
поэтому браузер откроет сокет wss:// только с сертификатом, которому он уже
доверяет, — а cc_server в принципе отказывается привязываться к адресу, отличному
от локального, без TLS. Дайте ему одно из:
- сертификат напрямую, с
--tls-certи--tls-key - обратный прокси, терминирующий TLS, перед ним, с сервером, запущенным с
--insecure(открытый текст за прокси, только в доверенной сети) - туннель или VPN, который предоставляет сертификат, — Tailscale, cloudflared и подобные. В разделе Настройки → Сервер → Подключение и состояние есть встроенное включение туннеля в пункте Открыть доступ к серверу.
Две настройки на стороне сервера легко упустить. За прокси, NAT или туннелем
задайте --public-url как адрес, по которому клиенты должны фактически
дозваниваться, — по умолчанию он равен локальной привязке, поэтому без него
клиенты пытаются обратиться не к тому хосту. А если вы размещаете собственную
копию веб-сборки, добавьте её источник в --allowed-origins, который по
умолчанию содержит только https://app.usectrl.dev; локальный интерфейс и
нативные клиенты разрешены всегда.
Подключите приложение для компьютера
Заголовок раздела «Подключите приложение для компьютера»При чистой установке:
- Запустите Control Center. Экран первого запуска спрашивает Как запускать Control Center?
- Вместо Запустить в этом приложении заполните поля подключения: URL сервера, а также либо код приглашения, либо ID устройства и ключ сопряжения.
- Нажмите Подключить. Control Center дозванивается до сервера и открывает входящие рабочего пространства.
На компьютере, который уже запускает собственный сервер:
- Откройте Настройки → Сервер → Подключение и состояние.
- Нажмите Добавить сервер. Введите URL сервера (
wss://host:9030/rpc) и либо код приглашения, либо ID устройства и ключ сопряжения. Кнопка-суффикс в поле URL находит экземплярыcc_serverв вашей локальной сети или tailnet. - Нажмите Подключить, затем Переключить в строке нового сервера.
Переключение происходит на лету: приложение перестраивается вокруг нового сеанса на месте, без перезапуска. Если подключиться не удаётся, вы остаётесь на текущем сервере и видите ошибку. В строке сервера, на котором вы находитесь, нет действия Переключить; локальный сервер — первая строка с меткой Запускать в этом приложении.
После переключения на компьютере нет собственной базы данных. Каждый экран читает и пишет через удалённый сервер по WebSocket.
Подключите веб-клиент
Заголовок раздела «Подключите веб-клиент»Веб-сборка всегда удалённая.
- Откройте app.usectrl.dev или собственную копию веб-сборки.
- Введите URL сервера и либо код приглашения, либо ID устройства и ключ сопряжения.
- Клиент дозванивается до сервера и отрисовывает тот же интерфейс, что и приложение для компьютера.
Если в URL есть глубокая ссылка для сопряжения, поля уже заполнены. Ключ сопряжения едет во фрагменте URL, который браузеры никогда не отправляют серверу, отдающему страницу, поэтому статический хостинг его не видит.
Что браузер не делает
Заголовок раздела «Что браузер не делает»Веб-клиент читает и пишет на тот же сервер, что и приложение для компьютера, но нескольким поверхностям нужно нативное окно или собственные устройства машины:
- нет всплывающих уведомлений ОС, звуков уведомлений и постоянной полосы баннеров (центр уведомлений внутри приложения всё ещё работает)
- нет поиска серверов в локальной сети или tailnet в диалоге Добавить сервер
- нет встроенного средства чтения статей — статьи из ленты новостей открываются в новой вкладке
- нет повторного запуска резюме встречи и отмены того, что уже обрабатывается
Две вещи ведут себя иначе, а не отсутствуют. Запись встречи работает в браузере: захватываются ваш микрофон и демонстрация экрана с аудиодорожкой. Открыть в IDE тоже работает, но просит сервер запустить редактор на экране сервера, поэтому кнопка прячется на headless-хосте без установленных редакторов.
Устранение неполадок
Заголовок раздела «Устранение неполадок»- Время ожидания подключения истекло: сервер должен быть доступен с клиента. Проверьте привязку (
--bind any), что порт открыт и что--public-urlуказывает адрес, по которому клиент действительно может дозвониться. В открытом интернете TLS обязателен — привязка к нелокальному адресу открытым текстом отклоняется при запуске, если только сервер не был запущен с--insecureза прокси. - Браузер отказывается подключаться, а нативный клиент работает: источника браузера нет в списке
--allowed-originsсервера. По умолчанию разрешён толькоhttps://app.usectrl.dev(плюс локальный интерфейс). - Ключ сопряжения отклонён: снова выполните
cc_server pairна сервере, чтобы сменить ключ этого устройства, затем введите новый. Отозванное устройство обнаруживает, что его учётные данные исчезли, и отказывает безопасно; отзыв разрывает активный сеанс в течение секунд. - Не то рабочее пространство: рабочее пространство — часть URL (
/workspaces/:workspaceId/…) и передаётся с каждым вызовом, поэтому переключение рабочего пространства в одном клиенте меняет только ваш собственный вид. Вы можете попасть только в те рабочие пространства, где вы состоите членом, — всё остальное отклоняется с “Not a member of this workspace”. См. Рабочие пространства и изоляция.
Связанные руководства
Заголовок раздела «Связанные руководства»- Запустить headless-сервер
- Привязать устройство: путь через телефонное реле