День 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-анонс.
Дальше процесс такой:
- скачивается HTML страницы
- из страницы выделяется основной
<article> - HTML конвертируется в Markdown
- Markdown отправляется в модель на полный перевод
- результат сохраняется в
/opt/homelab-site/translations/*.md render_md.pyделает HTML-страницу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 и домашней инфраструктуре.
Посты — это мой опыт.
Переводы — это внешний опыт, аккуратно перенесенный в наш контекст.
Вместе получается полезная база: можно читать, искать, возвращаться к материалам и использовать их как идеи для следующих экспериментов.