vm:claudeapi:01-install_docker

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
vm:claudeapi:01-install_docker [2025/11/25 16:27] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1vm:claudeapi:01-install_docker [2025/11/25 16:27] (текущий) – ↷ Имя страницы vm:claudeapi:01-install изменено на vm:claudeapi:01-install_docker admin
Строка 1: Строка 1:
 +====== Установка 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)