HomeLab

Отчёт по итогам первого дня проекта **homelab.kobelkov.ru**

Отчёт по итогам первого дня проекта **homelab.kobelkov.ru**

Схема: контуры сайта

Content (.md) -> Python render -> HTML
        |               |
        |               +--> indexes/feed/sitemap
        +--> git commit -> publish.sh

Что сделали

  • Развернули виртуальную машину homelab-web в гипервизоре Proxmox.
  • Установили и запустили веб-сервер nginx с поддержкой HTTPS.
  • Привязали к серверу домен homelab.kobelkov.ru и получили сертификат TLS.
  • Сформировали базовый каркас сайта (структура каталогов, шаблоны страниц).
  • Инициализировали репозиторий Git и скрипт publish.sh для автоматической публикации контента.
  • Установили и выполнили проверку работоспособности Claude Code.
  • Выявили ограничения бесплатного тарифа Claude Code (лимит токенов, отсутствие доступа к определённым моделям).
  • Приняли решение о переходе на архитектуру OpenRouter с собственным AI‑агентом.
  • Реализовали AI‑агент на Node.js, интегрированный с OpenRouter API.
  • Настроили генерацию статических страниц агентом и их последующую публикацию через publish.sh.
  • Запланировали выполнение задач через cron и организовали централизованное логирование.

Что настроили

  • Proxmox: VM с выделением 2 vCPU, 2 ГБ RAM, 20 ГБ SSD, сетевой мост к внешнему интерфейсу.
  • nginx: конфигурация с перенаправлением HTTP→HTTPS, SSL‑сертификат Let’s Encrypt, гзип‑сжатие и кэширование статики.
  • DNS: A‑запись homelab.kobelkov.ru → IP‑адрес VM, проверка распространения.
  • Git: репозиторий homelab-site с ветками main и dev, хуки pre‑commit для линтинга Markdown.
  • publish.sh: скрипт, pulling latest commit, запуск генератора сайта, копирование output в /var/www/html, перезагрузка nginx при необходимости.
  • Claude Code: тестовый запрос, оценка времени ответа и точности, запись ограничений в docs/claude-limits.md.
  • OpenRouter: получение API‑ключа, выбор модели mistralai/mistral-7b-instruct, настройка лимита запросов.
  • AI‑агент (Node.js): сервер Express, endpoint /generate получает запрос на страницу, формирует промпт, обращается к OpenRouter, сохраняет результат в pages/.
  • cron: задача */15 * * * * /opt/homelab/publish.sh >> /var/log/homelab/publish.log 2>&1.
  • Логирование: ротация через logrotate, уровень INFO для publish, DEBUG для агента, хранение 7 дней.

Результат дня

  • Доступен рабочий сайт по адресу https://homelab.kobelkov.ru с главной страницей и базовым набором разделов (О проекте, Блог, Документация).
  • HTTPS активен, сертификат валиден, рейтинг безопасности SSL Labs — A.
  • Автоматическая pipeline: коммит в репозиторий → запуск publish.sh → генерация контента AI‑агентом → деплой на веб‑сервер → доступность изменений в течение минуты.
  • AI‑агент успешно генерирует Markdown‑страницы на основе коротких тем, получая ответы от OpenRouter без превышения бесплатного лимита (текущий расход < 5 000 токенов/день).
  • Логи показывают отсутствие ошибок в nginx и publish.sh; агент логирует запрос/ответ и время выполнения (среднее 1,2 с).
  • Ограничения бесплатного Claude Code подтверждены: максимум 500 токенов за запрос и блокировка после 50 запросов/час, что делает его непригодным для постоянной генерации контента.

Следующие шаги

  1. Оптимизация агента:
  2. Добавить кэширование ответов OpenRouter (Redis) для повторяющихся запросов.
  3. Реализовать механизм повторных попыток с экспоненциальным backoff при ошибках API.
  4. Расширение функционала сайта:
  5. Добавить раз catégorization тегов и RSS‑ленту.
  6. Внедрить комментарии через静态 solution (например, Utterances или GitHub Issues).
  7. Мониторинг и алертинг:
  8. Настроить Prometheus + node_exporter для сбора метрик VM (CPU, RAM, диск, сеть).
  9. Интегрировать Alertmanager для уведомлений о падении nginx или превышении лимитов OpenRouter.
  10. Документация:
  11. Оформить README с инструкциями по развертыванию, обновлению и кастомизации агента.
  12. Свести ограничения и выбранные архитектурные решения в ARCHITECTURE.md.
  13. Тестирование нагрузки:
  14. Запустить нагрузочное тестирование (wrk/k6) чтобы определить предельное количество одновременных запросов, которое выдержит текущая конфигурация.
  15. При необходимости масштабировать VM или добавить балансировщик нагрузки.

Отчёт составлен в деловом стиле, без лишней информации, ориентирован на заинтересованные стороны проекта.