diff --git a/.desc.md b/.desc.md deleted file mode 100644 index 8ddf67c..0000000 --- a/.desc.md +++ /dev/null @@ -1,141 +0,0 @@ -# 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* diff --git a/Cargo.lock b/Cargo.lock index ad6eed1..89c77aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,72 +156,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn", -] - [[package]] name = "digest" version = "0.10.7" @@ -302,33 +236,15 @@ version = "0.1.0" dependencies = [ "axum", "chrono", - "handlebars", "http", "mime_guess", "rust-embed", - "serde_json", "term_size", "tokio", "tower-http", "tower-service", ] -[[package]] -name = "handlebars" -version = "6.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759e2d5aea3287cb1190c8ec394f42866cb5bf74fcbf213f354e3c856ea26098" -dependencies = [ - "derive_builder", - "log", - "num-order", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "http" version = "1.3.1" @@ -436,12 +352,6 @@ dependencies = [ "cc", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "itoa" version = "1.0.15" @@ -518,21 +428,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num-modular" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" - -[[package]] -name = "num-order" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" -dependencies = [ - "num-modular", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -577,49 +472,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pest" -version = "2.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" -dependencies = [ - "pest", - "sha2", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -827,12 +679,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "syn" version = "2.0.110" @@ -859,26 +705,6 @@ dependencies = [ "libc", ] -[[package]] -name = "thiserror" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "tokio" version = "1.48.0" @@ -975,12 +801,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "unicase" version = "2.8.1" diff --git a/Cargo.toml b/Cargo.toml index 51d27d9..48d1797 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,11 +6,9 @@ edition = "2024" [dependencies] axum = "0.8.7" chrono = "0.4" -handlebars = "6.3.2" http = "1.3.1" mime_guess = "2.0" rust-embed = "8.9.0" -serde_json = "1.0.145" term_size = "0.1" tokio = { version = "*", features = ["full"] } tower-http = "0.6.6" diff --git a/assets/pages/about.hbs b/assets/pages/about.hbs deleted file mode 100644 index 011b521..0000000 --- a/assets/pages/about.hbs +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: about ---- -
This is the about page.
+ index + + diff --git a/assets/pages/index.hbs b/assets/pages/index.hbs deleted file mode 100644 index fe5e93d..0000000 --- a/assets/pages/index.hbs +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: grechkaGK ---- -
-about
-
diff --git a/assets/pages/index.html b/assets/pages/index.html
new file mode 100644
index 0000000..4666399
--- /dev/null
+++ b/assets/pages/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ about
+
+
\ No newline at end of file
diff --git a/assets/pages/test.hbs b/assets/pages/test.hbs
deleted file mode 100644
index 3131ff7..0000000
--- a/assets/pages/test.hbs
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: test
----
-just test
diff --git a/assets/template.hbs b/assets/template.hbs deleted file mode 100644 index eea15c7..0000000 --- a/assets/template.hbs +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -