🏗️ Архитектура системы
🏗️ Архитектура системы Wiki Iridium
📖 Обзор архитектуры
Wiki Iridium построена по принципу разделения фронтенда и бэкенда, что обеспечивает масштабируемость, безопасность и простоту обслуживания.
Общая схема архитектуры
$$┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Пользователи │ │ Nginx │ │ Hugo Frontend │
│ │◄──►│ (Reverse Proxy) │◄──►│ (Port 1313) │
│ Веб-браузеры │ │ (Port 80/443) │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │
│ │
▼ ▼
┌──────────────────┐ ┌─────────────────┐
│ Go API Backend │ │ Static Content │
│ (Port 8000) │ │ Generated by │
│ (Gin Framework)│ │ Hugo │
└──────────────────┘ └─────────────────┘
│
│
▼
┌──────────────────┐
│ PostgreSQL │
│ Database │
│ (Port 5432) │
└──────────────────┘$$
🧩 Компоненты системы
1. Frontend Layer (Hugo)
- Назначение: Генерация статического контента
- Технологии: Hugo, HTML5, CSS3, JavaScript
- Порт: 1313
- Особенности:
- Live reload в режиме разработки
- Автоматическая генерация навигации
- Поддержка Markdown
- Темизация и кастомизация
2. Backend API (Go)
- Назначение: Бизнес-логика и управление данными
- Технологии: Go, Gin Framework
- Порт: 8000
- Функциональность:
- Аутентификация пользователей
- Управление ролями
- API для мобильных приложений
- Административные функции
3. Database Layer (PostgreSQL)
- Назначение: Хранение пользовательских данных
- Технологии: PostgreSQL 13+
- Порт: 5432
- Структура:
- Таблицы пользователей
- Сессии и токены
- Логи активности
- Метаданные системы
4. Proxy Layer (Nginx)
- Назначение: Маршрутизация и SSL терминация
- Технологии: Nginx
- Порты: 80 (HTTP), 443 (HTTPS)
- Функции:
- SSL/TLS шифрование
- Сжатие контента
- Кэширование статики
- Балансировка нагрузки
Безопасность архитектуры
Уровни защиты
$$┌─────────────────────────────────────────────────────────────┐
│ Уровень сети │
│ • Firewall правила │
│ • DDoS защита │
│ • IP фильтрация │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Уровень приложения │
│ • JWT токены │
│ • Ролевая авторизация │
│ • Валидация входных данных │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Уровень данных │
│ • Шифрование паролей │
│ • Подготовленные запросы │
│ • Аудит операций │
└─────────────────────────────────────────────────────────────┘$$
Аутентификация и авторизация
Аутентификация:
- Логин/пароль пользователя
- Генерация JWT токена
- Сохранение в localStorage
Авторизация:
- Проверка токена на каждый запрос
- Валидация роли пользователя
- Контроль доступа к ресурсам
Потоки данных
Аутентификация пользователя
$$Пользователь → Nginx → Hugo → JavaScript → Go API → PostgreSQL
↓ ↑ ↑ ↑ ↑
Логин Страница Токен Проверка Данные
логина пользователя$$
Просмотр контента
$$Пользователь → Nginx → Hugo → Статический контент
↓ ↑ ↑
Запрос Страница Markdown файлы$$
API запросы
$$JavaScript → Nginx → Go API → PostgreSQL
↓ ↑ ↑ ↑
AJAX запрос Проксирование Бизнес-логика Данные$$
Масштабирование
Горизонтальное масштабирование
$$ ┌─────────────────┐
│ Load Balancer │
└─────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌───────▼────┐ ┌───────▼────┐ ┌───────▼────┐
│ Hugo #1 │ │ Hugo #2 │ │ Hugo #3 │
│ Go API #1 │ │ Go API #2 │ │ Go API #3 │
└────────────┘ └────────────┘ └────────────┘
│ │ │
└──────────────┼──────────────┘
│
┌──────▼──────┐
│ PostgreSQL │
│ Cluster │
└─────────────┘$$
Вертикальное масштабирование
- CPU: Увеличение количества ядер
- RAM: Добавление оперативной памяти
- Storage: Переход на SSD, увеличение объема
- Network: Увеличение пропускной способности
Мониторинг и логирование
Метрики системы
$$┌──────────────────────────────────────────────────────────────┐
│ Monitoring Stack │
├──────────────────────────────────────────────────────────────┤
│ Application Logs │ System Metrics │ User Analytics │
│ • Go API logs │ • CPU/Memory │ • Page views │
│ • Hugo build logs │ • Disk I/O │ • User sessions │
│ • Nginx logs │ • Network │ • Error rates │
├──────────────────────────────────────────────────────────────┤
│ Alert Manager │
│ • Email notifications │
│ • Slack integration │
│ • SMS alerts (critical) │
└──────────────────────────────────────────────────────────────┘$$
Логирование
Application Level:
// Go API log.Printf("User %s authenticated successfully", userID) log.Printf("Database connection failed: %v", err)System Level:
# Systemd журналы journalctl -u iridium-hugo.service journalctl -u iridium-api.serviceWeb Server Level:
# Nginx логи access_log /var/log/nginx/wiki_access.log; error_log /var/log/nginx/wiki_error.log;
Конфигурация окружений
Development
Environment: development
Debug: true
Database: local PostgreSQL
SSL: self-signed
Monitoring: basic logging
Staging
Environment: staging
Debug: false
Database: staging PostgreSQL
SSL: Let's Encrypt
Monitoring: full stack
Production
Environment: production
Debug: false
Database: production cluster
SSL: commercial certificate
Monitoring: full + alerting
Системные требования
Минимальные требования
- CPU: 2 cores, 2.0 GHz
- RAM: 4 GB
- Storage: 20 GB SSD
- Network: 100 Mbps
Рекомендуемые требования
- CPU: 4 cores, 3.0 GHz
- RAM: 8 GB
- Storage: 50 GB NVMe SSD
- Network: 1 Gbps
Продакшн требования
- CPU: 8+ cores, 3.5+ GHz
- RAM: 16+ GB
- Storage: 100+ GB NVMe SSD
- Network: 10+ Gbps
CI/CD Pipeline
Процесс развертывания
$$┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Git Push │──▶│ Build │──▶│ Tests │──▶│ Deploy │
│ │ │ • Hugo │ │ • Unit │ │ • Staging │
│ │ │ • Go API │ │ • E2E │ │ • Prod │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘$$
Автоматизация
Build Stage:
- Сборка Hugo сайта
- Компиляция Go API
- Создание Docker образов
Test Stage:
- Unit тесты API
- Integration тесты
- Security сканирование
Deploy Stage:
- Развертывание на staging
- Smoke тесты
- Развертывание на production
Инструменты разработки
Backend
- IDE: GoLand, VSCode
- Testing: Go testing, testify
- Documentation: Swagger/OpenAPI
- Profiling: pprof, go-torch
Frontend
- Editor: VSCode, Sublime Text
- Testing: Selenium, Playwright
- Build: Hugo, webpack
- Optimization: Lighthouse, PageSpeed