# Устранение неполадок

Распространённые проблемы и их решения. В случае сомнений начните с `rdc doctor`, чтобы выполнить комплексную диагностику.

## Ошибка подключения SSH

- Убедитесь, что можете подключиться вручную: `ssh -i ~/.ssh/id_ed25519 deploy@203.0.113.50`
- Выполните `rdc config machine scan-keys server-1` для обновления ключей хоста
- Проверьте соответствие порта SSH: `--port 22`
- Проверьте простой командой: `rdc term connect -m server-1 -c "hostname"`

## Несоответствие ключа хоста

Если сервер был переустановлен или его SSH-ключи изменились, вы увидите "host key verification failed":

```bash
rdc config machine scan-keys -m server-1
```

Эта команда получает новые ключи хоста и обновляет вашу конфигурацию.

## Ошибка настройки машины

- Убедитесь, что SSH-пользователь имеет доступ sudo без пароля, или настройте `NOPASSWD` для необходимых команд
- Проверьте доступное дисковое пространство на сервере
- Запустите с `--debug` для подробного вывода: `rdc config machine setup server-1 --debug`

## Ошибка создания репозитория

- Убедитесь, что настройка завершена: директория хранилища данных должна существовать
- Проверьте дисковое пространство на сервере
- Убедитесь, что бинарный файл renet установлен (при необходимости повторите настройку)

## Сервисы не запускаются

- Проверьте синтаксис Rediaccfile: он должен быть корректным Bash
- Убедитесь, что ваш Rediaccfile использует `renet compose --` (а не `docker compose`)
- Проверьте доступность Docker-образов (рассмотрите `renet compose -- pull` в `up()`)
- Просмотрите логи контейнеров через Docker-сокет репозитория:

```bash
rdc term connect -m server-1 -r my-app -c "docker logs <container-name>"
```

Или просмотрите все контейнеры:

```bash
rdc machine containers server-1
```

## Ошибки отказа в доступе

- Операции с репозиториями требуют root-доступа на сервере (renet запускается через `sudo`)
- Убедитесь, что ваш SSH-пользователь состоит в группе `sudo`
- Проверьте правильность прав доступа к директории хранилища данных

## Проблемы с Docker-сокетом

У каждого репозитория свой собственный Docker daemon. При ручном выполнении Docker-команд необходимо указать правильный сокет:

```bash
# С помощью rdc term (настроено автоматически):
rdc term connect -m server-1 -r my-app -c "docker ps"

# Или вручную с указанием сокета:
docker -H unix:///var/run/rediacc/docker-2816.sock ps
```

Замените `2816` на идентификатор сети вашего репозитория (можно найти в `rediacc.json` или через `rdc repo status`).

## Контейнеры созданы на неправильном Docker daemon

Если ваши контейнеры появляются на Docker daemon хост-системы вместо изолированного daemon репозитория, наиболее распространённая причина, использование `sudo docker` внутри Rediaccfile.

`sudo` сбрасывает переменные окружения, поэтому `DOCKER_HOST` теряется и Docker использует системный сокет (`/var/run/docker.sock`) по умолчанию. Rediacc блокирует это автоматически, но если вы столкнулись с этой проблемой:

- **Используйте `docker` напрямую**, функции Rediaccfile уже выполняются с достаточными привилегиями
- Если необходимо использовать sudo, используйте `sudo -E docker` для сохранения переменных окружения
- Проверьте ваш Rediaccfile на наличие команд `sudo docker` и удалите `sudo`

## Терминал не работает

Если `rdc term` не может открыть окно терминала:

- Используйте встроенный режим с `-c` для прямого выполнения команд:
  ```bash
  rdc term connect -m server-1 -c "ls -la"
  ```
- Принудительно используйте внешний терминал с `--external`, если встроенный режим вызывает проблемы
- На Linux убедитесь, что установлен `gnome-terminal`, `xterm` или другой эмулятор терминала

## Запуск диагностики

```bash
rdc doctor
```

Эта команда проверяет вашу среду, установку renet, конфигурацию и статус аутентификации. Каждая проверка сообщает OK, Warning или Error с кратким пояснением.