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 установлен прямо на сервере (не в контейнере).
Пример: 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.
Когда: 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 ← единственное что нужно на хосте
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 # с любой машины с доступом к серверу
| Хост (прямой) | Контейнер | |
|---|---|---|
~/.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 |
settings.json каждого сервера содержит:
"env": {
"CLAUDE_SERV": "EU", // имя сервера (EU / AIPD / RF / ...)
"CLAUDE_WORKSPACE": "/opt/claude-workspace"
}
CLAUDE_SERV — домен без зоны в верхнем регистре. Задаётся вручную в install.sh или аргументом.
Все файлы стилей, statusline, hooks — хранятся в:
/opt/claude-workspace/.claude/
├── output-styles/
├── statusline-command.sh
├── hooks/
└── commands/
~/.claude/ на любом сервере или в любом контейнере — это деплой из workspace, не источник.
При обновлении стилей: обновить файлы в workspace → запустить install.sh повторно.