Настройка машины
Четыре шага для запуска первой машины: создание конфигурации, регистрация сервера, его подготовка и опциональная настройка инфраструктуры для публичного трафика.
Шаг 1: Создание конфигурации
Конфигурация, это именованный файл конфигурации, хранящий ваши SSH-учетные данные, определения машин и привязки репозиториев. Воспринимайте его как рабочее пространство проекта.
rdc config init my-infra --ssh-key ~/.ssh/id_ed25519
| Опция | Обязательно | Описание |
|---|---|---|
--ssh-key <path> | Да | Путь к вашему приватному SSH-ключу. Тильда (~) раскрывается автоматически. |
--renet-path <path> | Нет | Пользовательский путь к бинарному файлу renet на удаленных машинах. По умолчанию используется стандартное расположение установки. |
Эта команда создает конфигурацию с именем my-infra и сохраняет её в ~/.config/rediacc/my-infra.json. Конфигурация по умолчанию (без указания имени) хранится как ~/.config/rediacc/rediacc.json.
Вы можете иметь несколько конфигураций (например,
production,staging,dev). Переключайтесь между ними с помощью флага--configв любой команде.
Шаг 2: Добавление машины
Зарегистрируйте ваш удаленный сервер как машину в конфигурации:
rdc machine add server-1 --ip 203.0.113.50 --user deploy
| Опция | Обязательно | По умолчанию | Описание |
|---|---|---|---|
--ip <address> | Да | - | IP-адрес или имя хоста удаленного сервера |
--user <username> | Да | - | Имя пользователя SSH на удаленном сервере |
--port <port> | Нет | 22 | Порт SSH |
--datastore <path> | Нет | /mnt/rediacc | Путь на сервере, где Rediacc хранит зашифрованные репозитории |
После добавления машины rdc автоматически выполняет ssh-keyscan для получения ключей хоста сервера. Вы также можете выполнить это вручную:
rdc machine scan-keys server-1
Для просмотра всех зарегистрированных машин:
rdc machine list
Шаг 3: Настройка машины
Подготовьте удаленный сервер, установив все необходимые зависимости:
rdc machine setup server-1
Эта команда:
- Загружает бинарный файл renet на сервер через SFTP
- Устанавливает Docker, containerd и cryptsetup (если отсутствуют)
- Создает системного пользователя
rediacc(UID 7111) - Создает директорию хранилища данных и подготавливает её для зашифрованных репозиториев
| Опция | Обязательно | По умолчанию | Описание |
|---|---|---|---|
--datastore <path> | Нет | /mnt/rediacc | Директория хранилища данных на сервере |
--datastore-size <size> | Нет | 95% | Какую долю доступного диска выделить для хранилища данных |
--debug | Нет | false | Включить подробный вывод для диагностики |
Настройку нужно выполнить только один раз для каждой машины. Повторный запуск безопасен при необходимости.
Бэкенды хранилища данных
Хранилище данных представляет собой пул хранения для каждой машины, содержащий зашифрованные образы репозиториев. machine setup создаёт локальное хранилище данных по умолчанию: файловую систему BTRFS на loop-устройстве на собственном диске сервера, размер которой задаётся --datastore-size (по умолчанию 95% доступного диска). Это правильный бэкенд почти для любого развёртывания на одной машине, и он не требует ничего, кроме сервера.
Размер хранилища данных
--datastore-size принимает процент (95%) или абсолютный размер (50G, 1T). Хранилище данных можно позже увеличить в режиме онлайн:
rdc datastore resize ds-server-1 --size 200G
Репозитории внутри хранилища данных имеют независимый размер, задаваемый во время repo create, и могут быть расширены во время работы, поэтому не нужно заранее резервировать избыточный объём хранилища данных.
Бэкенд Ceph RBD
Для общего, горизонтально масштабируемого хранения, или для хранения, поддерживающего Kubernetes, инициализируйте хранилище данных на внешнем кластере Ceph. Тогда хранилище данных располагается на RBD-образе (BTRFS поверх него, без слоя LUKS на образ), а форки используют copy-on-write клоны RBD вместо reflink BTRFS.
# 1. Зафиксировать ссылку машины на Ceph (пул + RBD-образ, не секретные данные)
# 2. Инициализировать хранилище данных на бэкенде Ceph
rdc datastore create ds-server-1 -m server-1 --backend ceph --pool rbd --image datastore-server1 --size 100G
Связки ключей Ceph остаются на машинах; файл конфигурации хранит только несекретные ссылки на пул и образ. Ceph также является уровнем хранения, который Kubernetes-кластеры используют через ceph-csi. См. руководство Kubernetes для кластеров и постоянных томов, и Архитектуру для сравнения двух бэкендов.
Управление ключами хоста
Если SSH-ключи хоста сервера изменились (например, после переустановки), обновите сохраненные ключи:
rdc machine scan-keys server-1
Эта команда обновляет поле knownHosts в вашей конфигурации для данной машины.
Проверка SSH-подключения
После добавления машины убедитесь, что она доступна:
rdc term connect server-1 -c "hostname"
Открывает SSH-подключение к машине и выполняет команду. Если всё прошло успешно, ваша конфигурация SSH верна.
Для более подробной диагностики выполните:
rdc doctor
Совет: чтобы проверить SSH-подключение, выполните
rdc term connect <machine> -c "hostname"или используйтеsshнапрямую.
Настройка инфраструктуры
Для машин, которым необходимо обслуживать публичный трафик, настройте параметры инфраструктуры:
Установка инфраструктуры
rdc machine infra set server-1 \
--public-ipv4 203.0.113.50 \
--base-domain example.com \
--cert-email admin@example.com \
--cf-dns-token your-cloudflare-api-token
| Опция | Область | Описание |
|---|---|---|
--public-ipv4 <ip> | Machine | Публичный IPv4 адрес, точки входа прокси создаются только для настроенных семейств адресов |
--public-ipv6 <ip> | Machine | Публичный IPv6 адрес, точки входа прокси создаются только для настроенных семейств адресов |
--base-domain <domain> | Machine | Базовый домен для приложений (например, example.com) |
--cert-email <email> | Config | Email для TLS-сертификатов Let’s Encrypt (общий для всех машин) |
--cf-dns-token <token> | Config | API-токен Cloudflare DNS для ACME DNS-01 проверок (общий для всех машин) |
--tcp-ports <ports> | Machine | Дополнительные TCP-порты для проброса через запятую (например, 25,143,465,587,993) |
--udp-ports <ports> | Machine | Дополнительные UDP-порты для проброса через запятую (например, 53) |
Опции области Machine хранятся для каждой машины. Опции области Config (--cert-email, --cf-dns-token) являются общими для каждой машины в конфигурации. Задайте их один раз, и они применяются повсюду.
Просмотр инфраструктуры
rdc machine infra show server-1
Применение на сервере
Сгенерируйте и разверните конфигурацию обратного прокси Traefik на сервере:
rdc machine infra push server-1
Эта команда:
- Разворачивает бинарный файл renet на удалённой машине
- Настраивает обратный прокси Traefik, маршрутизатор и службы systemd
- Создаёт DNS-записи Cloudflare для поддомена машины (
server-1.example.comи*.server-1.example.com), если задан--cf-dns-token
Шаг DNS выполняется автоматически и идемпотентно: создаёт недостающие записи, обновляет записи с изменёнными IP-адресами и пропускает записи, которые уже корректны. Если токен Cloudflare не настроен, DNS пропускается с предупреждением. Per-repo wildcard DNS records (for auto-routes) are created automatically when you run rdc repo up.
Облачное провизионирование
Вместо ручного создания виртуальных машин вы можете настроить облачного провайдера и позволить rdc автоматически провизионировать машины с помощью OpenTofu.
Предварительные требования
Установите OpenTofu: opentofu.org/docs/intro/install
Убедитесь, что ваша конфигурация SSH имеет зарегистрированный у rdc ключ:
# Читает файл ключа и встраивает содержимое под /credentials/ssh.
rdc config ssh set --key ~/.ssh/id_ed25519
Добавление облачного провайдера
rdc machine provider add my-linode \
--provider linode/linode \
--token $LINODE_API_TOKEN \
--region us-east \
--type g6-standard-2
| Опция | Обязательно | Описание |
|---|---|---|
--provider <source> | Да* | Известный источник провайдера (например, linode/linode, hetznercloud/hcloud) |
--source <source> | Да* | Пользовательский источник провайдера OpenTofu (для неизвестных провайдеров) |
--token <token> | Да | API-токен облачного провайдера |
--region <region> | Нет | Регион по умолчанию для новых машин |
--type <type> | Нет | Тип/размер экземпляра по умолчанию |
--image <image> | Нет | Образ ОС по умолчанию |
--ssh-user <user> | Нет | Имя пользователя SSH (по умолчанию: root) |
* Требуется либо --provider, либо --source. Используйте --provider для известных провайдеров (встроенные значения по умолчанию). Используйте --source с дополнительными флагами --resource, --ipv4-output, --ssh-key-attr для пользовательских провайдеров.
Провизионирование машины
rdc machine provision prod-2 --provider my-linode
Эта единственная команда:
- Создаёт VM у облачного провайдера через OpenTofu
- Ожидает SSH-подключения
- Регистрирует машину в вашей конфигурации
- Устанавливает renet и все зависимости
- Настраивает прокси Traefik и DNS Cloudflare (автоматически определяет базовый домен из соседних машин или явно передайте
--base-domain)
| Опция | Описание |
|---|---|
--provider <name> | Имя облачного провайдера (из add-provider) |
--region <region> | Переопределяет регион провайдера по умолчанию |
--type <type> | Переопределяет тип экземпляра по умолчанию |
--image <image> | Переопределяет образ ОС по умолчанию |
--base-domain <domain> | Базовый домен для инфраструктуры. Автоматически определяется из соседних машин, если не указано |
--no-infra | Полностью пропустить конфигурацию инфраструктуры (прокси + DNS) |
--debug | Показывает подробный вывод провизионирования |
Депровизионирование машины
rdc machine deprovision prod-2
Уничтожает VM через OpenTofu и удаляет её из вашей конфигурации. Требует подтверждения, если не используется --force. Работает только для машин, созданных с помощью machine provision.
Список провайдеров
rdc machine provider list
Установка значений по умолчанию
Установите значения по умолчанию, чтобы не указывать их в каждой команде:
rdc config field set --pointer /defaults/machine --new '"server-1"' # Машина по умолчанию
rdc config set team my-team # Команда по умолчанию для хранилища конфигурации
После установки машины по умолчанию можно опускать -m server-1 в командах:
rdc repo create my-app -m my-server --size 10G
Несколько конфигураций
Управляйте несколькими средами с помощью именованных конфигураций:
# Создание отдельных конфигураций
rdc config init production --ssh-key ~/.ssh/id_prod
rdc config init staging --ssh-key ~/.ssh/id_staging
# Использование определенной конфигурации
rdc repo list -m server-1 --config production
rdc repo list -m staging-1 --config staging
Просмотр всех конфигураций:
rdc config list
Просмотр деталей текущей конфигурации:
rdc config show