Files
code-server/README.md
T
2026-04-19 00:55:59 +03:00

293 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🖥️ TrueNAS SCALE AI Workspace
> **code-server + OmniRoute + Claude Code** — полноценное AI-окружение разработчика прямо в браузере, развёрнутое на домашнем сервере TrueNAS SCALE.
---
## 📋 Содержание
1. [О проекте](#о-проекте)
2. [Архитектура стека](#архитектура-стека)
3. [Требования](#требования)
4. [Подготовка системы](#1-подготовка-системы-shell-truenas)
5. [Развёртывание контейнеров](#2-развёртывание-custom-app--docker-compose)
6. [Установка Claude Code](#3-установка-claude-code)
7. [Настройка OmniRoute + Kiro AI](#4-настройка-omniroute--kiro-ai)
8. [Решение проблемы Ambiguous model](#5-решение-проблемы-ambiguous-model)
9. [Удобные алиасы](#6-удобные-алиасы)
10. [Полезные команды Claude Code](#7-полезные-команды-claude-code)
11. [Устранение неполадок](#8-устранение-неполадок)
---
## О проекте
Этот проект предоставляет готовую конфигурацию для развёртывания AI-окружения на **TrueNAS SCALE 24.x (Electric Eel) и новее**.
**Что получите в итоге:**
- 🌐 VS Code в браузере (code-server) на порту `18443`
- 🔀 Единый API-шлюз OmniRoute для управления ключами на порту `20128`
- 🤖 Claude Code CLI, работающий через локальный прокси (без прямых трат на Anthropic API)
- 💾 Доступ к файлам всех приложений прямо из редактора
---
## Архитектура стека
```
Браузер
code-server (VS Code) :18443
│ терминал
Claude Code CLI
│ ANTHROPIC_BASE_URL
OmniRoute (локальный шлюз) :20128
│ model mapping
Kiro AI / Anthropic API
```
---
## Требования
| Компонент | Версия |
|-----------|--------|
| TrueNAS SCALE | Electric Eel 24.x+ |
| Docker (встроенный) | любая |
| Пул хранилища | `/mnt/ssd` (замените на свой) |
| UID пользователя apps | `568` |
---
## 1. Подготовка системы (Shell TrueNAS)
> ⚠️ **Критично:** Выполняйте из Shell TrueNAS, а не из контейнера. Права `568:568` обязательны — без них контейнеры не смогут писать в тома.
```bash
# Создание директорий на пуле хранилища
mkdir -p /mnt/ssd/apps/vscode/config \
/mnt/ssd/apps/vscode/workspace \
/mnt/ssd/apps/omniroute
# Настройка прав доступа (рекурсивно)
chown -R 568:568 /mnt/ssd/apps
chmod -R 775 /mnt/ssd/apps
```
---
## 2. Развёртывание (Custom App / Docker Compose)
Используйте этот YAML при создании **Custom App** в интерфейсе TrueNAS SCALE:
```yaml
services:
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: code-server
environment:
- PUID=568
- PGID=568
- TZ=Europe/Moscow
- PASSWORD=your_password_here # Пароль для входа в VS Code
volumes:
- /mnt/ssd/apps/vscode/config:/config
- /mnt/ssd/apps/vscode/workspace:/config/workspace
- /mnt/ssd/apps:/mnt/ssd/apps # Доступ к конфигам других приложений
ports:
- 18443:8443
restart: unless-stopped
omniroute:
image: diegosouzapw/omniroute:latest
container_name: omniroute
environment:
- PUID=568
- PGID=568
- PORT=20128
- GEMINI_OAUTH_CLIENT_SECRET=not_used # Заглушка (если не используете Gemini)
- GEMINI_OAUTH_CLIENT_ID=not_used
volumes:
- /mnt/ssd/apps/omniroute:/app/data
ports:
- 20128:20128
restart: unless-stopped
```
---
## 3. Установка Claude Code
> 💡 Используем `docker exec -u 0` для установки от root — это надёжнее, чем sudo внутри контейнера.
Выполните из **Shell TrueNAS** (не из терминала VS Code):
```bash
# Установка Node.js и Claude Code
docker exec -u 0 -it code-server bash -c \
"apt update && apt install -y nodejs npm && npm install -g @anthropic-ai/claude-code"
# Настройка PATH и прокси OmniRoute
docker exec -u 0 -it code-server bash -c \
"echo 'export PATH=\$PATH:/usr/local/bin' >> /config/.bashrc"
docker exec -u 0 -it code-server bash -c \
"echo 'export ANTHROPIC_BASE_URL=\"http://192.168.31.100:20128/v1\"' >> /config/.bashrc"
# Создание системной ссылки (чтобы claude был доступен для всех пользователей)
docker exec -u 0 -it code-server \
ln -s /usr/local/bin/claude /usr/bin/claude
```
Затем в **терминале VS Code** примените настройки:
```bash
source /config/.bashrc
claude # запуск агента
```
---
## 4. Настройка OmniRoute + Kiro AI
1. Откройте **OmniRoute Dashboard**: `http://<IP_ВАШЕГО_СЕРВЕРА>:20128`
2. Перейдите в раздел **Providers** → добавьте провайдера **Kiro AI** (тип: Custom OpenAI)
3. Укажите Base URL и API-ключ из вашего кабинета Kiro
4. В настройках провайдера добавьте **Model Mapping**:
| Inbound (что запрашивает Claude) | Outbound (имя в Kiro) |
|-----------------------------------|-----------------------|
| `claude-sonnet-4-6` | `claude-sonnet-4.5` |
| `claude-haiku-4-5` | `claude-haiku-4.5` |
5. Установите Kiro как **провайдера по умолчанию** для семейства Claude
---
## 5. Решение проблемы "Ambiguous model"
### Симптом
```
API Error: 400 {"error":{"message":"Ambiguous model 'claude-sonnet-4-6'.
Use provider/model prefix (ex: cc/claude-sonnet-4-6 or antigravity/claude-sonnet-4-6)."}}
```
### Причина
OmniRoute видит несколько провайдеров для одной модели и не знает, какой выбрать.
### Решение A — Быстрое (разово, через флаг)
```bash
claude --model kr/claude-sonnet-4-6
# или
claude --model kiro/claude-sonnet-4-6
# (используйте тот префикс, который вы задали провайдеру в Dashboard)
```
### Решение B — Постоянное (через Dashboard OmniRoute)
1. `http://<IP>:20128` → Providers → Kiro AI
2. Раздел **Model Mapping** → добавить правило (см. таблицу выше)
3. Установить Kiro как **Default** для Claude-моделей
### Решение C — Через алиас в `.bashrc`
```bash
echo "alias claude='claude --model kr/claude-sonnet-4.5'" >> /config/.bashrc
source /config/.bashrc
```
---
## 6. Удобные алиасы
Добавьте в терминале VS Code:
```bash
cat >> /config/.bashrc << 'EOF'
# Claude Code — быстрое переключение моделей
alias c4s='claude --model kr/claude-sonnet-4.5' # Мощная модель (Sonnet)
alias c4h='claude --model kr/claude-haiku-4.5' # Быстрая модель (Haiku)
alias c='claude --model kr/claude-sonnet-4.5' # Краткий алиас
EOF
source /config/.bashrc
```
**Использование:**
```bash
c4s # запустить Claude Sonnet (сложные задачи)
c4h # запустить Claude Haiku (быстрые вопросы)
```
---
## 7. Полезные команды Claude Code
| Команда | Описание |
|---------|----------|
| `/init` | Индексация текущего проекта |
| `/terminal-setup` | Оптимизация горячих клавиш терминала |
| `/help` | Список всех команд |
| `Shift+Enter` | Перенос строки в промпте |
| `Esc` | Прерывание выполнения |
| `exit` | Выход из агента |
---
## 8. Устранение неполадок
### Claude не находит API
```bash
# Проверьте переменную окружения
echo $ANTHROPIC_BASE_URL
# Должно быть: http://192.168.31.100:20128/v1
# Если пусто — примените профиль
source /config/.bashrc
```
### Проверка логов OmniRoute
```bash
# Из Shell TrueNAS
docker logs omniroute -f --tail=50
```
Или через Dashboard: `http://<IP>:20128` → вкладка **Logs**.
### Права доступа к файлам
```bash
# Из Shell TrueNAS — сброс прав если что-то пошло не так
chown -R 568:568 /mnt/ssd/apps
chmod -R 775 /mnt/ssd/apps
```
### Переустановка Claude Code
```bash
docker exec -u 0 -it code-server bash -c \
"npm uninstall -g @anthropic-ai/claude-code && npm install -g @anthropic-ai/claude-code"
```
---
## Авторы
Проект подготовлен **Анатолием** на основе реального опыта развёртывания.
Публикуется для сообщества разработчиков на TrueNAS SCALE.
---
> 💬 Нашли ошибку или есть улучшение? Открывайте Issue или Pull Request!