Acompanhe: Project Board
Nota: O projeto teve uma pausa no desenvolvimento, que durou de 29 Mar 2024 até 02 Jul 2024. Nota: O desenvolvimento do projeto foi pausado, pois estou me decicando a outro projeto, desenvolvido com código fechado.
Projeto de portfólio, tem como objetivos aprendizado, prática e demonstração das minhas habilidades como desenvolvedor. Portanto, as escolhas no projeto são, principalmente, com esses objetivos.
Este projeto tem como objetivo desenvolver um sistema robusto para o armazenamento e controle de documentos financeiros. Ele oferece aos clientes e administradores de instituições financeiras a capacidade de fazer upload, gerenciar e recuperar documentos financeiros de forma eficiente.
-
Documentos: Os documentos são inicialmente armazenados localmente no servidor e, posteriormente transferidos para um serviço de armazenamento em nuvem. Sendo requisito manter versões do documento para visualizar seu histórico.
-
Consultas: Cada documento é acompanhado de metadados, incluindo nome, data, tipo de documento e informações relacionadas a transações financeiras.
-
Segurança: O sistema mantém nível de segurança e controle de acesso rigoroso, além de observabilidade e registro de atividades para fins de auditoria.
-
Resiliência: O sistema deve ser projetado para minimizar o impacto de falhas e garantir que as operações possam ser retomadas o mais rápido possível após uma falha.
⇝ Registros de engenharia de software.
⇝ Bug Log. Registro de bugs/problemas e suas soluções.
Tenho o hábito de criar meu próprio material durante o estudo. A partir deste projeto, decidi publicá-los.
⇝ Desenvolvimento voltado para a auditoria em Software.
⇝ Como configurar erros e logs corretamente.
Bibliotecas e pacotes que criei em razão desse projeto.
⇝ Logella.
Para iniciar o projeto nasta executar o comando:
bash bash scripts/start.sh
Antes disso é necessário realizar as configurações do ambiente.
De permissão para o container escrever na pasta logs. Isso é necessário para que o sistema possa salvar os arquivos de logs na pasta logs, localizada na raiz do projeto.
Inicialmente pode ser necessário dar permissão de read and writer (5) para others. Isso apenas para poder verificar quem é o usuário do container no host. Antes de executar o programa execute:
chmod -R 775 logs
Em seguida pode iniciar o programa. Ele vai criar os arquivos de log na pasta logs.
Para identificar o usuário do container no host basta verificar qual usuário escreveu os arquivos de log:
ls -lt logs
A saida será algo assim:
$ ls -lt logs
total 0
-rw-r--r-- 1 65532 65532 0 Jul 9 21:28 modsec_audit.log
-rw-r--r-- 1 65532 65532 0 Jul 9 21:28 modsec_debug.log
Identificado o usuário e grupo, basta dar a permissão. Eu escolhi dar permissão de owner e mantive o grupo do meu usuário.
sudo chown 65532:<myusergroup> logs
Pronto. As permissões necessárias estão prontas.
Configure o arquivo .env. As variáveis necessárias estão no arquivo example.env, aqui nesse repositório.
Configure as secrets, elas estão no diretório "secrets", aqui nesse repositório.
Linguagem: Go (Golang)
Arquitetura: Microservices e Domain-Driven Design (DDD)
- Banco de dados: CockroachDB
- Driver de banco de dados: Pgx
- Armazenamento: Google Cloud Storage
- Cache: Memcached
- Transporte:
- Filas: RabbitMQ
- Comunicação de Serviço: gRPC
- API: Rest, GraphQL e gRPC
- Roteador: go-chi
- Framework GraphQL: 99designs/gqlgen
- Logs: Zerolog
- Métricas: Prometheus
- Busca e Análise: Elasticsearch
- Autenticação e Autorização: JSON Web Token (JWT)
- Criptografia (password): Bcrypt
- Criptografia (Dados sensíveis): AES e SHA-256
- Contêineres: Docker
- CI/CD: Github Actions