Подключение к серверу
До этого CLI открывал базу внутри своего процесса. В серверном режиме файлами
базы владеет сервер, а приложения отправляют запросы по TCP.
radixdb-cli не является TCP-оболочкой. В этом упражнении запускается готовая
клиентская программа: писать Rust-код или использовать ORM не требуется.
Используйте ту же рабочую копию исходников и инструменты Linux, что в главе «Начало работы», и два окна терминала в корне репозитория. Пример работает с новой базой, а не с базой сотрудников из предыдущих глав. Не открывайте файлы работающего сервера одновременно локальным CLI.
Сборка программ
Заголовок раздела «Сборка программ»В первом терминале:
cargo build --locked --bin radixdb-server./target/debug/radixdb-server --versionСобирайте клиент и сервер из одной ревизии исходников. У публичного клиентского workspace есть собственный зафиксированный lockfile, поэтому собирайте его без изменения набора зависимостей:
cargo build --locked \ --manifest-path examples/public/rust-client/Cargo.toml \ --bin basicПроверенная база исходников RadixDB 1.2 использует протокол 17. Перед запуском сверьте идентификатор сервера: локальная сборка исходников сейчас сообщает версию приложения 1.1.0, полную ревизию Git и версию протокола.
Запуск локального сервера
Заголовок раздела «Запуск локального сервера»Убедитесь, что порт 15443 свободен:
ss -ltn 'sport = :15443'Под заголовком не должно быть строки слушающего сокета. Если порт занят, выберите другой свободный и замените его в конфигурации и команде клиента; не останавливайте посторонний сервис.
Создайте отдельный временный каталог данных и конфигурацию:
server_dir=$(mktemp -d /tmp/radixdb-server-tutorial.XXXXXX) || exit 1cat > "$server_dir/server.toml" <<EOF[server]bind_ip = "127.0.0.1"port = 15443data_dir = "$server_dir/data"EOF./target/debug/radixdb-server --config "$server_dir/server.toml"Дождитесь radixdb-server listening on 127.0.0.1:15443. Оставьте терминал
работающим. Сообщение подтверждает наличие слушающего сокета, но не успешное
открытие конкретной базы. База открывается, когда её выбирает клиент.
Оставьте этот пример на интерфейсе обратной петли. Поскольку verifier root в
конфигурации отсутствует, сервер допускает root без пароля только на этом
plaintext endpoint обратной петли. Обычные приложения входят как субъекты
каталога с правом CONNECT; администраторы могут настроить пароль root, а для
передачи учётных данных через недоверенную сеть доступен прямой TLS endpoint.
Перед развёртыванием прочитайте главы
«Аутентификация» и
«Управление доступом».
Подключение и запрос
Заголовок раздела «Подключение и запрос»Во втором терминале, из того же корня репозитория:
env -u RADIXDB_PASSWORD RADIXDB_LOGIN=root \ ./examples/public/rust-client/target/debug/basic \ 127.0.0.1:15443 manual_notesКоманда явно исключает случайное наследование постороннего пароля из оболочки.
Пример подключается, проходит аутентификацию, выбирает manual_notes, создаёт
таблицу, вставляет две строки и читает их через курсор. Ожидаемый вывод:
inserted rows: 1last insert id: 1notes: 1 | first note | false 2 | second note | trueВыбор базы создаёт или открывает
<server_dir>/data/databases/manual_notes. При каждом запуске пример удаляет
и заново создаёт rt_client_notes: не направляйте его на базу с важными данными.
Временный каталог отделяет упражнение от остальных баз.
Клиент завершается после закрытия соединения. Сервер продолжает работать: закрытие клиентского соединения и остановка сервера являются разными операциями.
Остановка сервера
Заголовок раздела «Остановка сервера»Вернитесь в первый терминал и нажмите Ctrl+C. Дождитесь
radixdb-server stopped cleanly и приглашения оболочки. Файлы остаются
во временном каталоге. Только после остановки проверьте server_dir и удалите
именно этот каталог, если он больше не нужен. Не удаляйте файлы работающего сервера.
Отказ в подключении обычно означает, что процесс не слушает указанный адрес. Проверьте первый терминал и порт; не меняйте адрес привязки на внешний интерфейс, пытаясь обойти локальную ошибку запуска.
Далее перейдите к клиентским интерфейсам, чтобы выбрать между встраиваемым доступом, TCP-соединением и ORM.