141 lines
8.1 KiB
Markdown
141 lines
8.1 KiB
Markdown
# GKWeb - Rust веб-сервер
|
||
|
||
## Обзор проекта
|
||
|
||
**GKWeb** — это современный веб-сервер, написанный на языке программирования Rust с использованием фреймворка Axum. Проект представляет собой простой, но функциональный веб-сервер, способный обслуживать статические файлы и HTML-страницы с поддержкой автоматической маршрутизации.
|
||
|
||
## Архитектура и особенности
|
||
|
||
### Основные компоненты
|
||
|
||
1. **Главный модуль** (`src/main.rs`)
|
||
- Точка входа в приложение
|
||
- Создание и запуск сервера на порту 3000
|
||
- Инициализация маршрутизации
|
||
|
||
2. **Система маршрутизации** (`src/routing.rs`)
|
||
- Автоматическая маршрутизация с помощью Axum
|
||
- Поддержка статических файлов и HTML страниц
|
||
- Обработка 404 ошибок
|
||
- Поддержка переменной BASE_URL для настройки базового пути
|
||
|
||
3. **Управление ресурсами** (`src/assets.rs`)
|
||
- Встраивание статических файлов в исполняемый файл с помощью `rust-embed`
|
||
- Компиляция всех файлов из директории `assets/` в бинарник
|
||
- Поддержка любых типов файлов
|
||
|
||
4. **Система логирования** (`src/logger.rs`)
|
||
- Цветной терминальный логгер с временными метками
|
||
- 4 уровня логирования: INFO, WARN, ERROR, DEBUG
|
||
- Адаптивный вывод с учетом ширины терминала
|
||
|
||
5. **Отладочные функции** (`src/debug/`)
|
||
- Вывод списка всех встроенных ресурсов
|
||
- Помощь в разработке и отладке
|
||
|
||
6. **Система сборки** (`src/builder.rs`)
|
||
- Модуль для будущих функций сборки шаблонов (пока не реализован)
|
||
|
||
## Технологический стек
|
||
|
||
- **Язык**: Rust (edition 2024)
|
||
- **Веб-фреймворк**: Axum 0.8.7
|
||
- **Асинхронность**: Tokio (полная поддержка)
|
||
- **HTTP**: http 1.3.1
|
||
- **Типы файлов**: mime_guess для определения MIME-типов
|
||
- **Ресурсы**: rust-embed для встраивания файлов
|
||
- **Время**: chrono для временных меток
|
||
- **Терминал**: term_size для определения размеров окна
|
||
|
||
## Функциональность
|
||
|
||
### Маршрутизация
|
||
- `/` — главная страница (index.html)
|
||
- `/{path}` — общий маршрут для статических файлов и HTML страниц
|
||
- Автоматический поиск файлов с добавлением `.html` для путей
|
||
- Поддержка статических файлов (CSS, JS, изображения, медиа)
|
||
|
||
### Особенности HTML страниц
|
||
- Автоматическая замена плейсхолдера `{{BASE_URL}}` на значение из переменной окружения
|
||
- Поддержка базового href для корректной работы ссылок
|
||
- Fallback на 404 для несуществующих страниц
|
||
|
||
### Логирование
|
||
```rust
|
||
log(0, "Server started successfully on port 3000", true); // INFO уровень, жирный шрифт
|
||
log(3, "Debug information", false); // DEBUG уровень, обычный шрифт
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
├── src/
|
||
│ ├── main.rs # Главный файл
|
||
│ ├── routing.rs # Система маршрутизации
|
||
│ ├── assets.rs # Управление ресурсами
|
||
│ ├── builder.rs # Сборщик (заготовка)
|
||
│ ├── logger.rs # Система логирования
|
||
│ └── debug/
|
||
│ ├── mod.rs
|
||
│ └── static_content.rs # Отладочные функции
|
||
├── assets/ # Статические ресурсы
|
||
│ ├── pages/
|
||
│ │ ├── index.html # Главная страница
|
||
│ │ ├── about.html # Страница "О нас"
|
||
│ │ └── test.hbs # Handlebars шаблон (не используется)
|
||
│ ├── template.html # Шаблон страницы
|
||
│ ├── styles/
|
||
│ │ └── main.css # Основные стили
|
||
│ ├── scripts/
|
||
│ │ └── hello.js # JavaScript файлы
|
||
│ ├── media/
|
||
│ │ └── uzi.gif # Медиа файлы
|
||
│ └── content/
|
||
│ └── about.md # Markdown контент
|
||
├── Cargo.toml # Конфигурация проекта
|
||
├── TECHDOC.md # Техническая документация
|
||
└── .desc.md # Данное описание проекта
|
||
```
|
||
|
||
## Использование
|
||
|
||
### Запуск сервера
|
||
```bash
|
||
cargo run
|
||
```
|
||
|
||
### Переменные окружения
|
||
- `BASE_URL` — базовый URL для замены в HTML страницах (по умолчанию "/")
|
||
|
||
### Пример работы
|
||
1. Сервер запускается на `http://0.0.0.0:3000`
|
||
2. При старте выводится список всех встроенных ресурсов
|
||
3. Главная страница доступна по адресу `/`
|
||
4. Статические файлы обслуживаются напрямую
|
||
5. HTML страницы обрабатываются с заменой BASE_URL
|
||
|
||
## Преимущества
|
||
|
||
1. **Производительность**: Rust обеспечивает высокую скорость и низкое потребление памяти
|
||
2. **Безопасность**: Встроенная безопасность памяти Rust
|
||
3. **Простота развертывания**: Все ресурсы встроены в один исполняемый файл
|
||
4. **Гибкость**: Поддержка переменных окружения для конфигурации
|
||
5. **Отладка**: Встроенные инструменты логирования и отладки
|
||
6. **Современность**: Использует последние версии Rust и фреймворков
|
||
|
||
## Возможности для развития
|
||
|
||
1. **Поддержка шаблонов**: Завершение реализации системы сборки шаблонов
|
||
2. **Динамические страницы**: Добавление обработки шаблонов Handlebars
|
||
3. **API эндпоинты**: Расширение функциональности для REST API
|
||
4. **Конфигурация**: Поддержка файлов конфигурации
|
||
5. **Мониторинг**: Добавление метрик и мониторинга
|
||
6. **Кэширование**: Реализация системы кэширования
|
||
7. **HTTPS**: Поддержка SSL/TLS соединений
|
||
|
||
## Заключение
|
||
|
||
GKWeb представляет собой современный, производительный и расширяемый веб-сервер, построенный с использованием лучших практик Rust. Проект демонстрирует эффективное использование экосистемы Rust для создания веб-приложений с минимальными зависимостями и максимальной производительностью.
|
||
|
||
---
|
||
*Проект разработан с использованием Rust 2024 edition и Axum framework*
|