Caution
ВНИМАНИЕ, ЭТО УЧЕБНЫЙ ПРОЕКТ, ИСПОЛЬЗУЙТЕ ЭТОТ ПРОЕКТ НА СВОЙ СТРАХ И РИСК. Он больше не обновляется!!!
Здесь предоставлена инструкция по системе (сайту, проекту) SQLMi.
Все команды прописываются в главном разархивированом каталоге проекта (там где файл docker-compose.yml), если не указано иное
Для запуска проекта, необходим Docker, и подключение к интернету. Сперва перейдите в каталог, в котором находится распакованный архив и пропишите там команду:
docker-compose up -d --buildЕсли произошла ошибка при сборке, перейдите сюда
Эта команда запускает сборку всего проекта, по окончании сборки сайт будет запущен по пути http://localhost:3000 (порт может быть другим, или сайт может быть недоступен, если порт 3000 будет занят). При запуске Backend автоматически создает супер админа с логином admin и паролем admin123 (Backend при каждом запуске проверяет, есть ли пользователь с логином admin, и если отсутсвует, то создает его)
Так же посмотрите какие контейнеры запущены (должны быть sqlmi-frontend, sqlmi-backend, postgres:15-alpine, redis:7-alpine, minio/minio:latest) командой в главном каталоге проекта:
docker psДля просмотра логов запуска, пропишите команду:
docker-compose logsИли просмотр логов конкретного контейнера:
docker-compose logs [IMAGE, например sqlmi-frontend]Для остановки проекта, необходимо прописать команду в главном каталоге:
docker-compose downПроект был реализован отдельно Backend и Frontend. PostgreSQL, MinIo, Redis - запускаются с настройками через Docker
Backend: Java + Spring Boot (Spring Security, Hibernate, Lombok). Доступен по адрессу http://localhost:8080/api
Frontend: TypeScript + Node + Next (React, Axios). Доступен по адрессу http://localhost:3000
MinIo: Доступен веб интерфейс по адрессу http://localhost:9001 (логин admin, пароль password123), S3 API по адрессу http://localhost:9000
Redis: По адрессу http://localhost:6379
PostgreSQL: По адрессу http://localhost:5432 (логин sqlmi_user, пароль sldadslaljd919210jo9a, бд sqlmi_db)
Логирование stdout реализовано в файле ./logs/application.log
В системе существует 3 вида ролей у пользователя, это SUPER_ADMIN, ADMIN, USER.
USER: Может только авторизироваться; просмотр информации о схем и таблицах (только просмотр), выполнение SELECT запросов (одиночных), просмотр своей истории, скачивание CSV результатов
ADMIN: Тоже самое что и USER, только он может так же CRUD операции над схемами, создание таблиц, выполнение любых SQL запросов (включая множественные)
SUPER_ADMIN: Тоже самое что и ADMIN, только так же просмотр всей истории всех пользователей, CRUD операции над подключениями (над внешними БД, называются в проекте подключение), CRUD операции над пользователями (включая создание других супер админов)
Наш Frontend является оберткой над Backend, даже если изменив допустим роль в localStorage, Backend все равно не пропустит такое. Так же в случае возникновение непредвиденных ошибок (500), Backend выдаст ошибку, но не ляжет, а даже если ляжет, то Docker его подымит :)
Авторизация осуществляется через JWT систему. Пользователю при вводе логинаи пароля, выдается access токен (15 минут жизни, не проверяется в БД никогда) и refresh токен (в защищенных куки, жизнь больше 20 дней, всегда проверяется его наличие в бд). Далее Frontend сохраняет access токен в localStorage включая время через сколько истекет, и за минуту до истечение обновляет токены с помощью refresh токена (так же у пользователя стерается в бд старый refresh, и выдается новый). У пользователя максимум вход на одном устройстве может быть.
Все ответы, ошибки Backend стандартизированы, и имеют всегда значение success. В случае успешного имеют так же параметр data, в случае ошибки code, message, timestamp, errors (это список ошибок, например при валидации данных)
S3 хранилище хранит только файлы CSV из истории пользователей, для получение этих файлов используется Backend для защиты результатов (только свои файлы можно получить)
Данные PostgreSQL хранятся в хранилище, так что при перезапуске вы не потеряете их.
На сайте так же реализована система уведомлений, модальные окна
Если при запуске проекта пишется ошибка скачивание образов (node, maven, и тд), необходимо добавить зеркала в Docker Engine. Откройте Docker Desktop, перейдите в настройки, и там перейдите в Docker Engine
Далее добавьте в конец параметры зеркала от Beget (см. скриншот выше)
"registry-mirrors": [
"https://dockerhub1.beget.com",
"https://mirror.gcr.io"
]

