381 lines
8.9 KiB
Markdown
381 lines
8.9 KiB
Markdown
# 🎯 Quick Start - Backend + Traefik
|
|
|
|
## 📋 O que foi criado?
|
|
|
|
Você agora tem uma arquitetura completa de produção com:
|
|
|
|
✅ **Backend em Go** com estrutura profissional
|
|
✅ **Traefik** como reverse proxy com suporte a multi-tenant
|
|
✅ **PostgreSQL** para dados com isolamento por tenant
|
|
✅ **Redis** para cache e sessões
|
|
✅ **MinIO** para storage S3-compatible
|
|
✅ **Docker Compose** com stack completa
|
|
✅ **Autenticação JWT** segura
|
|
✅ **Multi-tenant** com roteamento automático
|
|
✅ **Documentação** completa
|
|
|
|
## 🚀 Iniciar Desenvolvimento
|
|
|
|
### 1. Copiar variáveis de ambiente
|
|
|
|
```bash
|
|
cd aggios-app
|
|
cp .env.example .env
|
|
```
|
|
|
|
### 2. Iniciar stack com um comando
|
|
|
|
**Windows:**
|
|
```bash
|
|
.\scripts\start-dev.bat
|
|
```
|
|
|
|
**macOS/Linux:**
|
|
```bash
|
|
chmod +x ./scripts/start-dev.sh
|
|
./scripts/start-dev.sh
|
|
```
|
|
|
|
**Ou manualmente:**
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
### 3. Verificar serviços
|
|
|
|
```bash
|
|
docker-compose ps
|
|
|
|
# OUTPUT esperado:
|
|
# NAME STATUS
|
|
# traefik Up (healthy)
|
|
# postgres Up (healthy)
|
|
# redis Up (healthy)
|
|
# minio Up (healthy)
|
|
# backend Up (healthy)
|
|
```
|
|
|
|
### 4. Testar API
|
|
|
|
```bash
|
|
# Health check
|
|
curl http://localhost:8080/api/health
|
|
|
|
# Response esperado:
|
|
# {"status":"up","timestamp":1733376000,"database":true,...}
|
|
```
|
|
|
|
## 📚 Documentação Importante
|
|
|
|
| Documento | Descrição |
|
|
|-----------|-----------|
|
|
| [ARCHITECTURE.md](./ARCHITECTURE.md) | Design da arquitetura |
|
|
| [API_REFERENCE.md](./API_REFERENCE.md) | Todos os endpoints |
|
|
| [DEPLOYMENT.md](./DEPLOYMENT.md) | Deploy e diagramas |
|
|
| [SECURITY.md](./SECURITY.md) | Guia de segurança |
|
|
| [backend/README.md](./backend/README.md) | Setup do backend |
|
|
|
|
## 🔄 Estrutura de Pastas
|
|
|
|
```
|
|
aggios-app/
|
|
├── backend/ # ← Backend Go aqui
|
|
│ ├── cmd/server/main.go # Entry point
|
|
│ ├── internal/
|
|
│ │ ├── api/ # Handlers, middleware, routes
|
|
│ │ ├── auth/ # JWT, passwords, tokens
|
|
│ │ ├── config/ # Configurações
|
|
│ │ ├── database/ # PostgreSQL, migrations
|
|
│ │ ├── models/ # Estruturas de dados
|
|
│ │ ├── services/ # Lógica de negócio
|
|
│ │ └── storage/ # Redis e MinIO
|
|
│ ├── migrations/ # SQL scripts
|
|
│ ├── go.mod # Dependencies
|
|
│ ├── Dockerfile # Para Docker
|
|
│ └── README.md # Backend docs
|
|
│
|
|
├── aggios.app-institucional/ # Frontend Institucional (Next.js)
|
|
├── dash.aggios.app/ # Frontend Dashboard (Next.js)
|
|
│
|
|
├── docker-compose.yml # Stack completa
|
|
├── .env.example # Template de env
|
|
├── .env # Variáveis reais (não committar!)
|
|
│
|
|
├── traefik/ # Configuração Traefik
|
|
│ ├── traefik.yml # Main config
|
|
│ ├── dynamic/rules.yml # Dynamic routing rules
|
|
│ └── letsencrypt/ # Certificados (auto-gerado)
|
|
│
|
|
├── backend/internal/data/postgres/ # Inicialização PostgreSQL
|
|
│ └── init-db.sql # Schema initial
|
|
│
|
|
├── scripts/
|
|
│ ├── start-dev.sh # Start em Linux/macOS
|
|
│ └── start-dev.bat # Start em Windows
|
|
│
|
|
├── ARCHITECTURE.md # Design detalhado
|
|
├── API_REFERENCE.md # Endpoints
|
|
├── DEPLOYMENT.md # Diagrama & deploy
|
|
├── SECURITY.md # Segurança & checklist
|
|
└── README.md # Este arquivo
|
|
```
|
|
|
|
## 🛠️ Próximos Passos
|
|
|
|
### 1. Completar Autenticação (2-3 horas)
|
|
- [ ] Implementar login com validação real
|
|
- [ ] Adicionar password hashing (Argon2)
|
|
- [ ] Implementar refresh token logic
|
|
- [ ] Testes de autenticação
|
|
|
|
**Arquivo:** `backend/internal/api/handlers/auth.go`
|
|
|
|
### 2. Adicionar Endpoints de Usuário (1-2 horas)
|
|
- [ ] GET /api/users/me
|
|
- [ ] PUT /api/users/me (update profile)
|
|
- [ ] POST /api/users/me/change-password
|
|
- [ ] DELETE /api/users/me
|
|
|
|
**Arquivo:** `backend/internal/api/handlers/users.go`
|
|
|
|
### 3. Implementar Services Layer (2-3 horas)
|
|
- [ ] UserService
|
|
- [ ] TenantService
|
|
- [ ] TokenService
|
|
- [ ] FileService
|
|
|
|
**Pasta:** `backend/internal/services/`
|
|
|
|
### 4. Adicionar Endpoints de Tenant (1-2 horas)
|
|
- [ ] GET /api/tenant
|
|
- [ ] PUT /api/tenant
|
|
- [ ] GET /api/tenant/members
|
|
- [ ] Invite members
|
|
|
|
**Arquivo:** `backend/internal/api/handlers/tenant.go`
|
|
|
|
### 5. Implementar Upload de Arquivos (2 horas)
|
|
- [ ] POST /api/files/upload
|
|
- [ ] GET /api/files/{id}
|
|
- [ ] DELETE /api/files/{id}
|
|
- [ ] Integração MinIO
|
|
|
|
**Arquivo:** `backend/internal/api/handlers/files.go`
|
|
|
|
### 6. Testes Unitários (3-4 horas)
|
|
- [ ] Auth tests
|
|
- [ ] Handler tests
|
|
- [ ] Service tests
|
|
- [ ] Middleware tests
|
|
|
|
**Pasta:** `backend/internal/*_test.go`
|
|
|
|
### 7. Documentação Swagger (1-2 horas)
|
|
- [ ] Adicionar comentários swagger
|
|
- [ ] Gerar OpenAPI/Swagger
|
|
- [ ] Publicar em `/api/docs`
|
|
|
|
**Dependency:** `github.com/swaggo/http-swagger`
|
|
|
|
### 8. Integração com Frontends (2-3 horas)
|
|
- [ ] Atualizar CORS_ALLOWED_ORIGINS
|
|
- [ ] Criar cliente HTTP no Next.js
|
|
- [ ] Autenticação no frontend
|
|
- [ ] Redirects de login
|
|
|
|
### 9. CI/CD Pipeline (2-3 horas)
|
|
- [ ] GitHub Actions workflow
|
|
- [ ] Build Docker image
|
|
- [ ] Push para registry
|
|
- [ ] Deploy automático
|
|
|
|
**Arquivo:** `.github/workflows/deploy.yml`
|
|
|
|
### 10. Monitoramento (1-2 horas)
|
|
- [ ] Adicionar logging estruturado
|
|
- [ ] Sentry integration
|
|
- [ ] Prometheus metrics
|
|
- [ ] Health check endpoint
|
|
|
|
---
|
|
|
|
## 📝 Exemplo: Adicionar um novo endpoint
|
|
|
|
### 1. Criar handler
|
|
|
|
```go
|
|
// backend/internal/api/handlers/agencias.go
|
|
package handlers
|
|
|
|
func (h *AgenciaHandler) ListAgencias(w http.ResponseWriter, r *http.Request) {
|
|
tenantID := r.Header.Get("X-Tenant-ID")
|
|
|
|
agencias, err := h.agenciaService.ListByTenant(r.Context(), tenantID)
|
|
if err != nil {
|
|
utils.RespondError(w, 500, "error", err.Error(), r.URL.Path)
|
|
return
|
|
}
|
|
|
|
utils.RespondSuccess(w, 200, agencias, "Agências obtidas com sucesso")
|
|
}
|
|
```
|
|
|
|
### 2. Registrar na rota
|
|
|
|
```go
|
|
// backend/internal/api/routes.go
|
|
mux.HandleFunc("GET /api/agencias", middleware.Chain(
|
|
agenciaHandler.ListAgencias,
|
|
corsMiddleware,
|
|
jwtMiddleware,
|
|
))
|
|
```
|
|
|
|
### 3. Testar
|
|
|
|
```bash
|
|
curl -X GET http://localhost:8080/api/agencias \
|
|
-H "Authorization: Bearer {token}"
|
|
```
|
|
|
|
---
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Backend não inicia
|
|
```bash
|
|
# Ver logs
|
|
docker-compose logs -f backend
|
|
|
|
# Rebuildar
|
|
docker-compose build backend
|
|
docker-compose up -d backend
|
|
```
|
|
|
|
### PostgreSQL falha
|
|
```bash
|
|
# Verificar password
|
|
cat .env | grep DB_PASSWORD
|
|
|
|
# Reset database
|
|
docker-compose down -v postgres
|
|
docker-compose up -d postgres
|
|
```
|
|
|
|
### Redis não conecta
|
|
```bash
|
|
# Test connection
|
|
docker-compose exec redis redis-cli ping
|
|
|
|
# Verificar password
|
|
docker-compose exec redis redis-cli -a $(grep REDIS_PASSWORD .env) ping
|
|
```
|
|
|
|
### Certificado SSL
|
|
```bash
|
|
# Ver status Let's Encrypt
|
|
docker-compose logs traefik | grep acme
|
|
|
|
# Debug Traefik
|
|
docker-compose logs -f traefik
|
|
```
|
|
|
|
---
|
|
|
|
## 🔐 Segurança Inicial
|
|
|
|
**IMPORTANTE:** Antes de publicar em produção:
|
|
|
|
```bash
|
|
# 1. Gerar secrets seguros
|
|
openssl rand -base64 32 > jwt_secret.txt
|
|
openssl rand -base64 24 > db_password.txt
|
|
|
|
# 2. Editar .env com valores seguros
|
|
nano .env
|
|
|
|
# 3. Deletar .env.example
|
|
rm .env.example
|
|
|
|
# 4. Verificar .gitignore
|
|
echo ".env" >> .gitignore
|
|
git add .gitignore
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Deploy em Produção
|
|
|
|
1. **Servidor Linux** (Ubuntu 20.04+)
|
|
2. **Docker + Compose** instalados
|
|
3. **Domain** apontando para servidor
|
|
4. **Secrets** em vault (não em .env)
|
|
|
|
```bash
|
|
# 1. Clone repo
|
|
git clone <repo> /opt/aggios-app
|
|
cd /opt/aggios-app
|
|
|
|
# 2. Setup secrets
|
|
export JWT_SECRET=$(openssl rand -base64 32)
|
|
export DB_PASSWORD=$(openssl rand -base64 24)
|
|
|
|
# 3. Start stack
|
|
docker-compose -f docker-compose.yml up -d
|
|
|
|
# 4. Health check
|
|
curl https://api.aggios.app/api/health
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Monitoramento
|
|
|
|
Após deploy em produção:
|
|
|
|
```bash
|
|
# Ver métricas
|
|
docker-compose stats
|
|
|
|
# Ver logs
|
|
docker-compose logs -f backend
|
|
|
|
# Verificar saúde
|
|
docker-compose ps
|
|
|
|
# Acessar dashboards:
|
|
# - Traefik: http://traefik.localhost
|
|
# - MinIO: http://minio-console.localhost
|
|
```
|
|
|
|
---
|
|
|
|
## 💬 Próximas Discussões
|
|
|
|
Quando estiver pronto, podemos implementar:
|
|
|
|
1. **OAuth2** (Google, GitHub login)
|
|
2. **WebSockets** (notificações em tempo real)
|
|
3. **gRPC** (comunicação inter-serviços)
|
|
4. **Message Queue** (Kafka/RabbitMQ)
|
|
5. **Search** (Elasticsearch)
|
|
6. **Analytics** (Big Query/Datadog)
|
|
7. **Machine Learning** (recomendações)
|
|
8. **Blockchain** (auditoria imutável)
|
|
|
|
---
|
|
|
|
## 📞 Suporte
|
|
|
|
Para dúvidas:
|
|
1. Consulte a documentação nos links acima
|
|
2. Verifique os logs: `docker-compose logs {service}`
|
|
3. Leia o arquivo correspondente em `ARCHITECTURE.md`, `API_REFERENCE.md` ou `SECURITY.md`
|
|
|
|
---
|
|
|
|
**Status**: ✅ Pronto para desenvolvimento
|
|
**Stack**: Go + PostgreSQL + Redis + MinIO + Traefik
|
|
**Versão**: 1.0.0
|
|
**Data**: Dezembro 2025
|