8.1 KiB
GKWeb - Rust веб-сервер
Обзор проекта
GKWeb — это современный веб-сервер, написанный на языке программирования Rust с использованием фреймворка Axum. Проект представляет собой простой, но функциональный веб-сервер, способный обслуживать статические файлы и HTML-страницы с поддержкой автоматической маршрутизации.
Архитектура и особенности
Основные компоненты
-
Главный модуль (
src/main.rs)- Точка входа в приложение
- Создание и запуск сервера на порту 3000
- Инициализация маршрутизации
-
Система маршрутизации (
src/routing.rs)- Автоматическая маршрутизация с помощью Axum
- Поддержка статических файлов и HTML страниц
- Обработка 404 ошибок
- Поддержка переменной BASE_URL для настройки базового пути
-
Управление ресурсами (
src/assets.rs)- Встраивание статических файлов в исполняемый файл с помощью
rust-embed - Компиляция всех файлов из директории
assets/в бинарник - Поддержка любых типов файлов
- Встраивание статических файлов в исполняемый файл с помощью
-
Система логирования (
src/logger.rs)- Цветной терминальный логгер с временными метками
- 4 уровня логирования: INFO, WARN, ERROR, DEBUG
- Адаптивный вывод с учетом ширины терминала
-
Отладочные функции (
src/debug/)- Вывод списка всех встроенных ресурсов
- Помощь в разработке и отладке
-
Система сборки (
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 для несуществующих страниц
Логирование
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 # Данное описание проекта
Использование
Запуск сервера
cargo run
Переменные окружения
BASE_URL— базовый URL для замены в HTML страницах (по умолчанию "/")
Пример работы
- Сервер запускается на
http://0.0.0.0:3000 - При старте выводится список всех встроенных ресурсов
- Главная страница доступна по адресу
/ - Статические файлы обслуживаются напрямую
- HTML страницы обрабатываются с заменой BASE_URL
Преимущества
- Производительность: Rust обеспечивает высокую скорость и низкое потребление памяти
- Безопасность: Встроенная безопасность памяти Rust
- Простота развертывания: Все ресурсы встроены в один исполняемый файл
- Гибкость: Поддержка переменных окружения для конфигурации
- Отладка: Встроенные инструменты логирования и отладки
- Современность: Использует последние версии Rust и фреймворков
Возможности для развития
- Поддержка шаблонов: Завершение реализации системы сборки шаблонов
- Динамические страницы: Добавление обработки шаблонов Handlebars
- API эндпоинты: Расширение функциональности для REST API
- Конфигурация: Поддержка файлов конфигурации
- Мониторинг: Добавление метрик и мониторинга
- Кэширование: Реализация системы кэширования
- HTTPS: Поддержка SSL/TLS соединений
Заключение
GKWeb представляет собой современный, производительный и расширяемый веб-сервер, построенный с использованием лучших практик Rust. Проект демонстрирует эффективное использование экосистемы Rust для создания веб-приложений с минимальными зависимостями и максимальной производительностью.
Проект разработан с использованием Rust 2024 edition и Axum framework