O DockOps é uma plataforma de orquestração de containers construída sob os princípios de Clean Architecture e processamento assíncrono. O objetivo central é fornecer um núcleo plug-and-play onde a API delega tarefas complexas de infraestrutura para workers especializados através de mensageria. Isso garante um alto nível de desacoplamento, confiabilidade e facilidade de manutenção.
- Linguagem: Go 1.25
- Framework Web: Gin
- Mensageria: RabbitMQ
- Banco de Dados: PostgreSQL (com GORM)
- Infraestrutura: Docker e Docker Compose
- Testes: Testify (Mocks e Asserts)
A estrutura do projeto segue o padrão de Clean Architecture, isolando a regra de negócio (core) de detalhes de implementação (api, messaging, storage).
DockOps/
├── cmd/
│ └── main.go # Ponto de entrada da aplicação (Wire-up)
├── internal/
│ ├── api/
│ │ ├── handler/ # Controladores (Rotas HTTP)
│ │ └── security/ # Middlewares (ex: OPA/JWT) e Tokens
│ ├── config/
│ │ ├── config.go # Leitura de variáveis de ambiente (.env)
│ │ └── logger/ # Wrapper customizado para logs estruturados
│ ├── core/ # O CORAÇÃO: Entidades, Eventos e Interfaces puras
│ ├── messaging/
│ │ ├── events/ # Estruturas de publicação de fila
│ │ └── rabbitmq/ # Conexão, Producer e Consumer do RabbitMQ
│ ├── provider/
│ │ └── docker/ # Implementação real (Plugin) do Docker Client SDK
│ ├── storage/
│ │ └── postgres/ # Implementação do banco: Models (GORM) e Repositório
│ ├── telemetry/
│ │ └── tracer.go # Setup de Observabilidade (OpenTelemetry/Jaeger)
│ └── worker/
│ ├── consumer.go # Goroutine que escuta a fila
│ └── factory.go # Roteador que decide qual Provider instanciar
├── docker-compose.yml # Infraestrutura local (Postgres, RabbitMQ, App)
├── Dockerfile # Receita de build do container da aplicação
├── go.mod / go.sum # Gerenciamento de dependências
└── .env # Variáveis secretas (não versionado)
- Docker e Docker Compose instalados.
- Go 1.25 (caso deseje rodar a aplicação fora dos containers).
- Clone o repositório para sua máquina local.
- Crie um arquivo
.envna raiz do projeto contendo as seguintes variáveis:DB_USER=adm DB_PASSWORD=dockops123 DB_NAME=dockops SECRET_KEY_JWT=SuaChaveSuperSecreta DB_URL=postgres://adm:dockops123@db:5432/dockops?sslmode=disable userRbMQ=guest passRbMq=guest RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672/
- Inicialize os serviços com o Docker Compose:
docker-compose up --build -d
- A API estará disponível em
http://localhost:8080.
Para executar a suíte de testes unitários do projeto, basta utilizar a ferramenta padrão da linguagem:
go test -v ./...