🖥️ TrueNAS SCALE AI Workspace
code-server + OmniRoute + Claude Code — полноценное AI-окружение разработчика прямо в браузере, развёрнутое на домашнем сервере TrueNAS SCALE.
📋 Содержание
- О проекте
- Архитектура стека
- Требования
- Подготовка системы
- Развёртывание контейнеров
- Установка Claude Code
- Настройка OmniRoute + Kiro AI
- Решение проблемы Ambiguous model
- Удобные алиасы
- Полезные команды Claude Code
- Устранение неполадок
О проекте
Этот проект предоставляет готовую конфигурацию для развёртывания 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обязательны — без них контейнеры не смогут писать в тома.
# Создание директорий на пуле хранилища
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:
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):
# Установка 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 примените настройки:
source /config/.bashrc
claude # запуск агента
4. Настройка OmniRoute + Kiro AI
-
Откройте OmniRoute Dashboard:
http://<IP_ВАШЕГО_СЕРВЕРА>:20128 -
Перейдите в раздел Providers → добавьте провайдера Kiro AI (тип: Custom OpenAI)
-
Укажите Base URL и API-ключ из вашего кабинета Kiro
-
В настройках провайдера добавьте Model Mapping:
Inbound (что запрашивает Claude) Outbound (имя в Kiro) claude-sonnet-4-6claude-sonnet-4.5claude-haiku-4-5claude-haiku-4.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 — Быстрое (разово, через флаг)
claude --model kr/claude-sonnet-4-6
# или
claude --model kiro/claude-sonnet-4-6
# (используйте тот префикс, который вы задали провайдеру в Dashboard)
Решение B — Постоянное (через Dashboard OmniRoute)
http://<IP>:20128→ Providers → Kiro AI- Раздел Model Mapping → добавить правило (см. таблицу выше)
- Установить Kiro как Default для Claude-моделей
Решение C — Через алиас в .bashrc
echo "alias claude='claude --model kr/claude-sonnet-4.5'" >> /config/.bashrc
source /config/.bashrc
6. Удобные алиасы
Добавьте в терминале VS Code:
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
Использование:
c4s # запустить Claude Sonnet (сложные задачи)
c4h # запустить Claude Haiku (быстрые вопросы)
7. Полезные команды Claude Code
| Команда | Описание |
|---|---|
/init |
Индексация текущего проекта |
/terminal-setup |
Оптимизация горячих клавиш терминала |
/help |
Список всех команд |
Shift+Enter |
Перенос строки в промпте |
Esc |
Прерывание выполнения |
exit |
Выход из агента |
8. Устранение неполадок
Claude не находит API
# Проверьте переменную окружения
echo $ANTHROPIC_BASE_URL
# Должно быть: http://192.168.31.100:20128/v1
# Если пусто — примените профиль
source /config/.bashrc
Проверка логов OmniRoute
# Из Shell TrueNAS
docker logs omniroute -f --tail=50
Или через Dashboard: http://<IP>:20128 → вкладка Logs.
Права доступа к файлам
# Из Shell TrueNAS — сброс прав если что-то пошло не так
chown -R 568:568 /mnt/ssd/apps
chmod -R 775 /mnt/ssd/apps
Переустановка Claude Code
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!