10 KiB
10 KiB
Миграция контента на 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 Рабочий флоу
Разработка (без изменений):
- Редактирование в Obsidian
- Коммит в Git репозиторий
- Webhook автоматически запускает сборку
- Hugo генерирует новый сайт
- 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 → Сборка → Деплой
- Консистентность: Один источник истины
- Простота отладки: Единый лог и контекст