Files
second-mind-aep/Идеи/Оптимизация ресурсов VPS/Миграция контента на Hugo.md
2025-08-04 15:41:49 +04:00

10 KiB
Raw Blame History

Миграция контента на Hugo

1. Понимание текущей архитектуры

1.1 Текущий флоу (Quartz)

Obsidian Vault → Quartz → Static Site → Nginx

Компоненты:

  • Obsidian Vault: Исходные Markdown документы
  • Quartz: Генератор статического сайта на Node.js
  • Static Site: Собранные HTML/CSS/JS файлы
  • Nginx: Веб-сервер для раздачи статики

1.2 Новый флоу (Hugo)

Obsidian Vault → Hugo → Static Site → Nginx (в Docker)

Компоненты:

  • Obsidian Vault: Те же исходные Markdown документы
  • Hugo: Генератор статического сайта на Go
  • Static Site: Оптимизированные HTML/CSS/JS файлы
  • Nginx: Веб-сервер в Docker контейнере

2. Сохранение структуры каталогов

2.1 Принцип "не трогать структуру"

Ключевое правило: Структура каталогов в Git остается неизменной, Hugo адаптируется под неё.

Преимущества:

  • Сохранение удобной навигации в Obsidian
  • Отсутствие необходимости переименовывать файлы
  • Сохранение существующих ссылок
  • Простота миграции

2.2 Адаптация Hugo под существующую структуру

Текущая структура (остается неизменной):

Second Mind/
├── index.md
├── Идеи/
│   ├── Obsidian телеграм бот/
│   │   ├── MVP Telegram бота для Obsidian.md
│   │   └── Telegram бот для Obsidian.md
│   └── Оптимизация ресурсов VPS/
│       ├── Единое приложение Hugo + Webhook.md
│       └── Миграция контента на Hugo.md
├── Мой сервер/
│   ├── Authelia Authentication/
│   ├── Git Service/
│   ├── Second Mind Setup/
│   └── Traefik Reverse Proxy/
└── Документация сервера aepif.ru.md

Hugo конфигурация для работы с существующей структурой:

# config.toml
baseURL = "https://aepif.ru"
languageCode = "ru-ru"
title = "Second Mind"
theme = "custom-theme"

# Настройки для работы с существующей структурой
[params]
  preserveStructure = true
  useOriginalNames = true
  
[markup]
  [markup.goldmark]
    [markup.goldmark.renderer]
      unsafe = true
  
  # Поддержка Obsidian-специфичных элементов
  [markup.highlight]
    style = "dracula"
    lineNos = true

2.3 Обработка имен файлов и каталогов

Стратегия Hugo:

  • Использование оригинальных имен файлов и каталогов
  • Автоматическое создание slug из имен файлов
  • Сохранение кириллических имен
  • Обработка пробелов и специальных символов

URL структура:

  • /идеи/obsidian-телеграм-бот/mvp-telegram-бота-для-obsidian/
  • /мой-сервер/authelia-authentication/
  • Сохранение читаемости URL

3. Миграция контента

3.1 Основные изменения при миграции

Frontmatter преобразования:

  • Сохранение существующих полей
  • Добавление Hugo-специфичных полей (title, date, draft)
  • Автоматическое извлечение заголовка из имени файла
  • Преобразование дат в стандартный формат

Внутренние ссылки:

  • [[wiki links]]{{< ref "path" >}}
  • Сохранение относительных путей
  • Обработка Obsidian-специфичных ссылок
  • Автоматическое обновление ссылок при изменении структуры

Изображения и вложения:

  • Сохранение в той же структуре каталогов
  • Обновление путей в контенте
  • Оптимизация размера файлов без изменения структуры

3.2 Автоматизация миграции

Скрипт миграции:

  • Анализ существующей структуры
  • Автоматическое создание Hugo конфигурации
  • Преобразование frontmatter
  • Обновление внутренних ссылок
  • Сохранение структуры каталогов

4. Docker развертывание

4.1 Архитектура контейнеров

