Проект представляет собой хостинг с панелью управления, построенный на основе микросервисной архитектуры(gRPC и REST). Для внешних клиентов используется API Gateway, а Nginx служит в качестве обратного прокси-сервера, маршрутизируя запросы и перенаправляя трафик с портов микросервисов и пользоватлеьских контейнеров.
Данные пользователей хранятся в PostgreSQL(своя бд для каждого сервиса), а проекты загружаются в S3-хранилище, которое реализовано в storage-microservice Для эфеективности и ускорения доступа к данным используется Redis в project-microservice. Для обеспечения безопасности взаимодействий с системой применяются JWT-токены.
-
Authentication
Микросервис, отвечающий за регистрацию вход и авторизацию пользователей. Для защиты данных и безопасного доступа используются JWT-токены. Взаимодействие между сервисами реализовано через gRPC. -
Billing
Модуль для управления тарифами, выставления счетов и обработки платежей. На данный момент находится в стадии разработки. -
Project
Микросервис для управления проектами пользователей. Использует Redis для кэширования данных, что ускоряет операции и снижает нагрузку на базу данных. -
Storage
Микросервис для работы с файлами пользователей. Хранение данных реализовано через S3-хранилище, обеспечивающее безопасность, масштабируемость и доступность файлов. -
Control Panel
Центральный интерфейс, через который пользователи взаимодействуют с системой. Панель управляет созданием проектов, загрузкой файлов и запуском хостинг-проектов. Взаимодействие между пользователем и микросервисами проходит через API Gateway и Nginx (в разработке).
- Go — основной язык программирования для разработки микросервисов.
- gRPC — для внутреннего взаимодействия между микросервисами.
- API Gateway — обрабатывает внешние запросы и маршрутизирует их к соответствующим сервисам.
- JWT-токены — для обеспечения безопасной аутентификации и авторизации.
- Nginx — выполняет роль обратного прокси-сервера и маршрутизирует запросы.
- Docker — для контейнеризации микросервисов, а также проектов пользователя.
- PostgreSQL — основная база данных для хранения информации о пользователях, проектах и платежах. Используется за счет ее надежности, простого использования, и масштабируемости.
- Redis — применяется в project-microservice для кэширования данных.
- S3-хранилище — используется для масштабируемого хранения файлов в рамках storage-microservice.
- Frontend - используется для отображения интерфейса взаимодействия между клиентом и сервисами
Все взаимодействия пользователей с системой происходят через панель управления. Это центральный интерфейс, где пользователи могут:
- Регистрироваться и входить в аккаунт, получая доступ к панели.
- Создавать проекты.
- Загружать файлы.
- Запускать свои хостинг-проекты.
- Пользователь регистрируется и входит в аккаунт через JWT.
- Создает проект через панель управления.
- Загружает файлы, которые сохраняются в S3-хранилище через storage-microservice.
- Запускает проект, взаимодействуя с project-microservice.
- Проект становится доступным через локальный адрес, а также при запуске на специальном хосте по доменному имени projectname.ghst.tech. , где пользователь может выбрать имя поддомена.
В проекте реализованы ключевые паттерны для обеспечения надежности и отказоустойчивости: Graceful Shutdown Все микросервисы поддерживают корректное завершение работы (graceful shutdown). Это позволяет завершать активные запросы перед остановкой, корректно закрывать соединения с базами данных и внешними сервисами, а также освобождать ресурсы.
Retry с экспоненциальной задержкой В случае ошибок в критическом месте (например, при создании проекта или временной недоступности сервисов) реализован механизм повторных попыток (retry) с экспоненциальной задержкой: 1, 2, 4, 8 секунд. Это позволяет справляться с временными сбоями, не перегружая систему повторными запросами.
По ссылке на диске можно увидеть видео пример использования сервиса при локальном запуске и хостинге с использованием Nginx для перенаправления запросов из сети по адресу http://hello.ghst.tech:8080/ (
- Установите Docker.
- Убедитесь, что у вас установлен Go (v1.20+)
git clone https://github.com/fluffy11lol/PanelHosting
cd PanelHosting
Соберите проект и разверните его:
docker-compose up --build
Storage-microservice необходимо запускать вручную через main.go, так как через Docker он пока не работает
cd .\src\services\storage-microservice\
go run .\cmd\main\main.go
- Перейдите на localhost:8082/dashboard.
- Зарегистрируйтесь или войдите в систему (используется JWT для авторизации).
- Создайте проект и загрузите zip-архив, содержащий ваш код (включая Dockerfile и docker-compose.yaml).
- Нажмите "Старт"(на фронте нечего не произойдет, но там где вы запустили storage-microservice вы увидите логи как запустился ваш докер контейнер).
- Перейдите на localhost:(порт из вашего проекта в примере 8090) для проверки работы.
- Если возникли ошибки, вернитесь к шагу 3 и проверьте правильность структуры проекта.