Показать страницуИстория страницыСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Установка Claude API в Docker с Nginx Proxy Manager ====== ===== Содержание ===== * [[#Создание структуры директорий]] * [[#Создание необходимых файлов]] * [[#Настройка аутентификации Claude]] * [[#Сборка и запуск]] * [[#Тестирование]] * [[#Управление контейнером]] * [[#Troubleshooting]] * [[#Мониторинг и безопасность]] * [[#Быстрая справка команд]] ---- ===== 1. Создание структуры директорий ===== <code bash> # Создать основную директорию sudo mkdir -p /opt/claudeapi # Создать поддиректории sudo mkdir -p /opt/claudeapi/{app,logs,data,credentials,scripts} # Установить права доступа sudo chown -R $USER:$USER /opt/claudeapi chmod -R 755 /opt/claudeapi </code> Итоговая структура директорий: <code> /opt/claudeapi/ ├── app/ # Исходный код приложения ├── logs/ # Логи контейнера ├── data/ # Данные приложения ├── credentials/ # Credentials для Claude CLI ├── scripts/ # Вспомогательные скрипты ├── .env # Переменные окружения ├── Dockerfile # Образ Docker └── docker-compose.yml # Конфигурация compose </code> ---- ===== 2. Создание необходимых файлов ===== ==== 2.1 Клонирование репозитория ==== <code bash> cd /opt/claudeapi git clone https://github.com/vlad29042/claude-api-minimal.git app/ </code> Если git не установлен: ''sudo apt install git'' ==== 2.2 Создание Dockerfile ==== **Шаг 1: Откройте редактор nano** <code bash> nano /opt/claudeapi/Dockerfile </code> **Шаг 2: Скопируйте содержимое** Для вставки в nano используйте ''Ctrl+Shift+V'' или правую кнопку мыши <code dockerfile> FROM python:3.11-slim # Установка системных зависимостей RUN apt-get update && apt-get install -y \ curl \ git \ nodejs \ npm \ && rm -rf /var/lib/apt/lists/* # Установка Claude CLI RUN npm install -g @anthropic-ai/claude-code # Создание рабочей директории WORKDIR /app # Копирование requirements COPY app/requirements.txt . # Установка Python зависимостей RUN pip install --no-cache-dir -r requirements.txt # Копирование приложения COPY app/ . # Создание директории для credentials RUN mkdir -p /root/.claude # Открытие порта EXPOSE 8001 # Healthcheck HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8001/health || exit 1 # Запуск приложения CMD ["python3", "minimal_server.py"] </code> **Шаг 3: Сохраните файл** * Нажмите ''Ctrl+O'' (WriteOut) * Нажмите ''Enter'' для подтверждения * Нажмите ''Ctrl+X'' для выхода из nano ==== 2.3 Создание docker-compose.yml ==== **Шаг 1: Откройте редактор** <code bash> nano /opt/claudeapi/docker-compose.yml </code> **Шаг 2: Вставьте содержимое** **ВАЖНО:** Имя контейнера ''claudeapi'', используется сеть ''webproxy'' <code yaml> version: '3.8' services: claude-api: build: . container_name: claudeapi restart: unless-stopped # Порт НЕ пробрасывается наружу - доступ только через NPM expose: - "8001" environment: - PORT=8001 - HOST=0.0.0.0 - CLAUDE_TIMEOUT_SECONDS=300 - CLAUDE_MAX_TURNS=50 env_file: - .env volumes: - ./logs:/app/logs - ./data:/app/data - ./credentials:/root/.claude:rw networks: - webproxy logging: driver: "json-file" options: max-size: "10m" max-file: "3" networks: webproxy: external: true </code> **Шаг 3: Сохраните файл** (''Ctrl+O'', ''Enter'', ''Ctrl+X'') ==== 2.4 Создание .env файла ==== **Шаг 1: Сгенерируйте безопасный API ключ** <code bash> # Вариант 1: через openssl openssl rand -hex 32 # Вариант 2: через Python python3 -c "import secrets; print(secrets.token_urlsafe(32))" </code> Скопируйте полученный ключ. **Шаг 2: Создайте файл .env** <code bash> nano /opt/claudeapi/.env </code> **Шаг 3: Вставьте конфигурацию** <code bash> # API ключ для HTTP запросов (используйте сгенерированный ключ!) CLAUDE_API_KEY=ВСТАВЬТЕ_ВАШ_СГЕНЕРИРОВАННЫЙ_КЛЮЧ_СЮДА # Anthropic API Key (если используете API вместо локальной подписки) # ANTHROPIC_API_KEY=sk-ant-your-anthropic-api-key-here # Настройки сервера PORT=8001 HOST=0.0.0.0 # Настройки Claude CLAUDE_TIMEOUT_SECONDS=300 CLAUDE_MAX_TURNS=50 # Режим работы ENVIRONMENT=production # Логирование LOG_LEVEL=INFO </code> **Шаг 4: Сохраните файл** (''Ctrl+O'', ''Enter'', ''Ctrl+X'') **Шаг 5: Установите правильные права доступа** <code bash> chmod 600 /opt/claudeapi/.env </code> **КРИТИЧЕСКИ ВАЖНО:** Замените ''ВСТАВЬТЕ_ВАШ_СГЕНЕРИРОВАННЫЙ_КЛЮЧ_СЮДА'' на реальный сгенерированный ключ! ==== 2.5 Создание скрипта управления с меню ==== **Создайте единый скрипт управления:** <code bash> nano /opt/claudeapi/scripts/manage.sh </code> **Вставьте содержимое:** <code bash> #!/bin/bash # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Директория проекта PROJECT_DIR="/opt/claudeapi" # Функция отображения меню show_menu() { clear echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} Claude API - Управление контейнером${NC}" echo -e "${BLUE}========================================${NC}" echo "" echo -e "${GREEN}1.${NC} Запустить контейнер" echo -e "${GREEN}2.${NC} Остановить контейнер" echo -e "${GREEN}3.${NC} Перезапустить контейнер" echo -e "${GREEN}4.${NC} Просмотр логов" echo -e "${GREEN}5.${NC} Статус контейнера" echo -e "${GREEN}6.${NC} Пересборка контейнера" echo -e "${GREEN}7.${NC} Проверка здоровья (Health Check)" echo -e "${GREEN}8.${NC} Мониторинг ресурсов" echo -e "${RED}0.${NC} Выход" echo "" echo -e "${BLUE}========================================${NC}" } # Функция запуска контейнера start_container() { echo -e "${YELLOW}Запуск контейнера...${NC}" cd "$PROJECT_DIR" docker compose up -d if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Контейнер успешно запущен${NC}" else echo -e "${RED}✗ Ошибка запуска контейнера${NC}" fi read -p "Нажмите Enter для продолжения..." } # Функция остановки контейнера stop_container() { echo -e "${YELLOW}Остановка контейнера...${NC}" cd "$PROJECT_DIR" docker compose down if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Контейнер успешно остановлен${NC}" else echo -e "${RED}✗ Ошибка остановки контейнера${NC}" fi read -p "Нажмите Enter для продолжения..." } # Функция перезапуска контейнера restart_container() { echo -e "${YELLOW}Перезапуск контейнера...${NC}" cd "$PROJECT_DIR" docker compose restart if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Контейнер успешно перезапущен${NC}" else echo -e "${RED}✗ Ошибка перезапуска контейнера${NC}" fi read -p "Нажмите Enter для продолжения..." } # Функция просмотра логов view_logs() { echo -e "${YELLOW}Просмотр логов (Ctrl+C для выхода)...${NC}" sleep 2 cd "$PROJECT_DIR" docker compose logs -f --tail=100 } # Функция проверки статуса check_status() { echo -e "${YELLOW}Статус контейнера:${NC}" cd "$PROJECT_DIR" docker compose ps echo "" read -p "Нажмите Enter для продолжения..." } # Функция пересборки контейнера rebuild_container() { echo -e "${RED}Пересборка контейнера (это займёт несколько минут)...${NC}" read -p "Вы уверены? (y/N): " confirm if [[ $confirm == [yY] ]]; then cd "$PROJECT_DIR" echo -e "${YELLOW}Остановка контейнера...${NC}" docker compose down echo -e "${YELLOW}Пересборка образа...${NC}" docker compose build --no-cache echo -e "${YELLOW}Запуск контейнера...${NC}" docker compose up -d if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Контейнер успешно пересобран и запущен${NC}" else echo -e "${RED}✗ Ошибка пересборки контейнера${NC}" fi else echo -e "${YELLOW}Пересборка отменена${NC}" fi read -p "Нажмите Enter для продолжения..." } # Функция проверки здоровья health_check() { echo -e "${YELLOW}Проверка здоровья API...${NC}" echo "" # Проверка через docker echo -e "${BLUE}1. Проверка через Docker:${NC}" docker exec claudeapi curl -s http://localhost:8001/health | jq . 2>/dev/null || \ docker exec claudeapi curl -s http://localhost:8001/health echo "" # Проверка через внешний URL echo -e "${BLUE}2. Проверка через внешний URL:${NC}" curl -s https://claudeapi.digitizepro.tech/health | jq . 2>/dev/null || \ curl -s https://claudeapi.digitizepro.tech/health echo "" read -p "Нажмите Enter для продолжения..." } # Функция мониторинга ресурсов monitor_resources() { echo -e "${YELLOW}Мониторинг ресурсов (Ctrl+C для выхода)...${NC}" echo "" sleep 2 docker stats claudeapi } # Основной цикл while true; do show_menu read -p "Выберите действие: " choice case $choice in 1) start_container ;; 2) stop_container ;; 3) restart_container ;; 4) view_logs ;; 5) check_status ;; 6) rebuild_container ;; 7) health_check ;; 8) monitor_resources ;; 0) echo -e "${GREEN}Выход...${NC}" exit 0 ;; *) echo -e "${RED}Неверный выбор. Попробуйте снова.${NC}" sleep 2 ;; esac done </code> **Сохраните файл** (''Ctrl+O'', ''Enter'', ''Ctrl+X'') **Сделайте скрипт исполняемым:** <code bash> chmod +x /opt/claudeapi/scripts/manage.sh </code> **Запуск скрипта управления:** <code bash> /opt/claudeapi/scripts/manage.sh </code> Или создайте алиас для удобства: <code bash> echo "alias claude-manage='/opt/claudeapi/scripts/manage.sh'" >> ~/.bashrc source ~/.bashrc # Теперь можно запускать просто: claude-manage </code> ---- ===== 3. Настройка аутентификации Claude ===== У вас есть **три варианта** аутентификации: ==== Вариант A: Anthropic API Key (рекомендуется) ==== - Зарегистрируйтесь на https://console.anthropic.com/ - Создайте новый API ключ - Откройте файл .env: <code bash> nano /opt/claudeapi/.env </code> - Раскомментируйте и добавьте ваш ключ: <code bash> ANTHROPIC_API_KEY=sk-ant-ваш-ключ-здесь </code> - Сохраните файл (''Ctrl+O'', ''Enter'', ''Ctrl+X'') ==== Вариант B: Локальная подписка (бесплатно) ==== **Шаг 1: Установите Claude CLI на хосте** <code bash> npm install -g @anthropic-ai/claude-code </code> **Шаг 2: Авторизуйтесь** <code bash> claude </code> В интерактивном режиме выполните: <code> /login </code> Следуйте инструкциям в браузере для входа. **Шаг 3: Скопируйте credentials** <code bash> # Проверьте наличие файла ls -la ~/.claude/.credentials.json # Скопируйте его в директорию контейнера cp ~/.claude/.credentials.json /opt/claudeapi/credentials/ # Установите правильные права chmod 600 /opt/claudeapi/credentials/.credentials.json </code> ==== Вариант C: Аутентификация внутри контейнера ==== После запуска контейнера: <code bash> docker exec -it claudeapi bash claude </code> Внутри Claude CLI выполните ''/login'' и следуйте инструкциям. ---- ===== 4. Сборка и запуск ===== ==== 4.1 Проверка конфигурации ==== <code bash> cd /opt/claudeapi docker compose config </code> Эта команда проверит правильность вашего docker-compose.yml ==== 4.2 Сборка образа ==== <code bash> docker compose build </code> Примечание: Первая сборка может занять 5-10 минут ==== 4.3 Запуск контейнера ==== <code bash> docker compose up -d </code> Флаг ''-d'' запускает контейнер в фоновом режиме (detached). ==== 4.4 Проверка статуса ==== <code bash> docker compose ps </code> Ожидаемый вывод: <code> Name Command State Ports -------------------------------------------------------- claudeapi python3 minimal_se... Up 8001/tcp </code> ==== 4.5 Просмотр логов ==== <code bash> docker compose logs -f </code> Для выхода из просмотра логов нажмите ''Ctrl+C'' ---- ===== 5. Тестирование ===== ==== 5.1 Health Check ==== **Локальный (внутри Docker):** <code bash> docker exec claudeapi curl http://localhost:8001/health </code> **Через Nginx Proxy Manager:** <code bash> curl https://claudeapi.digitizepro.tech/health </code> ==== 5.2 Получение API ключа ==== <code bash> API_KEY=$(grep CLAUDE_API_KEY /opt/claudeapi/.env | cut -d'=' -f2) echo "Ваш API ключ: $API_KEY" </code> ==== 5.3 Тестовый запрос ==== <code bash> curl -X POST https://claudeapi.digitizepro.tech/api/v1/chat \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Привет! Напиши простой Hello World на Java", "user_id": 1 }' </code> Ожидаемый ответ: <code json> { "content": "public class HelloWorld {\n public static void main(String[] args) {\n System.out.println(\"Hello, World!\");\n }\n}", "session_id": "abc-123-xyz", "cost": 0.001, "duration_ms": 1500 } </code> ==== 5.4 Тест продолжения сессии ==== <code bash> # Используйте session_id из предыдущего ответа SESSION_ID="abc-123-xyz" curl -X POST https://claudeapi.digitizepro.tech/api/v1/chat \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"prompt\": \"Добавь комментарии к этому коду\", \"session_id\": \"$SESSION_ID\", \"user_id\": 1 }" </code> ==== 5.5 Красивый вывод с jq ==== Установите jq для форматированного JSON: <code bash> sudo apt install jq </code> Используйте с curl: <code bash> curl -X POST https://claudeapi.digitizepro.tech/api/v1/chat \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt": "Тест", "user_id": 1}' | jq . </code> ---- ===== 5. Управление контейнером ===== ==== 6.1 Использование скрипта управления ==== Запустите интерактивное меню управления: <code bash> /opt/claudeapi/scripts/manage.sh # или если создали алиас: claude-manage </code> Меню предоставляет следующие опции: * **1** - Запустить контейнер * **2** - Остановить контейнер * **3** - Перезапустить контейнер * **4** - Просмотр логов * **5** - Статус контейнера * **6** - Пересборка контейнера * **7** - Проверка здоровья (Health Check) * **8** - Мониторинг ресурсов * **0** - Выход ==== 6.2 Команды Docker Compose (ручное управление) ==== Если предпочитаете использовать команды напрямую: <code bash> # Перейти в директорию проекта cd /opt/claudeapi # Запустить контейнер docker compose up -d # Остановить контейнер docker compose down # Перезапустить контейнер docker compose restart # Просмотр логов в реальном времени docker compose logs -f # Просмотр последних 50 строк логов docker compose logs --tail=50 # Просмотр статуса docker compose ps # Войти в контейнер docker exec -it claudeapi bash # Удалить контейнер с volumes docker compose down -v </code> ===== 7. Мониторинг и безопасность ===== ==== 7.1 Скрипт мониторинга ==== <code bash> nano /opt/claudeapi/scripts/monitor.sh </code> <code bash> #!/bin/bash echo "=== Claude API Monitoring ===" echo "" echo "Container Status:" docker ps --filter name=claudeapi --format "table {{.Names}}\t{{.Status}}\t{{.Size}}" echo "" echo "Health Check:" curl -s https://claudeapi.digitizepro.tech/health | jq . echo "" echo "Resource Usage:" docker stats claudeapi --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" echo "" echo "Recent Logs (last 20 lines):" docker logs claudeapi --tail 20 </code> <code bash> chmod +x /opt/claudeapi/scripts/monitor.sh </code> **Запуск:** <code bash> /opt/claudeapi/scripts/monitor.sh </code> ==== 7.2 Создание backup ==== <code bash> nano /opt/claudeapi/scripts/backup.sh </code> <code bash> #!/bin/bash BACKUP_DIR="/opt/backups/claude-api" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p "$BACKUP_DIR" tar -czf "$BACKUP_DIR/claude-api-$DATE.tar.gz" \ -C /opt/claudeapi \ .env \ docker-compose.yml \ Dockerfile \ credentials/ \ data/ echo "Backup created: $BACKUP_DIR/claude-api-$DATE.tar.gz" # Удалить старые backup (старше 30 дней) find "$BACKUP_DIR" -name "claude-api-*.tar.gz" -mtime +30 -delete </code> <code bash> chmod +x /opt/claudeapi/scripts/backup.sh </code> **Автоматический backup (cron):** <code bash> crontab -e # Добавьте строку: 0 3 * * * /opt/claudeapi/scripts/backup.sh </code> ==== 7.3 Рекомендации по безопасности ==== * ✅ Используйте сложный API ключ (32+ символов) * ✅ Ограничьте доступ по IP в NPM (если возможно) * ✅ Регулярно обновляйте Docker образ * ✅ Создавайте backup конфигурации * ✅ Мониторьте логи на подозрительную активность * ✅ Используйте HTTPS (через NPM) * ✅ Ограничьте права доступа к файлам ---- ===== 7. Быстрая справка команд ===== ==== Интерактивное меню ==== <code bash> # Запуск меню управления /opt/claudeapi/scripts/manage.sh # Или через алиас claude-manage </code> ==== Основные команды Docker Compose ==== <code bash> # Перейти в директорию cd /opt/claudeapi # Запуск docker compose up -d # Остановка docker compose down # Перезапуск docker compose restart # Логи docker compose logs -f # Статус docker compose ps # Вход в контейнер docker exec -it claudeapi bash # Health check curl https://claudeapi.digitizepro.tech/health # Пересборка docker compose build --no-cache && docker compose up -d </code> ==== Полезные алиасы для ~/.bashrc ==== <code bash> nano ~/.bashrc </code> Добавьте в конец файла: <code bash> # Claude API shortcuts alias claude-manage='/opt/claudeapi/scripts/manage.sh' alias claude-start='cd /opt/claudeapi && docker compose up -d' alias claude-stop='cd /opt/claudeapi && docker compose down' alias claude-restart='cd /opt/claudeapi && docker compose restart' alias claude-logs='cd /opt/claudeapi && docker compose logs -f' alias claude-status='cd /opt/claudeapi && docker compose ps' </code> Применить изменения: <code bash> source ~/.bashrc </code> Теперь можно использовать: <code bash> claude-manage # Интерактивное меню claude-start # Быстрый запуск claude-logs # Просмотр логов claude-status # Проверка статуса </code> ---- ===== 8. Примеры интеграции ===== ==== Python ==== <code python> import requests API_URL = "https://claudeapi.digitizepro.tech/api/v1/chat" API_KEY = "your-api-key-here" def ask_claude(prompt, session_id=None): headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } data = {"prompt": prompt, "user_id": 1} if session_id: data["session_id"] = session_id response = requests.post(API_URL, headers=headers, json=data) return response.json() # Использование result = ask_claude("Напиши Hello World на Java") print(result['content']) </code> ==== Java ==== <code java> import java.net.http.*; import java.net.URI; public class ClaudeClient { private static final String API_URL = "https://claudeapi.digitizepro.tech/api/v1/chat"; private static final String API_KEY = "your-api-key-here"; public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); String json = "{\"prompt\":\"Hello\",\"user_id\":1}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(API_URL)) .header("Authorization", "Bearer " + API_KEY) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString() ); System.out.println(response.body()); } } </code> ==== Bash ==== <code bash> #!/bin/bash API_URL="https://claudeapi.digitizepro.tech/api/v1/chat" API_KEY="your-api-key-here" curl -X POST "$API_URL" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt": "Привет!", "user_id": 1}' | jq . </code> ---- ===== Заключение ===== Теперь у вас есть полностью работающий Claude API: ✅ Доступен по адресу: ''https://claudeapi.digitizepro.tech'' \\ ✅ Защищён SSL сертификатом \\ ✅ Интегрирован с Nginx Proxy Manager \\ ✅ Работает в Docker контейнере \\ ✅ Имеет автозапуск при загрузке системы \\ ✅ Настроен мониторинг и backup ==== Что дальше? ==== - Интегрируйте API в свои приложения - Настройте регулярный backup - Мониторьте использование ресурсов - Экспериментируйте с промптами ==== Полезные ссылки ==== * GitHub проекта: https://github.com/vlad29042/claude-api-minimal * Документация Claude: https://docs.anthropic.com/ * Nginx Proxy Manager: https://nginxproxymanager.com/ ---- **Автор:** Подготовлено для Nick \\ **Дата:** Ноябрь 2024 \\ **Версия:** 1.0 (Docker + NPM + webproxy) vm/claudeapi/01-install_docker.txt Последнее изменение: 2025/11/25 16:27 — admin