Profile Banner
Stormic

код, GitHub и ты

Создано

14.04.2025 г.

0

подписчиков

23.05.2025

Что новенького? Серверные сводки

Приветствую! )

Как я уже упоминал ранее, на ближайший месяц я немного замедлился с регулярными обновлениями. Но это вовсе не означает простой – за этот период я активно занимаюсь техническим долгом и кардинально обновляю архитектуру проекта.

Что происходит?

Изначально Stormic был монолитом на Next.js, где клиент и сервер жили в одном приложении. Это удобно на старте, но по мере роста проекта такой подход тормозит развитие: увеличивается сложность кода, растут задержки и все остальные прелести. Чтобы избавиться от накопленного долга, я разбиваю систему на две части:

  1. Тонкий клиент на Next.js – отвечает исключительно за рендеринг и базовую логику взаимодействия с пользователем.
  2. Толстый сервер на Go – вся бизнес-логика, обработка данных и интеграции выносятся на бэкенд.

Новый сервер: как работает?

  • Язык и производительность Сервер полностью переписан на Go – это даёт нам высокую скорость исполнения и низкое потребление ресурсов.
  • gRPC внутри Я выбрал gRPC для внутреннего API и связи между микросервисами. Благодаря бинарному протоколу сократились задержки и объёмы передаваемых данных.
  • REST-прокси для внешних интеграций Чтобы сторонние разработчики не ломали головы над gRPC, прямо поверх него работает REST-слой. Вы можете отправлять привычные HTTP-запросы, а сервер автоматически проксирует их во внутренний gRPC и обратно. Это вам понадобится, если вы в будущем захотите, например, написать бота который будет модерировать ваше сообщество.
  • OpenAPI и Swagger REST-эндпойнты документируются по стандарту OpenAPI. Генерируется удобная Swagger-документация – быстрое погружение в API и тестирование прямо из браузера.
  • GraphQL для клиента Внутренние запросы от клиента теперь идут по GraphQL. Это позволяет запрашивать ровно столько данных, сколько нужно, и сводит к минимуму избыточные обращения к серверу.
  • ORM Ent и PostgreSQL Для работы с базой данных используется мощный и типобезопасный Ent ORM.

Реальный прирост скорости

Одно из главных достижений – сокращение числа запросов.

  • Раньше: чтобы получить информацию о правах пользователя, шло до 6 REST-запросов.
  • Сейчас: один GraphQL-запрос возвращает всё сразу.

Аналогичная ситуация с отрисовкой хэдера: раньше задействовалось до 4х запросов (сам заголовок плюс два модальных окна), а теперь – всё в одном запросе. Благодаря этому клиент стал «тоньше» и реагирует на действия мгновенно.

Кэширование запросов

Добавлен многоуровневый кэш:

  1. Прямой запрос на сервер – для самых свежих данных.
  2. «Сначала кэш, потом сервер» – показываем данные из кэша, затем обновляем, если что-то изменилось.
  3. Только из кэша – не идём в базу, если нам важна скорость отображения, а данные уже есть.

Это гибкое решение позволяет в зависимости от задачи выбирать оптимальный режим.

Порты и маршрутизация

Сервер работает сразу на трёх портах:

  • 8080 → GraphQL Для внутренних запросов от клиента.
  • 4080 → REST HTTP Входящие REST-запросы превращаются в gRPC и обратно.
  • 4000 → чистый gRPC Для микросервисов и тех, кто готов работать напрямую по протоколу gRPC.

Что дальше?

На этом этапе архитектура сервера практически готова. Остаётся дописать на клиенте запросы под GraphQL и настроить обработку ответов – однотипная, но важная работа. Судя по планам, я даже +/- успеваю уложиться в отведённый месяц.

После полного перехода на новую бэкенд-часть запланированы:

  1. Личные сообщения и уведомления
  2. Улучшенная работа с изображениями
    • Кадрирование и выбор области показа.
    • Управление порядком отображения при загрузке нескольких картинок.

Спасибо, что следите за развитием Stormic! Впереди много интересного, и ваша поддержка вдохновляет меня двигаться дальше. До новых апдейтов!

Если вам нравится то, что тут происходит, то

