HomeLab

День 20 — Ежедневные переводы англоязычных статей на русский

15 мая 2026, 08:00
День 20 — Ежедневные переводы англоязычных статей на русский

Сегодня на сайте появился новый постоянный контур: ежедневные переводы англоязычных материалов про homelab и self-hosted на русский язык.

Идея простая: в англоязычном сообществе выходит много полезных статей, но читать их каждый день руками неудобно. Теперь сайт сам забирает материал из очереди, переводит его, сохраняет как обычную страницу и публикует в разделе Переводы.


Зачем это нужно

Для homelab важно не только “поставить сервис”, но и постоянно смотреть, что делают другие:

  • какие инструменты появляются
  • какие проблемы всплывают у людей в реальной эксплуатации
  • какие подходы работают в Proxmox, Docker, NAS, сетях и автоматизации
  • какие идеи можно забрать себе в лабораторию

Раньше это было ручной привычкой: открыть сайт, найти статью, прочитать, сохранить ссылку.

Теперь это отдельный ежедневный pipeline.

Noted.lol / RSS
      |
      v
Очередь статей
      |
      v
Полный текст статьи
      |
      v
AI-перевод на русский
      |
      v
Markdown + source link
      |
      v
render_md.py
      |
      v
/translations/ + главная + поиск

Как устроена очередь

Мы не просто берем случайную статью из RSS. Есть отдельный список URL, который идет от новых материалов к более старым.

Сейчас логика такая:

  • если в RSS появилась новая статья, она имеет приоритет
  • если новых статей нет, берется следующая из очереди
  • после успешной публикации URL попадает в processed_links.json
  • повторно уже обработанные статьи не переводятся

Это дает предсказуемость: каждый день выходит один материал, без дублей и без ручного выбора.

config/noted-homelab-queue.txt
          |
          v
translations/_meta/processed_links.json
          |
          v
следующий необработанный URL

Как работает перевод

Скрипт забирает страницу целиком, а не короткий RSS-анонс.

Дальше процесс такой:

  1. скачивается HTML страницы
  2. из страницы выделяется основной <article>
  3. HTML конвертируется в Markdown
  4. Markdown отправляется в модель на полный перевод
  5. результат сохраняется в /opt/homelab-site/translations/*.md
  6. render_md.py делает HTML-страницу
  7. publish.sh пересобирает индексы, поиск, sitemap и главную

Важно: перевод делается как полноценная статья, а не как короткий пересказ.


Что пришлось починить по дороге

Самая неприятная проблема была не в Markdown, а в доступе к модели.

На сервере старый OPENAI_BASE_URL указывал на gateway, который перестал отвечать. Из-за этого переводчик зависал и не мог сгенерировать нормальный русский текст.

Решение:

  • отключили мертвый OPENAI_BASE_URL
  • настроили OpenAI SDK на работу через HTTPS_PROXY
  • добавили https-proxy-agent
  • проверили, что модели снова доступны с сервера

После этого перевод начал работать штатно.

homelab-web
   |
   | HTTPS_PROXY
   v
OpenAI API
   |
   v
RU Markdown

Защита от пустых публикаций

Отдельно поправили поведение при сбоях.

Раньше, если перевод не получался, могла появиться короткая заглушка: заголовок есть, карточка есть, а нормальной статьи нет.

Теперь правило жестче:

  • статья должна быть полноценной
  • источник должен быть явно указан
  • front-matter не должен ломаться
  • обложка должна подтягиваться как у остальных материалов
  • карточки не должны содержать вложенные ссылки

Последний пункт оказался важным для верстки: если вся карточка является ссылкой, внутри нее нельзя делать еще одну ссылку на источник. Браузер разрывает такой HTML, и карточки начинают “уплывать”. Теперь источник в карточке показывается текстом, а полноценная ссылка остается внутри самой статьи.


Что уже получилось

На сайте появился раздел Переводы.

Туда уже попали материалы про:

  • AI-зеркало MirrorMate
  • ProxMenux Manager для Proxmox
  • проблему сетей Docker
  • синхронизацию файлов через n8n и rsync
  • обновление Proxmox VE 8 до 9

Каждый материал теперь выглядит как часть сайта:

  • есть русская версия
  • есть ссылка на оригинал
  • есть обложка
  • карточка появляется на главной
  • материал попадает в поиск
  • sitemap обновляется

Ежедневный запуск

Автоматизация висит в cron.

0 2 * * * /home/ubuntu/homelab-podcast/run-noted-translations.sh

Сервер живет в UTC, поэтому 02:00 UTC — это 10:00 по Иркутску.

То есть каждый день утром сайт должен получать один новый перевод.


Итог

Сайт постепенно становится не просто дневником моего HomeLab, а маленьким русскоязычным хабом по self-hosted и домашней инфраструктуре.

Посты — это мой опыт.

Переводы — это внешний опыт, аккуратно перенесенный в наш контекст.

Вместе получается полезная база: можно читать, искать, возвращаться к материалам и использовать их как идеи для следующих экспериментов.