diff --git a/README.md b/README.md new file mode 100644 index 0000000..bf00d6f --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +# Анализатор METAR + +> Веб-приложение для получения, анализа и визуализации метеорологических сводок METAR с метеостанций аэропортов по всему миру. + + +## О проекте + +Этот проект представляет собой простой, но функциональный инструмент для метео-энтузиастов и пилотов. Пользователь может ввести ICAO-код аэропорта и глубину анализа в днях, после чего приложение запрашивает данные у публичного API, обрабатывает их и представляет в виде наглядных графиков и сводной аналитики. + +## Основные возможности + +- **Получение данных:** Запрос исторических данных METAR по коду станции и периоду. +- **Визуализация:** Построение графиков для ключевых метеорологических параметров: + - Температура и точка росы. + - Атмосферное давление (QNH). + - Скорость ветра. +- **Сводный анализ:** Расчет минимальных, максимальных и средних значений, а также определение преобладающего направления ветра. +- **Просмотр исходных данных:** Таблица с последними полученными сводками METAR. +- **Адаптивный интерфейс:** Корректное отображение на устройствах разного размера. + +## Стек технологий + +- **Backend:** [Node.js](https://nodejs.org/), [Express.js](https://expressjs.com/) +- **Frontend:** HTML5, CSS3, Vanilla JavaScript (ES6+) +- **HTTP-клиент:** [Axios](https://axios-http.com/) +- **Библиотека для графиков:** [Chart.js](https://www.chartjs.org/) +- **Контейнеризация:** [Docker](https://www.docker.com/) + +--- + +## Установка и запуск + +Вы можете запустить проект двумя способами: локально для разработки или с помощью Docker. + +### 1. Локальный запуск (для разработки) + +**Требования:** +- [Node.js](https://nodejs.org/) (v18 или выше) +- npm (обычно устанавливается вместе с Node.js) + +**Шаги:** + +1. Клонируйте репозиторий: + ```bash + git clone https://gitea.yourcompany.com/your-username/metar-analyzer.git + ``` + +2. Перейдите в директорию проекта: + ```bash + cd metar-analyzer + ``` + +3. Установите зависимости: + ```bash + npm install + ``` + +4. Запустите сервер: + ```bash + npm start + ``` + +5. Откройте в браузере [http://localhost:3000](http://localhost:3000). + +### 2. Запуск через Docker + +**Требования:** +- [Docker](https://www.docker.com/get-started) +- [Docker Compose](https://docs.docker.com/compose/install/) + +**Шаги:** + +1. Клонируйте репозиторий (если еще не сделали). + +2. Находясь в корневой папке проекта, выполните команду: + ```bash + docker-compose up --build -d + ``` + - `--build` - принудительно пересобирает образ, если были изменения в коде или `Dockerfile`. + - `-d` - запускает контейнер в фоновом режиме (detached mode). + +3. Приложение будет доступно по адресу [http://localhost:9010](http://localhost:9010). + +## Развертывание (Deployment) + +Проект готов к развертыванию с помощью Portainer (или любой другой системы управления Docker-контейнерами). + +1. В Portainer создайте новый **Stack**. +2. Выберите метод развертывания из **Git Repository**. +3. Укажите URL вашего репозитория в Gitea и данные для аутентификации (если репозиторий приватный). +4. В качестве `Compose path` укажите `docker-compose.yml`. +5. Нажмите **Deploy the stack**. Portainer автоматически скачает код, соберет образ и запустит контейнер. + +## API + +Проект предоставляет один API-эндпоинт для получения данных с фронтенда. + +- **URL:** `/api/metar` +- **Метод:** `GET` +- **Query-параметры:** + - `station` (string, **обязательный**) - ICAO-код аэропорта (например, `UIII`). + - `days` (number, **обязательный**) - Глубина выборки в днях (например, `14`). +- **Пример запроса:** `/api/metar?station=UIII&days=14` +- **Ответ в случае успеха (200 OK):** + ```json + { + "data": [ + { + "station": "UIII", + "valid": "2023-11-28T12:30:00Z", + "tmpf": 3.2, + "dwpf": -4, + //* ... другие поля ... */ + } + ] + } + ``` +- **Ответ в случае ошибки (4xx/5xx):** + ```json + { + "error": "Текст ошибки" + } + ``` + +## Источник данных + +Источником данных является публичный архив [Iowa Environmental Mesonet (IEM)](https://mesonet.agron.iastate.edu/), поддерживаемый Университетом штата Айова. Сервис агрегирует и предоставляет через API метеорологические сводки (METAR) с множества аэропортов по всему миру. \ No newline at end of file