Boosty

для вас и это невероятно мотивирует продолжать заниматься всем этим.
Не менее мотивирует и помогает, если вы будете рассказывать о Stormic другим людям везде, где это уместно.

Что новенького? Серверные сводки

0

157

15.05.2025

Stormic: установка на VPS и локально

Добрый день.
Сегодня у нас небольшой пост, который должен был появится еще недельку назад, но тем не менее он все же дошел, хотя бы сейчас. Так вот, установка!
Хочу вас сразу предупредить, что это еще совсем не то, что можно назвать "продакт реди". Это больше из разряда "посмотреть и пощупать". База данных, как минимум еще раз, сильно изменится в ближайшем будущем и вам стоит дождаться версии с новой архитектурой БД, прежде чем пытаться поднять на Stormic что-то большое и полноценное. С обновлением базы данных придут еще некоторые ключевые, необходимые функции, типа уведомлений, рейтинга и личных сообщений.

Сегодня я расскажу о том, как запустить Stormic по пути наименьшего сопротивления. В целом, разницы никакой не будет между тем, что вы захотите это запустить у себя на локалке, либо на полноценном VPS сервере. Так же, покажу еще одно open-source ПО, которое вам точно понравится.

Запускать будем на убунту, в целом любой, но проверенная временем - 22.04.

Если ваш cloud провайдер сразу дает возможность купить сервер с утановленным докером, то берите с докером, если нет, то давайте поставим:

1. Docker

  • Сначала удалим все, что касается докера на сервере, чтобы установка 100% была чистой
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
  • Добавим репозиторий докера
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  • Ну и ставим сам докер
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2. Dokploy

Дальше поставим то самое open source ПО, которое вам точно понравится - dokploy.

Он позволяет собирать и управлять контейнерами докера в удобном веб-интерфейсе.

Ставим:

curl -sSL https://dokploy.com/install.sh | sh -s update

На этом его установка закончена и после небольшого ожидания он вам скажет на каком адресе найти его веб-интерфейс.

Перейдя по указанному адресу вы увидите окно регистрации. Регистрируетесь.

Здесь, на вкладке Web Server, вы можете установить свой домен для dokploy (если DNS записи вашего домена указывают на ваш VPS сервер) и тогда интерфейс dokploy будет доступен на вашем домене.

3. PostgreSQL

  • На вкладке Projects нажимаете кнопку Create Project, это просто название папки, чтобы группировать ваши сервисы.
  • В новой созданной папке нажимаете Create Service и выбираете Database:
Image
  • Выбираете PostgreSQL, задаете имя сервиса (тут stormic-db в примере)
  • Задаете Database Name, Database User и Database Password:
Image
  • Нажимаете Create
  • Заходите в новую созданную базу данных, внизу страницы в External Credentials задаете порт, ну например 5442
Image
  • Нажимаете кнопку Deploy вверху страницы.

На этом база данных запущена и готова к подключениям.

4. RabbitMQ

Он нам необходим для работы всего, что не требует моментального изменения в бд: лайки постов, лайки коментов, закладки и прочие вещи.

  • Возвращаетесь обратно в папку проекта, снова нажимаете Create Service, выбираете Compose, вводите name и нажимаете Create.
  • Заходите в созданный сервис, в Provider выбираете Raw и сохраняте там следующее
version: "3.8"
services:
  rabbitmq:
    image: rabbitmq:3-management
    container_name: rabbitmq_dev
    env_file: .env
    restart: always
    networks:
      - dokploy-network
    ports:
      - '5672:5672' # порт для AMQP
      - '15672:15672' # порт для панели управления RabbitMQ
networks:
  dokploy-network:
    external: true
Image
  • Нажимаете Save и переходите на вкладку Environment и сохраняете там следующее
RABBITMQ_DEFAULT_USER=stormic
RABBITMQ_DEFAULT_PASS=very_secret_password
RABBITMQ_DEFAULT_VHOST=/
RABBITMQ_MANAGEMENT_PORT=15672
RABBITMQ_AMQP_PORT=5672
Image
  • Нажимаете Save
  • Возвращаетесь на вкладку General и нажимаете Deploy

На этом RabbitMQ запущен.

