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

304 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Миграция контента на 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 → Сборка → Деплой
- **Консистентность**: Один источник истины
- **Простота отладки**: Единый лог и контекст