Sign inSign up

wkarts/webhookmultidb

By wkarts

Updated almost 2 years ago

Webhook MultiDB

Image
0

216

wkarts/webhookmultidb repository overview

# Webhook MultiDB

Webhook MultiDB é um sistema escalável de gerenciamento de webhooks com suporte a múltiplos bancos de dados.
Ele permite gerenciar, criar e executar webhooks de forma eficiente, com suporte a filas de processamento usando RabbitMQ,
integração com Redis ou MongoDB para armazenamento dinâmico, e autenticação JWT para garantir a segurança.

## Funcionalidades

- Criação e gerenciamento de webhooks.
- Suporte a múltiplos bancos de dados, como PostgreSQL e MySQL, para clientes diferentes.
- Execução assíncrona de webhooks com RabbitMQ.
- Monitoramento de mudanças em bancos de dados PostgreSQL (usando `LISTEN/NOTIFY`) e MySQL (usando polling).
- Armazenamento flexível utilizando Redis ou MongoDB, configurável via variáveis de ambiente.
- Autenticação JWT para proteger a API.
- Logs estruturados com Winston.
- Monitoramento com Prometheus.
- Documentação da API com Swagger.

## Tecnologias Utilizadas

- **Node.js**: Plataforma para execução do JavaScript no lado do servidor.
- **Express.js**: Framework web para Node.js.
- **MongoDB**: Banco de dados NoSQL usado para armazenar as informações dos webhooks.
- **Redis**: Armazenamento opcional para configurações de monitoramento e execução de webhooks.
- **RabbitMQ**: Fila de mensagens usada para processar webhooks de forma assíncrona.
- **JWT**: Autenticação segura para a API.
- **Docker**: Containerização da aplicação para fácil deploy.
- **Docker Compose**: Orquestração dos containers da aplicação, banco de dados e fila de mensagens.
- **Winston**: Ferramenta de logging.
- **Prometheus**: Ferramenta de monitoramento.

## Requisitos

- **Node.js** (v16 ou superior)
- **Docker** e **Docker Compose**
- **MongoDB** ou **Redis** (localmente ou usando Docker)
- **RabbitMQ** (localmente ou usando Docker)

## Configuração Local

### Clonando o Repositório

```bash
git clone https://github.com/wkarts/webhookmultidb.git
cd webhookmultidb
Instalação de Dependências
npm install
Configuração de Variáveis de Ambiente

Crie um arquivo .env na raiz do projeto e adicione as seguintes variáveis:

JWT_SECRET=mysecret
STORAGE_TYPE=mongodb  # ou 'redis' para usar Redis como armazenamento
MONGODB_URI=mongodb://root:example@mongodb:27017
AMQP_URL=amqp://guest:guest@rabbitmq:5672
REDIS_URL=redis://:example@redis:6379
Executando a Aplicação
  1. Certifique-se de que o MongoDB, Redis (opcional) e o RabbitMQ estão rodando.
  2. Para executar a aplicação:
node app.js

A aplicação estará disponível em http://localhost:3000.

Executando com Docker Compose

Você pode usar o Docker Compose para orquestrar a aplicação com MongoDB, Redis e RabbitMQ.

docker-compose up --build
Acessando a Documentação Swagger

Acesse a documentação da API gerada automaticamente em http://localhost:3000/api-docs.

Docker

Construindo e Executando a Imagem Docker
docker build -t webhookmultidb .
docker run -p 3000:3000 webhookmultidb
Usando Docker Compose

O arquivo docker-compose.yml já está configurado para rodar a aplicação com MongoDB, Redis e RabbitMQ. Para iniciar os serviços:

docker-compose up --build

Isso irá iniciar a aplicação junto com MongoDB, RabbitMQ e Redis (se configurado).

CI/CD com GitHub Actions

Este projeto está configurado com GitHub Actions para:

  • Construir e publicar a imagem Docker automaticamente no Docker Hub quando ocorrer um push na branch main.

Para configurar o fluxo de CI/CD:

  1. Crie um token de acesso no Docker Hub.
  2. Adicione os segredos DOCKER_USERNAME e DOCKER_PASSWORD no GitHub.
  3. O GitHub Actions já está configurado no arquivo .github/workflows/docker-image.yml para realizar o build e o push da imagem Docker.

Monitoramento com Prometheus

A aplicação expõe métricas Prometheus para monitoramento. Para acessar as métricas:

http://localhost:3000/metrics

Logs

Os logs são gerenciados pelo Winston e registrados tanto no console quanto em um arquivo chamado combined.log.

Integração com Redis ou MongoDB

O sistema suporta Redis ou MongoDB como armazenamento para configurações e execução de webhooks. A escolha é feita por meio da variável de ambiente STORAGE_TYPE. Se STORAGE_TYPE=redis, o Redis será utilizado; caso contrário, MongoDB será o padrão.

STORAGE_TYPE=mongodb  # ou 'redis'

Monitoramento de Mudanças em Bancos de Dados

O sistema é capaz de monitorar mudanças em bancos de dados PostgreSQL e MySQL:

  • PostgreSQL: Usando LISTEN/NOTIFY para detecção de mudanças.
  • MySQL: Usando polling para verificar mudanças periódicas nas tabelas.

Contribuição

Se desejar contribuir com o projeto:

  1. Faça um fork do projeto.
  2. Crie uma nova branch (git checkout -b feature/nova-funcionalidade).
  3. Commit suas alterações (git commit -m 'Adiciona nova funcionalidade').
  4. Faça o push para a branch (git push origin feature/nova-funcionalidade).
  5. Abra um Pull Request.

Licença

Este projeto está licenciado sob a MIT License.


### Explicações das Alterações:

1. **Suporte a Redis ou MongoDB**:
   - Adicionei informações sobre a variável `STORAGE_TYPE`, que permite escolher entre Redis ou MongoDB para o armazenamento das configurações de monitoramento e execução de webhooks.

2. **Monitoramento de Mudanças em Bancos de Dados**:
   - Incluí detalhes sobre o monitoramento de bancos de dados, como PostgreSQL (com `LISTEN/NOTIFY`) e MySQL (usando polling), que foi implementado na aplicação.

3. **Configuração do Docker Compose**:
   - A documentação foi atualizada para refletir a capacidade de executar a aplicação com Docker Compose, incluindo Redis, RabbitMQ e MongoDB.

4. **CI/CD com GitHub Actions**:
   - Informações sobre o fluxo de CI/CD com GitHub Actions foram mantidas e explicadas.

5. **Prometheus**:
   - Adicionei a seção de monitoramento com Prometheus para expor as métricas da aplicação.

Este `README.md` agora cobre todos os novos recursos e tecnologias utilizadas no projeto **Webhook MultiDB**, oferecendo uma visão abrangente da configuração, uso e contribuição para o projeto. Se precisar de mais ajustes, estou à disposição!

Tag summary

Content type

Image

Digest

sha256:4ab4929b9

Size

367.8 MB

Last updated

almost 2 years ago

docker pull wkarts/webhookmultidb:main