5. SMTP и S3

Так же вам понадобится SMTP сервис, который будет отправлять почту о успешной регистрации, подверждении email и прочее. Ну и где хранить все эти видео, картинки и гифки - S3 корзина.

S3 можно получить тут же бесплатно, если вы установить Minio (это я объяснять не буду тут, потому что настройка ведра для работы там - это отдельный пост). Поэтому я посоветую вам получить и SMTP и S3 у того же провайдера, у кого вы купили сервер, например TimeWeb Cloud. Берете SMTP и корзину S3, получаете данные для подключения к ним и возвращаетесь, а мы продолжим.

6. Stormic

Ну вот мы и пришли к тому, ради чего мы тут. Это уже самое простое.

  • Возвращаетесь в папку Projects, где у вас уже лежит база данных и RabbitMQ. Снова нажимаете Create Project и выбираете Application. Вводите name (например Worker) и нажимаете Create.
  • Переходите на вкладку Git и указываете ссылку на репозиторий проекта:
https://github.com/stormhead-org/stormic
  • В Branch сохраняете
beta-003-update
Image
  • Нажимаете Save
  • Переходите на вкладку Environment и сохраняете там следующее
NEXT_PUBLIC_SERVER_URL=https://example.app
NEXT_PUBLIC_BASE_URL=example.app

DATABASE_URI=postgresql://stormic:very_secret_password@ip_your_server:5442/stormic
PAYLOAD_SECRET=DR1LeNrpluu7O7hNHvOKpM6 #задайте тут что-то случайное
PREVIEW_SECRET=QuU1ym9cUa8wFMHf8HcgJHwt #задайте тут что-то случайное
CRON_SECRET=k32UuyPrEoNf5xKp4BwHnvHp #задайте тут что-то случайное

SMTP_HOST=smtp.timeweb.ru #если вы использовали timeweb
SMTP_USER=staff@stormhead.org #почта, которую вы используете для SMTP
SMTP_PASS=your_password #ваш пароль от SMTP

S3_BUCKET=stormic #название корзины
S3_REGION=ru-1 #если есть
S3_ENDPOINT=https://s3.example.ru #эндпоинт вашего провайдера
S3_ACCESS_KEY_ID=nMp6Q3lZq #вам его выдали при регистрации корзины
S3_SECRET_ACCESS_KEY=7ngqqC9zKy #вам его выдали при регистрации корзины

RABBITMQ_URL=amqp://stormic:very_secret_password@ip_your_server:5672

#NEXT_PUBLIC_YANDEX_METRIKA=234324232 #указываете ваш ID, чтобы получать стастистику. Это указывать необязательно
  • Сохраняете это и переходите на вкладку Advanced и вводите там в Run Command
pnpm start:workers
  • Сохраняете и на этом нажимаете кнопку Deploy.

На этом мы запустили воркеров, которые работают параллельно с основным сайтом, обрабатывают очереди из RabbitMQ и выполняют запросы в API.

  • Теперь просто создайте еще один сервис, назовите его (например app) и проделайте все то же самое, что вы только что сделали со Stormic, только на вкладке с Advanced не указывайте pnpm start:workers, вообще ничего там не указывайте. А так все то же самое. Во вкладке Domains задайте ваш домен, где будет работать Stormic
Image
  • В хост задаете ваш домен, который будет использоваться для платформы.
  • Path не трогаете, оставляете /
  • Port задаете 3000
  • Включаете HTTPS
  • Выбираете Let's Encrypt
  • Нажимате Create

После этого нажимаете Deploy, ждете пока это все соберется и запустится, этот процесс виден в соответствующих вкладках logs и deployments

Готово

Stormic запущен и работает на вашем домене.

localhost

Можете запустить Sotrmic локально.

  • Где-то получаете PostgreSQL, RabbitMQ, SMTP, S3

Можете сделать все то же самое и у себя на локалке, что мы написали выше. Можете все это получить у какого нибудь Cloud провайдера.

  • Устанавливаете себе nodejs

Можете скачать тут (ссылка)

  • Устанавливаете pnpm

Можете скачать тут (ссылка)

  • Скачиваете себе beta ветку репозитория куда-то на пк
