304 lines
10 KiB
Markdown
304 lines
10 KiB
Markdown
# Миграция контента на 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 конфигурация для работы с существующей структурой:**
|
||
```toml
|
||
# 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 Архитектура контейнеров
|
||
|
||
```mermaid
|
||
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:**
|
||
```yaml
|
||
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 Базовая конфигурация
|
||
|
||
```toml
|
||
# 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 → Сборка → Деплой
|
||
- **Консистентность**: Один источник истины
|
||
- **Простота отладки**: Единый лог и контекст |