architect/standards/arch-claude-install.md

type: standard
layer: arch
object: claude
aspect: install
form: text
title: "Стандарт установки Claude Code на сервере"
status: active
version: 1.0.0
date: 2026-04-20
knowledge_level: У1
parent: arch-infra-structure.md


Стандарт установки Claude Code

Два режима установки — прямой (на хост) и контейнерный. Алгоритм зависит от режима.


1. РЕЖИМ: Claude на хосте напрямую

Когда: Claude Code установлен прямо на сервере (не в контейнере).
Пример: EU сервер (91.218.142.168)

Что ставим

~/.claude/
├── output-styles/       ← стили ответов (копия из workspace/.claude/output-styles/)
├── settings.json        ← полный конфиг (SERV, outputStyle, permissions, statusLine)
└── statusline-command.sh

Как ставим

bash /opt/claude-workspace/install.sh EU

install.sh идемпотентен — безопасно запускать повторно при обновлении стилей.

Как запускаем

bash /opt/claude-workspace/start.sh

start.sh запускается из корня workspace → cd $WORKSPACE → меню Claude.


2. РЕЖИМ: Claude в Docker-контейнере

Когда: Claude Code запущен внутри контейнера.
Пример: AI сервер (155.212.142.142), контейнер claude

Что ставим

Внутри контейнера — всё то же самое что в режиме 1:

~/.claude/               ← named volume (персистентен между рестартами)
├── output-styles/       ← стили (копируются install.sh при первом старте)
├── settings.json        ← полный конфиг
└── statusline-command.sh

На хосте — только лончер:

/usr/local/bin/start     ← единственное что нужно на хосте

docker-compose: обязательные монты

volumes:
  - claude-auth:/root/.claude/          # персистентный volume для credentials
  - /opt/claude-workspace:/opt/claude-workspace:rw  # workspace — один путь везде

working_dir: /opt/claude-workspace

entrypoint: >
  bash -c "
    if [ ! -f /root/.claude/.platform-installed ]; then
      bash /opt/claude-workspace/install.sh AIPD;
    fi;
    exec sleep infinity
  "

Правило: workspace монтируется по одному пути и на хосте и в контейнере (/opt/claude-workspace). Это позволяет install.sh и start.sh работать без изменений в обоих окружениях.

Лончер на хосте

# /usr/local/bin/start
#!/bin/bash
ssh -t root@<IP> "docker exec -it claude bash -c 'cd /opt/claude-workspace && bash start.sh'"

Или если запускается прямо на хосте сервера:

# /usr/local/bin/start
#!/bin/bash
docker exec -it claude bash -c 'cd /opt/claude-workspace && bash start.sh'

Как запускаем

start          # с любой машины с доступом к серверу

3. СРАВНЕНИЕ РЕЖИМОВ

Хост (прямой) Контейнер
~/.claude/ на хосте /root/.claude/ named volume внутри контейнера
output-styles/ копия в ~/.claude/ копия в volume (при первом старте)
settings.json на хосте в volume
install.sh bash install.sh SERV вручную автоматически при первом старте контейнера
запуск меню bash start.sh start (лончер на хосте)
что на хосте всё только /usr/local/bin/start

4. ПЕРЕМЕННЫЕ

settings.json каждого сервера содержит:

"env": {
  "CLAUDE_SERV": "EU",           // имя сервера (EU / AIPD / RF / ...)
  "CLAUDE_WORKSPACE": "/opt/claude-workspace"
}

CLAUDE_SERV — домен без зоны в верхнем регистре. Задаётся вручную в install.sh или аргументом.


5. ИСТОЧНИК ПРАВДЫ

Все файлы стилей, statusline, hooks — хранятся в:

/opt/claude-workspace/.claude/
├── output-styles/
├── statusline-command.sh
├── hooks/
└── commands/

~/.claude/ на любом сервере или в любом контейнере — это деплой из workspace, не источник.
При обновлении стилей: обновить файлы в workspace → запустить install.sh повторно.


СВЯЗАННЫЕ ДОКУМЕНТЫ