# 📂 S3 Lists Manager Веб-интерфейс для удобного управления файлами в S3-совместимом хранилище Yandex Cloud. Приложение позволяет в реальном времени просматривать, добавлять, редактировать, удалять и массово изменять записи в следующих файлах: - **domains.txt** - список доменов и их шлюзов - **asns.txt** - список AS номеров и их шлюзов - **servers.json** - список серверов с расширенной информацией (IP, DNS, страна, провайдер, тип туннеля) ## ✨ Возможности - **Три режима работы:** Управление списками доменов, AS-номеров и серверов через вкладки. - **CRUD операции:** Полный набор действий: создание, чтение, обновление и удаление записей. - **Поиск в реальном времени:** Мгновенная фильтрация списков по мере ввода. - **Массовая замена:** Быстрое обновление шлюзов для сотен записей в один клик. - **Сохранение в S3:** Все изменения сохраняются непосредственно в файлах в бакете Yandex Cloud. - **Docker-контейнеризация:** Готовый `Dockerfile` для сборки и запуска приложения в изолированном окружении. - **CI/CD с Gitea Actions:** Автоматическая сборка и публикация Docker-образа в Gitea Registry при пуше в `main`. - **Современный интерфейс:** Полностью интегрированный Tabler UI с официальными компонентами. ## 🛠️ Технологический стек | Область | Технология | |--------------|-----------------------------------------------------------------------------------------------------------| | **Фронтенд** | [**React**](https://reactjs.org/) + [**Vite**](https://vitejs.dev/) | | | [**@tabler/core**](https://tabler.io/) (UI-компоненты для Tabler версии) | | | [**Tabler Icons**](https://tabler-icons.io/) (иконки) | | | [**Axios**](https://axios-http.com/) (HTTP-клиент) | | **Бэкенд** | [**Node.js**](https://nodejs.org/) + [**Express**](https://expressjs.com/) | | | [**AWS SDK for JS**](https://aws.amazon.com/sdk-for-javascript/) (для работы с Yandex Cloud S3) | | **CI/CD** | [**Docker**](https://www.docker.com/), [**Gitea Actions**](https://gitea.com/blog/2022/10/01/gitea-actions/) | ## 🏗️ Архитектура Приложение состоит из двух основных частей: фронтенд на React и бэкенд на Node.js/Express, которые взаимодействуют через REST API. ```mermaid graph TD subgraph Browser A[React Frontend] end subgraph Server B(Node.js/Express API) end subgraph Yandex Cloud C{S3 Bucket} D1[domains.txt] D2[asns.txt] D3[servers.json] end A -- HTTP Requests --> B B -- AWS SDK --> C C --- D1 C --- D2 ``` ## 🚀 Установка и запуск ### Предварительные требования - [Node.js](https://nodejs.org/) (v20.x или выше) - [npm](https://www.npmjs.com/) или [yarn](https://yarnpkg.com/) - Доступ к бакету Yandex Cloud S3 и сервисный аккаунт с правами на чтение и запись. ### 1. Настройка бэкенда 1. Перейдите в директорию `backend`: ```bash cd backend ``` 2. Создайте файл `.env` на основе примера `.env.example`. Заполните его вашими учетными данными от Yandex Cloud S3: ```env # .env S3_ACCESS_KEY_ID=ВАШ_КЛЮЧ_ДОСТУПА S3_SECRET_ACCESS_KEY=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ S3_BUCKET_NAME=ИМЯ_ВАШЕГО_БАКЕТА ``` 3. Установите зависимости: ```bash npm install ``` ### 2. Настройка фронтенда 1. Перейдите в директорию `frontend`: ```bash cd ../frontend ``` 2. Установите зависимости: ```bash npm install ``` ### 3. Запуск приложения 1. **Запустите бэкенд-сервер.** В директории `backend` выполните: ```bash npm start ``` Сервер запустится на `http://localhost:3001`. 2. **Запустите фронтенд.** В новой вкладке терминала, в директории `frontend`, выполните: ```bash npm run dev ``` Приложение будет доступно по адресу `http://localhost:5173` и будет автоматически проксировать API-запросы на бэкенд. ## 🐳 Docker Приложение полностью готово к запуску в Docker с двумя вариантами интерфейса. ### Доступные образы #### Основная версия (main branch) ```bash git.shts.su/[repository]:latest ``` #### Tabler версия (tabler branch) ```bash git.shts.su/[repository]:tabler ``` ### Быстрый запуск #### Основная версия ```bash docker run -d \ --name s3-lists-manager \ -p 3001:3001 \ --env-file ./backend/.env \ git.shts.su/[repository]:latest ``` #### Tabler версия ```bash docker run -d \ --name s3-lists-manager-tabler \ -p 3002:3001 \ --env-file ./backend/.env \ git.shts.su/[repository]:tabler ``` ### Локальная сборка Для сборки образа выполните команду в корневой директории проекта: ```bash docker build -t s3-lists-manager . ``` ### Запуск контейнера Для запуска контейнера необходимо передать переменные окружения. Это можно сделать с помощью флага `-e` или через `--env-file`. ```bash docker run --rm -p 3001:3001 --env-file ./backend/.env s3-lists-manager ``` После этого приложение будет доступно по адресу `http://localhost:3001`. ### Docker Compose Создайте файл `docker-compose.yml`: ```yaml version: '3.8' services: s3-lists-manager: image: git.shts.su/[repository]:latest container_name: s3-lists-manager ports: - "3001:3001" restart: unless-stopped env_file: - ./backend/.env s3-lists-manager-tabler: image: git.shts.su/[repository]:tabler container_name: s3-lists-manager-tabler ports: - "3002:3001" restart: unless-stopped env_file: - ./backend/.env ``` Запуск: ```bash docker-compose up -d ``` Подробная документация по Docker образам доступна в файле [DOCKER.md](DOCKER.md). ## ⚙️ API Endpoints | Метод | Путь | Описание | |--------|---------------|----------------------------------| | `GET` | `/api/domains`| Получить список всех доменов. | | `POST` | `/api/domains`| Сохранить изменения в `domains.txt`. | | `GET` | `/api/asns` | Получить список всех AS. | | `POST` | `/api/asns` | Сохранить изменения в `asns.txt`. | | `GET` | `/api/servers`| Получить список всех серверов. | | `POST` | `/api/servers`| Сохранить изменения в `servers.json`. |