DEV Community на русском
Подписаться
Мой статический блог на Nuxt публикуется сам: черновики, запланированные "капельные" публикации и автопересборки.
Эта статья подробно описывает решение для планирования публикаций на полностью статическом сайте Nuxt. Статические сайты по своей природе не имеют возможностей серверного рендеринга, что делает прямое планирование публикаций невозможным без механизма пересборки. Автор, который пишет наплывами, разработал систему, включающую черновики, запланированную очередь и автоматические пересборки. Настройка использует Nuxt 4, предварительно отрендеренный как SSG, Storyblok в качестве headless CMS и сервер Nitro, управляемый PM2, чтобы приложение всегда было включено. GitHub Actions используется для развертывания и пересборки сайта.Основная идея заключается в том, что публикация на SSG состоит из двух шагов: обновление контента в CMS, а затем пересборка статического сайта. Планирование автоматизирует эти два шага на будущее время. Черновики сохраняются на стороне сервера со статусом и датой публикации, не влияя на живой сайт до момента планирования. Запланированная задача Nitro выполняется ежечасно для проверки статей с датой публикации в прошлом или настоящем.Когда статьи готовы к публикации, они преобразуются в формат richtext Storyblok и отправляются в CMS. Затем через API GitHub запускается одна пересборка сайта, гарантирующая появление нового контента на живом сайте. Система избегает использования отдельных сервисов, таких как cron-серверы, используя встроенную функцию запланированных задач Nitro. Важный момент заключается в том, что сервер Nitro должен быть запущен для выполнения запланированных задач, поэтому он размещен на небольшом VPS и управляется PM2. Автор подчеркивает важность оптимизации для одной пересборки на партию запланированных статей, чтобы избежать избыточных развертываний. Наконец, для точного планирования крайне важно уделять внимание часовым поясам. Это решение позволяет автору заранее писать контент и автоматически публиковать его, избавляя от ручного вмешательства.