git clone https://github.com/stormhead-org/stormic.git
  • Заходите в директорию репозитория куда вы его скачали, создаете в корне проекта файл .env (именно с точкой в начале)
  • Сохраняете в него то, что мы сохраняли выше в Environment, например
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
NEXT_PUBLIC_BASE_URL=localhost

DATABASE_URI=postgresql://stormic:very_secret_password@ip_your_server:5442/stormic
PAYLOAD_SECRET=DR1LeNrpluu7O7hNHvOKpM6 #задайте тут что-то случайное
PREVIEW_SECRET=QuU1ym9cUa8wFMHf8HcgJHwt #задайте тут что-то случайное
CRON_SECRET=k32UuyPrEoNf5xKp4BwHnvHp #задайте тут что-то случайное

SMTP_HOST=smtp.timeweb.ru #если вы использовали timeweb
SMTP_USER=staff@stormhead.org #почта, которую вы используете для SMTP
SMTP_PASS=your_password #ваш пароль от SMTP

S3_BUCKET=stormic #название корзины
S3_REGION=ru-1 #если есть
S3_ENDPOINT=https://s3.example.ru #эндпоинт вашего провайдера
S3_ACCESS_KEY_ID=nMp6Q3lZq #вам его выдали при регистрации корзины
S3_SECRET_ACCESS_KEY=7ngqqC9zKy #вам его выдали при регистрации корзины

RABBITMQ_URL=amqp://stormic:very_secret_password@ip_your_server:5672

#NEXT_PUBLIC_YANDEX_METRIKA=234324232 #указываете ваш ID, чтобы получать стастистику. Это указывать необязательно
  • Открываете в директории этой папки два консольных окна и в одном сначала вводите
pnpm i
  • Нажимаете Enter
  • После завершения, в этом же окне вводите
pnpm start:workers
  • Нажимаете Enter
  • В другом окне вводите
pnpm dev
  • Нажимаете Enter

На этом у вас на адресе http://localhost:3000 запущен Stormic и вы можете его пощупать сами.

Финал

И так, теперь вы можете запустить Stormic как у себя локально, так и полноценно на VPS сервере с SSL сертфикатами и вашим доменом.

Надо сказать, что это временный вариант. В будущем вы сможете его установить просто запустив в консоле

curl -sSL https://stormhead.org/stormic/install.sh | sh

И установочный скрипт сделает все за вас. Вам нужно будет только отвечать на пару вопросиков да/нет и все.

Так же напоминаю, если у Вас есть возможность поддерживать проект финансово, чтобы хотя бы оплачивать сервер, то Вы можете подписаться на Boosty.

Отдельное спасибо первому патрону на бусти, которого привлек этот проект:

  • Андрей Федорко

Жду ваших вопросов в коментах

Спасибо, что проявляете интерес к проекту. Вместе мы сможем многое )

Stormic: установка на VPS и локально

0

237

12.05.2025

Фидбэк и то, что должно работать, но работает неочевидно

Добрый день

Соберем то, что работает как-то неочевидно, неудобно или с ошибками в едином посте, куда можно будет заходить, дописывать и дополнять найденные ошибки или идеи по улучшению.

  1. Коменты в постах грузятся долго;
  2. Нужно скрыть меню с точками в шапке постов, если у вас нет каких-либо резрешений на модерацию или измененя поста;
  3. Добавить возможность просматривать изображения в теле поста;
  4. В админке сообщества, модальные окна для блокировки пользователей не оптимизированы под мобильные устройства;
  5. В админке сообщества светлая тема имеет некорректные цвета из-за чего некоторые элементы сложно читаемы;
  6. Переработать отображение даты публикации поста, чтобы оно было не под кнопкой подписки;
  7. Убрать возможность вступать и покидать свои же сообщества, где вы являетесь владельцем, пока не передадите сообщество новому владельцу;
  8. Исправить все, что касается поисковой выдачи в поисковиках.

Это касаемо ошибок.

По улучшению взаимодействия с платформой было бы неплохо собрать все ваши идеи тут. Они могут быть любые: начиная от того что куда-то перенести какую-то кнопку, до идей по кастомизации профилей сообществ и юзеров.

Фидбэк и то, что должно работать, но работает неочевидно

0

203

07.05.2025

Обновление v0.0.3-beta

Что новенького?

  1. Ну из очевидного - появилась мобильная версия. Не без грехов конечно, однако для первого времени сойдет. Потихоньку допилим все шероховатости, отступы, состояния и прочие мелочи;
  2. Новая тема. Старая темная тема никуда не делась, верну ее в каком-то ближайшем обновлении и можно будет выбрать из 3х тем: светлая, эта черно-желтая и старенькая темно-синя;
  3. Оптимизирована работа с изображениями. Больше мы не грузим исходное изображение, а везде уже использует ужатые и оптимизированные к вебу. Тем не менее, вы все еще можете нажать на скрепку на прикрепленных изображениях в коментах и получить ссылку на исходное изображение, не ужатое;
  4. Миллиард оптимизаций компонентов и импортов, чтобы оно все двигалось немного быстрее.

Что дальше?

Думаю, что в ближайший месяц будут только исправления и минорные обновлениям, какие-то допиливания мобилки и вообще ui. А через месяц я постараюсь придти к Вам с огромным обновлением, которое значительно ускорит скорость работы абсолютно каждого момента платформы, уведомлениями и личными сообщениями. Еще на главной странице вверху можно будет удобно закреплять посты буквально в одну строку, то есть не целая карточка поста закрепленного будет,  а одна строка с кастомным названием типа "Результаты розыгрыша за апрель" (в названии этой строки будете писать сами что хотите и указываете пост на который ссылаетесь) и клик по строке ведет на соответствующий пост.

Что скажите по мобильной версии и новой теме? Стоит ли возвращать старую синюю? 

Еще хотелось бы напомнить, чтобы вы можете ставить звездочки на
гитхабе (клик) - это супер классно и невероятно мотивирует. Не меньше мотивирует и то, что вы можете рассказывать о проекте где это будет интересно и где это уместно. Отклик и Ваша заинтересованность супер мотивирует. Спасибо 

Так же напоминаю, если у Вас есть возможность поддерживать проект финансово, чтобы хотя бы оплачивать сервер, то Вы можете подписаться на Boosty.

Отдельное спасибо первому патрону на бусти, которого привлек этот проект:

  • Андрей Федорко

Всем хороших праздников и выходных. Всего доброго )

Обновление v0.0.3-beta

0

319

24.04.2025

Обновление v0.0.2-beta

Доброго времени суток.
Немного информации о том, что у нас тут обновилось за неделю

Что нового?

  1. Добавлены иконки ролей юзеров в посты и комментарии;
  2. Закрепление постов в левом меню навигации;
  3. Ссылки на социальные сети в левом меню платформы;
  4. Счетчик постов сообщества в карточке сообщества;
  5. Отдельная страница со всеми пользователями платформы.

Баги и исправления:

  1. Добавлены обработчики ошибок для юзеров, сообществ и постов. Теперь корректно отображается информация, если что-то не найдено, забанено или удалено;
  2. Исправлены сокеты для работы с корзиной s3. Теперь сокеты корректно разрывают соединение по таймауту и не уходят в оверкап, когда никакие изображения на платформе не загружаются, потому что нет свободных сокетов;
  3. Не загружались аватарки авторов постов на странице закладок и в ленте пользователя. Теперь работают корректно;
  4. Удалены элементы, которые не имели функционала. Потом вернутся, когда к ним будет добавлен функционал. Теперь выглядит немного чище;
  5. Исправлено отсутствие визуального выделения текста в темной теме;
  6. Множество мелких исправлений, отступов, цветов;
  7. Оптимизированы импорты и компоненты, чтобы структура проекта стала проще.

Какие ошибки известны?

  1. Немного некорректно формируется древо комментариев под постами, их вложенность.

Что дальше?

В следующем обновлении будет добавлена полная мобильная адаптация платформы, так же реализована стартовая инициализация базы данных, чтобы вам не пришлось сидить базу данных ручками. С этого обновления вы сможете легко посмотреть на платформу у себя на локалке или VPS сервере.

Всем спасибо )

Обновление v0.0.2-beta

0

572