<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blowfish on Ponfertato</title><link>https://ponfertato.potatoenergy.ru/tags/blowfish/</link><description>Recent content in Blowfish on Ponfertato</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>© 2019-2026 Ponfertato</copyright><atom:link href="https://ponfertato.potatoenergy.ru/tags/blowfish/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo: Архитектура статических сайтов и CI/CD</title><link>https://ponfertato.potatoenergy.ru/projects/hugo-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ponfertato.potatoenergy.ru/projects/hugo-workflow/</guid><description>&lt;p&gt;Использование Hugo для генерации статических сайтов позволяет достичь максимальной производительности при минимальных накладных расходах. Все проекты на стеке &lt;code&gt;*.potatoenergy.ru&lt;/code&gt; используют единую методологию сборки, конфигурации и деплоя.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ключевые принципы&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔹 Декларативная конфигурация через &lt;code&gt;hugo.toml&lt;/code&gt; и &lt;code&gt;config/_default/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;🔹 Мультиязычность через &lt;code&gt;translationKey&lt;/code&gt; без дублирования логики&lt;/li&gt;
&lt;li&gt;🔹 Наследование параметров через &lt;code&gt;cascade&lt;/code&gt; во фронтматтере&lt;/li&gt;
&lt;li&gt;🔹 Оптимизация ассетов через Hugo Pipes (минификация, фолбэки, хеширование)&lt;/li&gt;
&lt;li&gt;🔹 Изоляция окружения сборки через Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;🗂 Структура проекта
 &lt;div id="-структура-проекта" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%d1%81%d1%82%d1%80%d1%83%d0%ba%d1%82%d1%83%d1%80%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b0" aria-label="Якорь"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;project/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── config/_default/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── hugo.toml # Базовые настройки: baseURL, theme, outputs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── params.toml # Глобальные параметры темы и кастомные переменные
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── menus.toml # Конфигурация навигации
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── languages.*.toml # Локализация: displayName, copyright, author
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── content/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── {section}/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── _index.{ru,en}.md # Страница-листинг с описанием раздела
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ └── {slug}/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── index.{ru,en}.md # Контент с переводом через translationKey
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ └── assets/ # Ресурсы, привязанные к странице
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── _index.{ru,en}.md # Главная страница
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── layouts/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── _default/ # Шаблоны по умолчанию: single.html, list.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── partials/ # Переиспользуемые компоненты: head, footer, svg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── shortcodes/ # Кастомные шорткоды: audio, toggle, icon
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── shortcodes/ # Переопределение шаблонов темы (при необходимости)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── static/ # Файлы, копируемые «как есть»: robots.txt, favicons
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── assets/ # Исходники для Hugo Pipes: CSS/JS для сборки
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── docker-compose.yml # Окружение для локальной разработки&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;🌐 Мультиязычность без дублирования
 &lt;div id="-мультиязычность-без-дублирования" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%d0%bc%d1%83%d0%bb%d1%8c%d1%82%d0%b8%d1%8f%d0%b7%d1%8b%d1%87%d0%bd%d0%be%d1%81%d1%82%d1%8c-%d0%b1%d0%b5%d0%b7-%d0%b4%d1%83%d0%b1%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f" aria-label="Якорь"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Связь переводов реализуется через &lt;code&gt;translationKey&lt;/code&gt; во фронтматтере:&lt;/p&gt;</description></item></channel></rss>