Перейти к основному содержанию Перейти к навигации Перейти к нижнему колонтитулу

Настройка машины

Создание конфигурации, добавление машин, подготовка серверов и настройка инфраструктуры.

Настройка машины

Четыре шага для запуска первой машины: создание конфигурации, регистрация сервера, его подготовка и опциональная настройка инфраструктуры для публичного трафика.

Шаг 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

Эта команда:

  1. Загружает бинарный файл renet на сервер через SFTP
  2. Устанавливает Docker, containerd и cryptsetup (если отсутствуют)
  3. Создает системного пользователя rediacc (UID 7111)
  4. Создает директорию хранилища данных и подготавливает её для зашифрованных репозиториев
ОпцияОбязательноПо умолчаниюОписание
--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>ConfigEmail для TLS-сертификатов Let’s Encrypt (общий для всех машин)
--cf-dns-token <token>ConfigAPI-токен 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

Эта команда:

  1. Разворачивает бинарный файл renet на удалённой машине
  2. Настраивает обратный прокси Traefik, маршрутизатор и службы systemd
  3. Создаёт 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

Эта единственная команда:

  1. Создаёт VM у облачного провайдера через OpenTofu
  2. Ожидает SSH-подключения
  3. Регистрирует машину в вашей конфигурации
  4. Устанавливает renet и все зависимости
  5. Настраивает прокси 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