library/connectors/site/drupal/ai-proxy/RECIPE.md

Recipe: Drupal 2 → Claude Code Proxy

Подключение Drupal 11 (D2) к Claude Code Proxy для работы AI-модулей
без прямого ключа Anthropic API.


Что это даёт


Прокси — наши постоянные настройки

Параметр Значение
URL прокси http://91.218.142.168:8899
Drupal KEY_ID claude_code_proxy
Drupal KEY_VALUE claude-code-proxy-key
Токен setup.php claude-proxy-setup-2026
Сервис claude-proxy.service на VPS

Быстрый старт (новый сайт)

1. Установить модули

cd ~/site.ru/
/usr/local/bin/php8.4 ~/bin/composer require \
    drupal/ai \
    drupal/ai_provider_anthropic \
    drupal/key

cd public_html
/usr/local/bin/php8.4 ../vendor/bin/drush en ai ai_provider_anthropic key -y
/usr/local/bin/php8.4 ../vendor/bin/drush cr

2. Запустить setup.php

# Скопировать скрипт
cp /opt/claude-workspace/library/connectors/site/drupal/ai-proxy/setup.php \
   ~/site.ru/public_html/setup_ai_proxy.php

Или загрузить через SCP:

sshpass -p 'PASSWORD' scp \
  /opt/claude-workspace/library/connectors/site/drupal/ai-proxy/setup.php \
  user@site.beget.tech:~/site.ru/public_html/setup_ai_proxy.php

Открыть в браузере:

https://site.ru/setup_ai_proxy.php?token=claude-proxy-setup-2026

Ожидаемый вывод:

DB connected: site_db
Current host: (not set)
Config updated: host=http://91.218.142.168:8899, api_key=claude_code_proxy
Key created: claude_code_proxy
Cache cleared: cache_config, cache_default, cache_bootstrap, cache_data
Proxy health: OK (http://91.218.142.168:8899)

SUCCESS
Next: delete this file from the server!

3. Удалить скрипт

rm ~/site.ru/public_html/setup_ai_proxy.php

4. Проверить

curl -X POST http://91.218.142.168:8899/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer claude-code-proxy-key" \
  -d '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"Say OK"}]}'
# → {"choices":[{"message":{"content":"OK"}}]}

Что делает setup.php

  1. Находит settings.php — парсит DB credentials
  2. Обновляет ai_provider_anthropic.settings в таблице config:
    - host = http://91.218.142.168:8899
    - api_key = claude_code_proxy
  3. Создаёт key entity key.key.claude_code_proxy:
    - Provider: config
    - Value: claude-code-proxy-key
  4. Очищает кешcache_config, cache_default, cache_bootstrap, cache_data
  5. Проверяет доступность прокси через /health

Как работает цепочка

Drupal AI модуль
  → openai-php/client
  → POST /chat/completions
  → http://91.218.142.168:8899  (наш прокси)
  → claude-agent-sdk
  → Claude Code CLI (OAuth)
  → Anthropic API
  → ответ назад

Формат запроса: OpenAI (не Anthropic native).
Drupal использует openai-php/client, который посылает POST /chat/completions.


Расположение файлов

Beget-специфика: DocumentRoot = public_html/, .htaccess перенаправляет
запросы в web/ (или в Drupal если webroot = public_html).

Для правильной структуры (по стандарту):

~/site.ru/
├── vendor/
├── composer.json
├── web -> public_html       симлинк
└── public_html/             DocumentRoot
    └── setup_ai_proxy.php   скрипт ЗДЕСЬ

Скрипт кладётся в public_html/ (не в web/), доступен как /setup_ai_proxy.php.


Модули Drupal AI

Модуль Назначение
ai Базовый AI API
ai_provider_anthropic Провайдер Anthropic (использует OpenAI SDK)
key Хранение API ключей
ai_agents AI агенты (опционально)
ai_dashboard Дашборд (опционально)

Диагностика

Симптом Причина Решение
Invalid API Key host не задан в конфиге Запустить setup.php
Connection refused Прокси не запущен systemctl restart claude-proxy на VPS
Нет моделей в списке fetchAvailableModels() → api.anthropic.com (норма) Игнорировать, модели hardcoded
setup.php → 403 Скрипт в неправильном месте Положить в public_html/, не в web/
DB connected но нет config update Таблица config не найдена Drupal не установлен, нет AI модуля

Подключённые сайты

Сайт KEY_ID Дата подключения
feyerverks.ru claude_code_proxy 2026-02-23

Ссылки