graph TB
    A[Git Repository] --> B[Hugo + Webhook Container]
    B --> C[Static Files Volume]
    C --> D[Nginx Container]
    D --> E[Internet]
    
    subgraph "Docker Host"
        B
        C
        D
    end

4.2 Структура Docker

Docker Compose:

version: '3.8'
services:
  hugo-webhook:
    build: .
    volumes:
      - ./Second Mind:/app/content  # Прямое монтирование существующей структуры
      - ./static:/app/static
      - static-files:/var/www/html
    environment:
      - GIT_REPOSITORY_URL=your-repo
      - HUGO_SOURCE_PATH=/app
      - HUGO_OUTPUT_PATH=/var/www/html
      - PRESERVE_STRUCTURE=true
    ports:
      - "8080:8080"
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    volumes:
      - static-files:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - hugo-webhook
    restart: unless-stopped

volumes:
  static-files:

4.3 Преимущества сохранения структуры

Для пользователя:

  • Знакомая навигация в Obsidian
  • Отсутствие необходимости переучиваться
  • Сохранение всех существующих ссылок
  • Простота поиска файлов

Для системы:

  • Минимальные изменения в Git репозитории
  • Простота отката к предыдущей версии
  • Сохранение истории изменений
  • Совместимость с существующими инструментами

5. Интеграция с Obsidian

5.1 Рабочий флоу

Разработка (без изменений):

  1. Редактирование в Obsidian
  2. Коммит в Git репозиторий
  3. Webhook автоматически запускает сборку
  4. Hugo генерирует новый сайт
  5. Nginx раздает обновленный контент

Синхронизация:

  • Obsidian Vault → Git Repository (без изменений)
  • Git Repository → Hugo Content (прямое использование)
  • Hugo Content → Static Site (с сохранением структуры)
  • Static Site → Nginx

5.2 Автоматизация

Git Hooks (без изменений):

  • Автоматический коммит при изменениях в Obsidian
  • Push в удаленный репозиторий
  • Webhook уведомление

Webhook обработка:

  • Валидация изменений
  • Клонирование/обновление репозитория
  • Сборка Hugo с сохранением структуры
  • Перезагрузка Nginx

6. Конфигурация Hugo

6.1 Базовая конфигурация

# config.toml
baseURL = "https://aepif.ru"
languageCode = "ru-ru"
title = "Second Mind"
theme = "custom-theme"

[params]
  description = "Персональная база знаний и заметки"
  author = "AEP"
  
  # Настройки для сохранения структуры
  preserveStructure = true
  useOriginalNames = true
  enableSearch = true
  showBreadcrumb = true
  showReadingTime = true
  showWordCount = true

[menu]
  [[menu.main]]
    identifier = "ideas"
    name = "Идеи"
    url = "/идеи/"
    weight = 1
  
  [[menu.main]]
    identifier = "server"
    name = "Мой сервер"
    url = "/мой-сервер/"
    weight = 2

[markup]
  [markup.goldmark]
    [markup.goldmark.renderer]
      unsafe = true
  
  [markup.highlight]
    style = "dracula"
    lineNos = true

6.2 Оптимизации для VPS

Производительность:

  • Минификация всех ресурсов
  • Оптимизация изображений
  • Gzip сжатие
  • Кэширование статических файлов

Ресурсы:

  • Ограничение использования памяти
  • Оптимизация времени сборки
  • Эффективное использование диска

7. Преимущества миграции

7.1 Производительность

  • Время сборки: С 30-60 секунд до 5-10 секунд
  • Потребление памяти: С 512MB до 128MB
  • CPU нагрузка: Снижение на 70-80%
  • Время загрузки: Улучшение на 40-60%

7.2 Операционные

  • Простота развертывания: Docker Compose
  • Изоляция: Контейнеры
  • Масштабируемость: Легкое горизонтальное масштабирование
  • Мониторинг: Встроенные метрики

7.3 Интеграция

  • Сохранение рабочего флоу: Obsidian → Git → Hugo
  • Сохранение структуры: Без изменений в организации файлов
  • Автоматизация: Webhook → Сборка → Деплой
  • Консистентность: Один источник истины
  • Простота отладки: Единый лог и контекст