Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

169 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Caution

ВНИМАНИЕ, ЭТО УЧЕБНЫЙ ПРОЕКТ, ИСПОЛЬЗУЙТЕ ЭТОТ ПРОЕКТ НА СВОЙ СТРАХ И РИСК. Он больше не обновляется!!!

Документация к SQLMi

Здесь предоставлена инструкция по системе (сайту, проекту) 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 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 (это список ошибок, например при валидации данных)

error 401

S3 хранилище хранит только файлы CSV из истории пользователей, для получение этих файлов используется Backend для защиты результатов (только свои файлы можно получить)

Данные PostgreSQL хранятся в хранилище, так что при перезапуске вы не потеряете их.

На сайте так же реализована система уведомлений, модальные окна

Ошибки

Если при запуске проекта пишется ошибка скачивание образов (node, maven, и тд), необходимо добавить зеркала в Docker Engine. Откройте Docker Desktop, перейдите в настройки, и там перейдите в Docker Engine

docker engine

Далее добавьте в конец параметры зеркала от Beget (см. скриншот выше)

"registry-mirrors": [ 
    "https://dockerhub1.beget.com", 
    "https://mirror.gcr.io" 
]

About

Это учебный проект, по созданию Web-интерфейса для выполнение SQL запросов к PostgreSQL

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages