Como funciona?


Strona internetowa
Local na rede Internet

O aplicativo usa o runtime do Node.js - ele gera um site com um painel de controle. Os elementos de página variáveis ​​são armazenados no banco de dados MySQL que é replicado entre os servidores. O aplicativo é baseado no potencial dos containers Docker, ele é executado para produção em um cluster Kubernetes. Para garantir a rápida implementação do código, utilizamos a técnica CI/CD com auxílio dos serviços GitLab e Docker Hub.
A página para o usuário é entregue do servidor mais próximo através de um serviço da Cloudflare. As máquinas de produção se comunicam via VPN WireGuard trabalhando em uma configuração de malha. A infraestrutura foi projetada para alta disponibilidade e capacidade de escalar rapidamente.

Tecnologias usadas:

  • Node.js - ambiente de tempo de execução para criar aplicativos escritos na linguagem JavaScript com na qual o aplicativo foi criado
  • Nginx - funciona como um servidor proxy entre o aplicativo e a Cloudflare
  • Kubernetes - é a plataforma na qual nosso aplicativo é executado, permitindo um rápido escalonamento
  • GitLab - permite automatizar o processo de implementação de software
  • Cloudflare - permite entregar conteúdo do servidor mais próximo ao usuário, permite distribuir uniformemente a carga entre os servidores

Sterownik
Controle de luz

As informações sobre o Corach ou efeitos são enviadas para o controlador no local determinado através do software Socket.io. Cada um de nós possui drivers proprietários diferentes, mas tudo é baseado no código do cliente escrito na linguagem de programação JavaScript. Para iluminação utilizamos: placas com relés, controladores de brilho PWM, diodos programáveis, fitas de LED. Um pequeno computador Raspberry Pi ou um microcontrolador ESP8266 / ESP32 é mais frequentemente útil para a implementação do todo. O software WLED ou ESP Easy está instalado no microcontrolador.

Tecnologias usadas:

  • Socket.io - fornece comunicação bidirecional entre o usuário no site, nosso aplicativo e elementos executivos
  • Redis - é um banco de dados rápido e volátil, ele troca informações sobre as configurações de luz atuais
  • WLED - software de código aberto para microcontroladores ESP8266/ESP32 - usado para controlar LEDs programáveis
  • ESPEasy - software de código aberto para microcontroladores ESP8266/ESP32 - usado para controlar LEDs PWM Corowe e placas de relé
  • Raspberry Pi - computador de placa única - geralmente atua como uma ponte entre o lado do controle e as luzes

Karty graficzne w serwerze
Transmissão de Imagem

Nosso serviço de streaming é construído com base nos princípios de microsserviços, o que garante excepcional flexibilidade e escalabilidade da infraestrutura. Utilizando configurações de docker-compose, criamos um ambiente coeso que é tanto fácil de gerenciar quanto altamente configurável.
O nginx-rtmp serve como receptor do sinal de vídeo, sendo o primeiro ponto de processamento do fluxo e gerenciamento de autorização. Em seguida, o sinal é direcionado para o OvenMediaEngine, onde ocorre o processamento adicional para entregar a transmissão com o menor atraso possível. Na configuração atual, não realizamos a transcodificação de imagem, o que permite uma distribuição muito rápida do material para o usuário final.
O sistema utiliza scripts para sincronização e geração de miniaturas, que são então distribuídos entre servidores usando rsync. Isso torna o processo automatizado e eficiente, garantindo atualizações constantes sem sobrecarregar a rede.

Tecnologias usadas:

ELK Kibana
Monitoramento

Toda a nossa infraestrutura e aplicação são monitoradas e testadas 24 horas por dia, 7 dias por semana. O monitoramento de disponibilidade é fornecido pelo Uptime Kuma, Uptime Robot, Zabbix e LibreNMS. Usamos o software Elasticsearch para monitorar eventos de aplicativos. Monitoramos parâmetros de hardware e desempenho de máquinas virtuais usando o Zabbix.

Tecnologias usadas:

  • ELK Stack: Elasticsearch, Logstash, Kibana - Coletor de eventos do aplicativo
  • Uptime Kuma - monitora a operação do aplicativo e nos notifica rapidamente sobre problemas por meio de mensagens sociais
  • uptimerobot.com - monitoramento de aplicativos de backup
  • LibreNMS - é usado para monitorar a camada de rede e a infraestrutura do servidor
  • Zabbix - é usado para monitorar os parâmetros dos recursos de hardware

Drukarka termiczna
Impressora térmica

A ideia de compartilhar uma impressora foi completamente espontânea. Para esta tarefa, queríamos escolher uma impressora que fosse tão livre de manutenção quanto possível. Depois de passar por muitas ofertas, escolhemos a impressora Epson TM-T88IV. A impressora suporta o padrão ESC/POS, então você pode "escrever" nela utilizando bibliotecas prontas disponíveis na Web.
Nosso script proprietário, utilizando a biblioteca DiscordPHP, é responsável por enviar mensagens do Discord para o impressora. Uma mensagem apropriada é gerada e enviada ao RabbitMQ.
Nossa biblioteca proprietária é responsável por enviar mensagens do Tipply, que também se comunica com o RabbitMQ. Usamos RabbitMQ para enfileirar mensagens de saída para a impressora. A impressora está conectada ao computador com uma porta RS232, que não conseguia acompanhar um grande número de mensagens - é por isso que enfileiramos as mensagens.

Itens usados ​​para esta parte do projeto:

  • EPSON TM-T88IV - 160 BRL
  • Kamera Logitech C920 - 370 BRL
  • Kabel/Konwerter USB na RS232 - Unitek + adaptador DB9F/DB25M - 42 BRL
  • Karta graficzna GTX 750 Ti - 445 BRL
  • Cabo de modem nulo - feito à mão a partir dos cabos que você possui
  • Lâmpada adicional - cerca de 30 BRL
  • Rolos 80mm / 80m - 5 BRL / peça
  • Servidor SuperMicro (transmissão)
  • Computador Intel NUC (suporte à impressora)
Programas:
  • https://github.com/mike42/escpos-php
  • https://github.com/discord-php/DiscordPHP
  • RabbitMQ
  • ...e scripts proprietários

Você tem perguntas adicionais? Você quer saber mais?

Veja também a aba "Sobre os autores"

Junte-se a nossa comunidade!

Fanpage no Facebook

Vá para o Facebook

Bate-papo por texto e voz no Discord

Junte-se no Discord