Перейти к содержанию

DevContainer

Hive DevContainer --- универсальная среда разработки для Hive-проектов. Подключается как git-субмодуль и содержит всё необходимое: языки, инструменты, hive-cli и Claude Code.

Зачем

  • Единая среда --- все разработчики работают в одинаковом окружении
  • Мультиязычность --- Python, Go, Node.js, .NET, Rust, Java из коробки
  • hive-cli из исходников --- автоматически собирается из repos/hive-api
  • Claude Code --- AI-ассистент с сохранением контекста между пересборками

Быстрый старт

1. Подключить субмодуль

git submodule add git@lab.xmonetize.net:infrastructure/hive/hive-devcontainer.git .devcontainer
git commit -m "Add hive devcontainer"

2. Открыть в VS Code

++ctrl+shift+p++ > Dev Containers: Reopen in Container

Первая сборка занимает несколько минут (скачивание образов и языковых тулчейнов). Последующие запуски используют кэш.

3. Проверить

hive --help          # Hive CLI
docker --version     # Docker-in-Docker
pack --version       # Cloud Native Buildpacks
claude --version     # Claude Code

CLI

Можно использовать без VS Code:

devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . bash

Что включено

Языки

Язык Версия Источник
Python 3.12 + uv devcontainer feature
Go latest devcontainer feature
Node.js LTS devcontainer feature
.NET 8.0 devcontainer feature
Rust latest devcontainer feature
Java 21 + Maven + Gradle devcontainer feature

Инструменты

Инструмент Версия Назначение
hive CLI из исходников Сборка и деплой сервисов
Docker docker-in-docker Сборка контейнерных образов
pack 0.40.1 Cloud Native Buildpacks
kubectl latest Управление Kubernetes
Helm latest Helm-чарты
Claude Code latest AI-ассистент

VS Code расширения

  • Python + Pylance
  • Go
  • Rust Analyzer
  • C# Dev Kit
  • Java (Red Hat)
  • Kubernetes Tools
  • ESLint
  • Claude Code

hive-cli

Если в проекте есть директория repos/hive-api/, hive-cli автоматически устанавливается из исходников при первом создании контейнера.

hive list              # Список сервисов в репозитории
hive build --all       # Собрать все сервисы
hive test --all        # Протестировать
hive deploy --all      # Задеплоить

При обновлении repos/hive-api пересоберите CLI:

cd repos/hive-api && uv sync

Claude Code: персистентность

Как это работает

~/.claude монтируется как именованный Docker volume:

hive-claude-{имя-workspace}

Примеры:

  • hive-workspace → volume hive-claude-hive-workspace
  • my-project → volume hive-claude-my-project

Это даёт:

  • Персистентность --- данные переживают пересборку контейнера
  • Изоляция --- каждый проект получает отдельный volume, контексты не смешиваются

Что сохраняется

  • Memory (.claude/projects/*/memory/)
  • Project settings (.claude/projects/*/)
  • Global settings (.claude/settings.json)

Бэкап и восстановление

Для дополнительной защиты используйте бэкапы:

# Создать бэкап
claude-backup
# Backup created: .claude-backups/claude-backup-20260325-120000.tar.gz

# Восстановить из последнего бэкапа
claude-restore

# Восстановить из конкретного файла
claude-restore .claude-backups/claude-backup-20260325-120000.tar.gz

Не забудьте

Добавьте .claude-backups/ в .gitignore вашего проекта, чтобы бэкапы не попали в git.

Хранятся последние 5 бэкапов, старые удаляются автоматически.

Обновление DevContainer

git submodule update --remote .devcontainer
git add .devcontainer
git commit -m "Update hive devcontainer"

Затем пересоберите контейнер: ++ctrl+shift+p++ > Dev Containers: Rebuild Container

Данные сохраняются

При пересборке контейнера ~/.claude остаётся на месте благодаря Docker volume.

Структура

.devcontainer/
├── devcontainer.json    # Конфигурация: features, volumes, extensions
├── Dockerfile           # Base image (Ubuntu 24.04) + pack CLI
└── scripts/
    ├── post-create.sh   # Первичная настройка
    ├── post-start.sh    # Проверка при старте
    ├── claude-backup.sh # Бэкап ~/.claude
    └── claude-restore.sh# Восстановление

Кастомизация

DevContainer можно расширять через devcontainer features. Добавьте нужные features в devcontainer.json:

{
  "features": {
    "ghcr.io/devcontainers/features/terraform:1": {},
    "ghcr.io/devcontainers/features/aws-cli:1": {}
  }
}

Для проектных расширений создайте .devcontainer/devcontainer.local.json (добавьте в .gitignore).