# Репозитории

**Репозиторий**, это LUKS-зашифрованный образ диска на удаленном сервере. При монтировании он предоставляет:
- Изолированную файловую систему для данных вашего приложения
- Выделенный Docker-демон (отдельный от Docker хоста)
- Уникальные loopback IP-адреса для каждого сервиса в подсети /26

## Создание репозитория

```bash
rdc repo create --name my-app -m server-1 --size 10G
```

| Опция | Обязательно | Описание |
|-------|-------------|----------|
| `-m, --machine <name>` | Да | Целевая машина, на которой будет создан репозиторий |
| `--size <size>` | Да | Размер зашифрованного образа диска (например, `5G`, `10G`, `50G`) |
| `--skip-router-restart` | No | Skip restarting the route server after the operation |

В выводе будут показаны три автоматически сгенерированных значения:

- **GUID репозитория**, UUID, идентифицирующий зашифрованный образ диска на сервере.
- **Учетные данные**, случайная парольная фраза, используемая для шифрования/дешифрования тома LUKS.
- **Идентификатор сети**, целое число (начинается с 2816, увеличивается на 64), определяющее IP-подсеть для сервисов данного репозитория.

> **Сохраните учетные данные в надежном месте.** Это ключ шифрования вашего репозитория. При утере данные не могут быть восстановлены. Учетные данные хранятся в вашем локальном `config.json`, но не хранятся на сервере.

## Монтирование и размонтирование

Монтирование расшифровывает репозиторий и делает его файловую систему доступной. Размонтирование закрывает зашифрованный том.

```bash
rdc repo mount --name my-app -m server-1  # Расшифровать и смонтировать
rdc repo unmount --name my-app -m server-1  # Размонтировать и зашифровать
```

| Опция | Описание |
|-------|----------|
| `--checkpoint` | Создать контрольную точку CRIU перед монтированием/размонтированием (для контейнеров с меткой `rediacc.checkpoint=true`) |
| `--skip-router-restart` | Skip restarting the route server after the operation |

## Проверка статуса

```bash
rdc repo status --name my-app -m server-1
```

## Список репозиториев

```bash
rdc repo list -m server-1
```

## Изменение размера

Установите точный размер репозитория или увеличьте на заданную величину:

```bash
rdc repo resize --name my-app -m server-1 --size 20G  # Установить точный размер
rdc repo expand --name my-app -m server-1 --size 5G  # Добавить 5G к текущему размеру
```

> Перед изменением размера репозиторий должен быть размонтирован.

## Форк

Создайте копию существующего репозитория в его текущем состоянии:

```bash
rdc repo fork --parent my-app --tag staging -m server-1
```

Форки используют модель name:tag: результирующий форк называется `my-app:staging`. Эта команда создает новую зашифрованную копию с собственным GUID и идентификатором сети, разделяя имя родительского репозитория. Форк использует те же учетные данные LUKS, что и родительский репозиторий.

## Проверка целостности

Проверьте целостность файловой системы репозитория:

```bash
rdc repo validate --name my-app -m server-1
```

## Владение файлами

Установите владение файлами внутри репозитория на универсального пользователя (UID 7111). Обычно это необходимо после загрузки файлов с рабочей станции, которые приходят с вашим локальным UID.

```bash
rdc repo ownership --name my-app -m server-1
```

Команда автоматически обнаруживает директории данных Docker-контейнеров (записываемые bind-маунты) и исключает их. Это предотвращает поломку контейнеров, которые управляют файлами с собственными UID (например, MariaDB=999, www-data=33).

| Опция | Описание |
|-------|----------|
| `--uid <uid>` | Установить пользовательский UID вместо 7111 |
| `--skip-router-restart` | Skip restarting the route server after the operation |

Для принудительного изменения владельца всех файлов, включая данные контейнеров:

```bash
rdc repo ownership --name my-app -m server-1
```


Подробное руководство по использованию ownership при миграции проектов см. в [Руководстве по миграции](/ru/docs/migration).

## Шаблон

Примените шаблон для инициализации репозитория файлами:

```bash
rdc repo template apply --name my-template -m server-1 -r my-app --file ./my-template.tar.gz
```

## Удаление

Безвозвратно уничтожьте репозиторий и все данные внутри него:

```bash
rdc repo delete --name my-app -m server-1
```

> Эта операция безвозвратно уничтожает зашифрованный образ диска. Действие не может быть отменено.