raijin-server 0.2.40__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- raijin_server-0.3.0/PKG-INFO +361 -0
- raijin_server-0.3.0/README.md +328 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/setup.cfg +1 -1
- raijin_server-0.3.0/src/raijin_server/__init__.py +5 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/cli.py +6 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/__init__.py +3 -1
- raijin_server-0.3.0/src/raijin_server/modules/grafana.py +554 -0
- raijin_server-0.3.0/src/raijin_server/modules/internal_dns.py +446 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/kong.py +8 -4
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/minio.py +24 -53
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/observability_ingress.py +29 -1
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/prometheus.py +266 -3
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/traefik.py +35 -1
- raijin_server-0.3.0/src/raijin_server/modules/vpn_client.py +438 -0
- raijin_server-0.3.0/src/raijin_server.egg-info/PKG-INFO +361 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server.egg-info/SOURCES.txt +2 -0
- raijin_server-0.2.40/PKG-INFO +0 -564
- raijin_server-0.2.40/README.md +0 -531
- raijin_server-0.2.40/src/raijin_server/__init__.py +0 -5
- raijin_server-0.2.40/src/raijin_server/modules/grafana.py +0 -205
- raijin_server-0.2.40/src/raijin_server.egg-info/PKG-INFO +0 -564
- {raijin_server-0.2.40 → raijin_server-0.3.0}/LICENSE +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/pyproject.toml +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/config.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/healthchecks.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/module_manager.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/apokolips_demo.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/bootstrap.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/calico.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/cert_manager.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/essentials.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/firewall.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/full_install.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/hardening.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/harness.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/istio.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/kafka.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/kubernetes.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/loki.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/metallb.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/network.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/observability_dashboards.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/sanitize.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/secrets.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/ssh_hardening.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/velero.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/modules/vpn.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/scripts/__init__.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/scripts/checklist.sh +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/scripts/install.sh +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/scripts/log_size_metric.sh +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/scripts/pre-deploy-check.sh +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/utils.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server/validators.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server.egg-info/dependency_links.txt +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server.egg-info/entry_points.txt +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server.egg-info/requires.txt +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/src/raijin_server.egg-info/top_level.txt +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/tests/test_full_install_sequence.py +0 -0
- {raijin_server-0.2.40 → raijin_server-0.3.0}/tests/test_registry.py +0 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: raijin-server
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: CLI para automacao de setup e hardening de servidores Ubuntu Server.
|
|
5
|
+
Home-page: https://example.com/raijin-server
|
|
6
|
+
Author: Equipe Raijin
|
|
7
|
+
License: MIT
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Intended Audience :: System Administrators
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: typer>=0.12
|
|
18
|
+
Requires-Dist: rich>=13.7
|
|
19
|
+
Provides-Extra: yaml
|
|
20
|
+
Requires-Dist: pyyaml>=6.0; extra == "yaml"
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
23
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
24
|
+
Requires-Dist: black>=23.0; extra == "dev"
|
|
25
|
+
Requires-Dist: ruff>=0.1; extra == "dev"
|
|
26
|
+
Provides-Extra: all
|
|
27
|
+
Requires-Dist: pyyaml>=6.0; extra == "all"
|
|
28
|
+
Requires-Dist: pytest>=7.0; extra == "all"
|
|
29
|
+
Requires-Dist: pytest-cov>=4.0; extra == "all"
|
|
30
|
+
Requires-Dist: black>=23.0; extra == "all"
|
|
31
|
+
Requires-Dist: ruff>=0.1; extra == "all"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# Raijin Server
|
|
35
|
+
|
|
36
|
+
CLI em Python para automatizar setup e hardening de servidores Ubuntu Server. Orquestra rede, firewall, Kubernetes, observabilidade e backups de forma segura e idempotente.
|
|
37
|
+
|
|
38
|
+
## Índice
|
|
39
|
+
|
|
40
|
+
- [Requisitos](#requisitos)
|
|
41
|
+
- [Instalação](#instalação)
|
|
42
|
+
- [Primeiros Passos](#primeiros-passos)
|
|
43
|
+
- [Módulos Disponíveis](#módulos-disponíveis)
|
|
44
|
+
- [Acesso Remoto Seguro](#acesso-remoto-seguro)
|
|
45
|
+
- [Documentação](#documentação)
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Requisitos
|
|
50
|
+
|
|
51
|
+
- Ubuntu Server 20.04+
|
|
52
|
+
- Python 3.9+
|
|
53
|
+
- 4GB RAM mínimo (8GB recomendado)
|
|
54
|
+
- 20GB disco livre
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Instalar dependências Python (se necessário)
|
|
58
|
+
sudo apt update && sudo apt install -y python3 python3-venv python3-pip
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Instalação
|
|
64
|
+
|
|
65
|
+
> ⚠️ **Importante:** Sempre use um ambiente virtual (venv) para isolar dependências.
|
|
66
|
+
|
|
67
|
+
### 1. Criar ambiente virtual
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Criar venv chamado "midgard"
|
|
71
|
+
python3 -m venv ~/.venvs/midgard
|
|
72
|
+
|
|
73
|
+
# Ativar o venv
|
|
74
|
+
source ~/.venvs/midgard/bin/activate
|
|
75
|
+
|
|
76
|
+
# Atualizar pip
|
|
77
|
+
pip install -U pip setuptools
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 2. Instalar Raijin Server
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Instalar do PyPI (substitua X.X.X pela versão desejada)
|
|
84
|
+
pip install raijin-server==X.X.X
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 3. Executar com sudo
|
|
88
|
+
|
|
89
|
+
O Raijin precisa de permissões root. Use `-E` para preservar o venv:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Verificar instalação
|
|
93
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server --version
|
|
94
|
+
|
|
95
|
+
# Abrir menu interativo
|
|
96
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server menu
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 4. Desativar venv (quando terminar)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
deactivate
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> 💡 **Dica:** Para reinstalar, remova o venv (`rm -rf ~/.venvs/midgard`) e repita os passos.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Primeiros Passos
|
|
110
|
+
|
|
111
|
+
### Validar Sistema
|
|
112
|
+
|
|
113
|
+
Verifica se o sistema atende aos pré-requisitos:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server validate
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Menu Interativo
|
|
120
|
+
|
|
121
|
+
Forma mais fácil de usar - navegue pelos módulos visualmente:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server menu
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Instalação Completa Automatizada
|
|
128
|
+
|
|
129
|
+
Instala tudo de uma vez, na ordem correta:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server full-install
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Opções úteis:**
|
|
136
|
+
|
|
137
|
+
| Opção | Descrição |
|
|
138
|
+
|-------|-----------|
|
|
139
|
+
| `--select-steps` | Escolher módulos antes de executar |
|
|
140
|
+
| `--confirm-each` | Confirmar cada módulo |
|
|
141
|
+
| `--dry-run` | Simular sem aplicar mudanças |
|
|
142
|
+
| `--steps "a,b,c"` | Executar módulos específicos |
|
|
143
|
+
|
|
144
|
+
### Executar Módulo Específico
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Exemplo: instalar apenas Kubernetes
|
|
148
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server kubernetes
|
|
149
|
+
|
|
150
|
+
# Modo dry-run (apenas simula)
|
|
151
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server --dry-run kubernetes
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Módulos Disponíveis
|
|
157
|
+
|
|
158
|
+
### 🔧 Base do Sistema
|
|
159
|
+
|
|
160
|
+
| Módulo | Descrição |
|
|
161
|
+
|--------|-----------|
|
|
162
|
+
| `sanitize` | Remove instalações antigas do Kubernetes |
|
|
163
|
+
| `bootstrap` | Instala helm, kubectl, containerd |
|
|
164
|
+
| `essentials` | Pacotes básicos (curl, git, jq, etc.) |
|
|
165
|
+
| `hardening` | Fail2ban, sysctl, unattended-upgrades |
|
|
166
|
+
| `network` | IP estático via Netplan (opcional) |
|
|
167
|
+
| `firewall` | Regras UFW para SSH/HTTP/HTTPS/K8s |
|
|
168
|
+
|
|
169
|
+
### ☸️ Kubernetes
|
|
170
|
+
|
|
171
|
+
| Módulo | Descrição |
|
|
172
|
+
|--------|-----------|
|
|
173
|
+
| `kubernetes` | Inicializa cluster com kubeadm |
|
|
174
|
+
| `calico` | CNI com network policies |
|
|
175
|
+
| `metallb` | LoadBalancer para bare metal |
|
|
176
|
+
| `secrets` | Sealed-secrets + external-secrets |
|
|
177
|
+
| `cert-manager` | Certificados TLS automáticos |
|
|
178
|
+
|
|
179
|
+
### 🌐 Ingress (escolha um)
|
|
180
|
+
|
|
181
|
+
| Módulo | Descrição |
|
|
182
|
+
|--------|-----------|
|
|
183
|
+
| `traefik` | Ingress controller com TLS/ACME |
|
|
184
|
+
| `kong` | API Gateway avançado |
|
|
185
|
+
|
|
186
|
+
### 📊 Observabilidade
|
|
187
|
+
|
|
188
|
+
| Módulo | Descrição |
|
|
189
|
+
|--------|-----------|
|
|
190
|
+
| `prometheus` | Métricas e alertas |
|
|
191
|
+
| `grafana` | Dashboards de visualização |
|
|
192
|
+
| `loki` | Agregação de logs |
|
|
193
|
+
| `observability-ingress` | Ingress seguro para dashboards |
|
|
194
|
+
| `observability-dashboards` | Dashboards pré-configurados |
|
|
195
|
+
|
|
196
|
+
### 💾 Storage e Mensageria
|
|
197
|
+
|
|
198
|
+
| Módulo | Descrição |
|
|
199
|
+
|--------|-----------|
|
|
200
|
+
| `minio` | Object storage S3-compatível |
|
|
201
|
+
| `kafka` | Mensageria distribuída |
|
|
202
|
+
| `velero` | Backup e restore do cluster |
|
|
203
|
+
|
|
204
|
+
### 🔒 VPN e Segurança
|
|
205
|
+
|
|
206
|
+
| Módulo | Descrição |
|
|
207
|
+
|--------|-----------|
|
|
208
|
+
| `vpn` | Servidor WireGuard + cliente inicial |
|
|
209
|
+
| `vpn-client` | Gerenciar clientes VPN (adicionar/remover) |
|
|
210
|
+
| `ssh-hardening` | Políticas seguras de SSH |
|
|
211
|
+
| `internal-dns` | DNS interno (*.asgard.internal) |
|
|
212
|
+
|
|
213
|
+
### 🚀 Service Mesh
|
|
214
|
+
|
|
215
|
+
| Módulo | Descrição |
|
|
216
|
+
|--------|-----------|
|
|
217
|
+
| `istio` | Service mesh completo |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Acesso Remoto Seguro
|
|
222
|
+
|
|
223
|
+
O Raijin prioriza segurança. Dashboards administrativos **não são expostos publicamente** por padrão.
|
|
224
|
+
|
|
225
|
+
### Opção 1: VPN (Recomendado)
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# 1. Configurar servidor VPN
|
|
229
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server vpn
|
|
230
|
+
|
|
231
|
+
# 2. Adicionar clientes
|
|
232
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server vpn-client
|
|
233
|
+
|
|
234
|
+
# 3. Configurar DNS interno (opcional, mas muito útil!)
|
|
235
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server internal-dns
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Após conectar à VPN, acesse diretamente:
|
|
239
|
+
- `http://grafana.asgard.internal`
|
|
240
|
+
- `http://prometheus.asgard.internal`
|
|
241
|
+
- `http://minio.asgard.internal`
|
|
242
|
+
|
|
243
|
+
### Opção 2: Port-Forward via SSH
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Grafana
|
|
247
|
+
ssh -L 3000:localhost:3000 usuario@servidor
|
|
248
|
+
kubectl port-forward svc/grafana -n observability 3000:80
|
|
249
|
+
|
|
250
|
+
# Acesse: http://localhost:3000
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Opção 3: Script Automatizado
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Iniciar todos os port-forwards
|
|
257
|
+
~/raijin-server/scripts/port-forward-all.sh start
|
|
258
|
+
|
|
259
|
+
# Parar
|
|
260
|
+
~/raijin-server/scripts/port-forward-all.sh stop
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Documentação
|
|
266
|
+
|
|
267
|
+
| Documento | Descrição |
|
|
268
|
+
|-----------|-----------|
|
|
269
|
+
| [ARCHITECTURE.md](ARCHITECTURE.md) | Arquitetura técnica do ambiente |
|
|
270
|
+
| [SECURITY.md](SECURITY.md) | Políticas de segurança |
|
|
271
|
+
| [AUDIT.md](AUDIT.md) | Relatório de auditoria |
|
|
272
|
+
| [docs/INFRASTRUCTURE_GUIDE.md](docs/INFRASTRUCTURE_GUIDE.md) | Guia completo de infraestrutura |
|
|
273
|
+
| [docs/VPN_REMOTE_ACCESS.md](docs/VPN_REMOTE_ACCESS.md) | Configuração de VPN |
|
|
274
|
+
| [docs/INTERNAL_DNS.md](docs/INTERNAL_DNS.md) | DNS interno para domínios privados |
|
|
275
|
+
| [docs/VISUAL_TOOLS.md](docs/VISUAL_TOOLS.md) | Ferramentas visuais (Lens, K9s) |
|
|
276
|
+
| [docs/SSH_WINDOWS.md](docs/SSH_WINDOWS.md) | Acesso SSH do Windows |
|
|
277
|
+
| [docs/MINIO_OPERATIONS.md](docs/MINIO_OPERATIONS.md) | Operações do MinIO |
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Comandos Úteis
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# Atalho para o comando (após ativar venv)
|
|
285
|
+
alias raijin='sudo -E ~/.venvs/midgard/bin/raijin-server'
|
|
286
|
+
|
|
287
|
+
# Exemplos
|
|
288
|
+
raijin --version
|
|
289
|
+
raijin validate
|
|
290
|
+
raijin menu
|
|
291
|
+
raijin --dry-run kubernetes
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Logs e Debug
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# Ver logs do CLI
|
|
298
|
+
raijin debug logs --lines 200
|
|
299
|
+
|
|
300
|
+
# Seguir logs em tempo real
|
|
301
|
+
raijin debug logs --follow
|
|
302
|
+
|
|
303
|
+
# Snapshot do cluster
|
|
304
|
+
raijin debug kube --events 100
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Desenvolvimento
|
|
310
|
+
|
|
311
|
+
### Instalar em modo dev
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Clonar repositório
|
|
315
|
+
git clone https://github.com/rafaelluisdacostacoelho/raijin-server
|
|
316
|
+
cd raijin-server
|
|
317
|
+
|
|
318
|
+
# Criar venv de desenvolvimento
|
|
319
|
+
python3 -m venv .venv
|
|
320
|
+
source .venv/bin/activate
|
|
321
|
+
|
|
322
|
+
# Instalar em modo editável
|
|
323
|
+
pip install -e ".[dev]"
|
|
324
|
+
|
|
325
|
+
# Rodar testes
|
|
326
|
+
pytest
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Publicar no PyPI
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# 1. Criar venv limpo para publicação
|
|
333
|
+
python3 -m venv ~/.venvs/publish
|
|
334
|
+
source ~/.venvs/publish/bin/activate
|
|
335
|
+
pip install -U pip build twine
|
|
336
|
+
|
|
337
|
+
# 2. Build
|
|
338
|
+
rm -rf dist build
|
|
339
|
+
python -m build
|
|
340
|
+
|
|
341
|
+
# 3. Publicar (configure TWINE_API_TOKEN no .env)
|
|
342
|
+
./release.sh X.X.X
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Destaques
|
|
348
|
+
|
|
349
|
+
- ✅ **Validações automáticas** de pré-requisitos
|
|
350
|
+
- ✅ **Health checks** após cada instalação
|
|
351
|
+
- ✅ **Retry inteligente** com backoff exponencial
|
|
352
|
+
- ✅ **Logging estruturado** com rotação
|
|
353
|
+
- ✅ **Modo dry-run** para simular mudanças
|
|
354
|
+
- ✅ **Idempotente** - re-execução segura
|
|
355
|
+
- ✅ **VPN-first** - dashboards seguros por padrão
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## Licença
|
|
360
|
+
|
|
361
|
+
MIT License - veja [LICENSE](LICENSE) para detalhes.
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# Raijin Server
|
|
2
|
+
|
|
3
|
+
CLI em Python para automatizar setup e hardening de servidores Ubuntu Server. Orquestra rede, firewall, Kubernetes, observabilidade e backups de forma segura e idempotente.
|
|
4
|
+
|
|
5
|
+
## Índice
|
|
6
|
+
|
|
7
|
+
- [Requisitos](#requisitos)
|
|
8
|
+
- [Instalação](#instalação)
|
|
9
|
+
- [Primeiros Passos](#primeiros-passos)
|
|
10
|
+
- [Módulos Disponíveis](#módulos-disponíveis)
|
|
11
|
+
- [Acesso Remoto Seguro](#acesso-remoto-seguro)
|
|
12
|
+
- [Documentação](#documentação)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Requisitos
|
|
17
|
+
|
|
18
|
+
- Ubuntu Server 20.04+
|
|
19
|
+
- Python 3.9+
|
|
20
|
+
- 4GB RAM mínimo (8GB recomendado)
|
|
21
|
+
- 20GB disco livre
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Instalar dependências Python (se necessário)
|
|
25
|
+
sudo apt update && sudo apt install -y python3 python3-venv python3-pip
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Instalação
|
|
31
|
+
|
|
32
|
+
> ⚠️ **Importante:** Sempre use um ambiente virtual (venv) para isolar dependências.
|
|
33
|
+
|
|
34
|
+
### 1. Criar ambiente virtual
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Criar venv chamado "midgard"
|
|
38
|
+
python3 -m venv ~/.venvs/midgard
|
|
39
|
+
|
|
40
|
+
# Ativar o venv
|
|
41
|
+
source ~/.venvs/midgard/bin/activate
|
|
42
|
+
|
|
43
|
+
# Atualizar pip
|
|
44
|
+
pip install -U pip setuptools
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2. Instalar Raijin Server
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Instalar do PyPI (substitua X.X.X pela versão desejada)
|
|
51
|
+
pip install raijin-server==X.X.X
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 3. Executar com sudo
|
|
55
|
+
|
|
56
|
+
O Raijin precisa de permissões root. Use `-E` para preservar o venv:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Verificar instalação
|
|
60
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server --version
|
|
61
|
+
|
|
62
|
+
# Abrir menu interativo
|
|
63
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server menu
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 4. Desativar venv (quando terminar)
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
deactivate
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
> 💡 **Dica:** Para reinstalar, remova o venv (`rm -rf ~/.venvs/midgard`) e repita os passos.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Primeiros Passos
|
|
77
|
+
|
|
78
|
+
### Validar Sistema
|
|
79
|
+
|
|
80
|
+
Verifica se o sistema atende aos pré-requisitos:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server validate
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Menu Interativo
|
|
87
|
+
|
|
88
|
+
Forma mais fácil de usar - navegue pelos módulos visualmente:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server menu
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Instalação Completa Automatizada
|
|
95
|
+
|
|
96
|
+
Instala tudo de uma vez, na ordem correta:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server full-install
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Opções úteis:**
|
|
103
|
+
|
|
104
|
+
| Opção | Descrição |
|
|
105
|
+
|-------|-----------|
|
|
106
|
+
| `--select-steps` | Escolher módulos antes de executar |
|
|
107
|
+
| `--confirm-each` | Confirmar cada módulo |
|
|
108
|
+
| `--dry-run` | Simular sem aplicar mudanças |
|
|
109
|
+
| `--steps "a,b,c"` | Executar módulos específicos |
|
|
110
|
+
|
|
111
|
+
### Executar Módulo Específico
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Exemplo: instalar apenas Kubernetes
|
|
115
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server kubernetes
|
|
116
|
+
|
|
117
|
+
# Modo dry-run (apenas simula)
|
|
118
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server --dry-run kubernetes
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Módulos Disponíveis
|
|
124
|
+
|
|
125
|
+
### 🔧 Base do Sistema
|
|
126
|
+
|
|
127
|
+
| Módulo | Descrição |
|
|
128
|
+
|--------|-----------|
|
|
129
|
+
| `sanitize` | Remove instalações antigas do Kubernetes |
|
|
130
|
+
| `bootstrap` | Instala helm, kubectl, containerd |
|
|
131
|
+
| `essentials` | Pacotes básicos (curl, git, jq, etc.) |
|
|
132
|
+
| `hardening` | Fail2ban, sysctl, unattended-upgrades |
|
|
133
|
+
| `network` | IP estático via Netplan (opcional) |
|
|
134
|
+
| `firewall` | Regras UFW para SSH/HTTP/HTTPS/K8s |
|
|
135
|
+
|
|
136
|
+
### ☸️ Kubernetes
|
|
137
|
+
|
|
138
|
+
| Módulo | Descrição |
|
|
139
|
+
|--------|-----------|
|
|
140
|
+
| `kubernetes` | Inicializa cluster com kubeadm |
|
|
141
|
+
| `calico` | CNI com network policies |
|
|
142
|
+
| `metallb` | LoadBalancer para bare metal |
|
|
143
|
+
| `secrets` | Sealed-secrets + external-secrets |
|
|
144
|
+
| `cert-manager` | Certificados TLS automáticos |
|
|
145
|
+
|
|
146
|
+
### 🌐 Ingress (escolha um)
|
|
147
|
+
|
|
148
|
+
| Módulo | Descrição |
|
|
149
|
+
|--------|-----------|
|
|
150
|
+
| `traefik` | Ingress controller com TLS/ACME |
|
|
151
|
+
| `kong` | API Gateway avançado |
|
|
152
|
+
|
|
153
|
+
### 📊 Observabilidade
|
|
154
|
+
|
|
155
|
+
| Módulo | Descrição |
|
|
156
|
+
|--------|-----------|
|
|
157
|
+
| `prometheus` | Métricas e alertas |
|
|
158
|
+
| `grafana` | Dashboards de visualização |
|
|
159
|
+
| `loki` | Agregação de logs |
|
|
160
|
+
| `observability-ingress` | Ingress seguro para dashboards |
|
|
161
|
+
| `observability-dashboards` | Dashboards pré-configurados |
|
|
162
|
+
|
|
163
|
+
### 💾 Storage e Mensageria
|
|
164
|
+
|
|
165
|
+
| Módulo | Descrição |
|
|
166
|
+
|--------|-----------|
|
|
167
|
+
| `minio` | Object storage S3-compatível |
|
|
168
|
+
| `kafka` | Mensageria distribuída |
|
|
169
|
+
| `velero` | Backup e restore do cluster |
|
|
170
|
+
|
|
171
|
+
### 🔒 VPN e Segurança
|
|
172
|
+
|
|
173
|
+
| Módulo | Descrição |
|
|
174
|
+
|--------|-----------|
|
|
175
|
+
| `vpn` | Servidor WireGuard + cliente inicial |
|
|
176
|
+
| `vpn-client` | Gerenciar clientes VPN (adicionar/remover) |
|
|
177
|
+
| `ssh-hardening` | Políticas seguras de SSH |
|
|
178
|
+
| `internal-dns` | DNS interno (*.asgard.internal) |
|
|
179
|
+
|
|
180
|
+
### 🚀 Service Mesh
|
|
181
|
+
|
|
182
|
+
| Módulo | Descrição |
|
|
183
|
+
|--------|-----------|
|
|
184
|
+
| `istio` | Service mesh completo |
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Acesso Remoto Seguro
|
|
189
|
+
|
|
190
|
+
O Raijin prioriza segurança. Dashboards administrativos **não são expostos publicamente** por padrão.
|
|
191
|
+
|
|
192
|
+
### Opção 1: VPN (Recomendado)
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# 1. Configurar servidor VPN
|
|
196
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server vpn
|
|
197
|
+
|
|
198
|
+
# 2. Adicionar clientes
|
|
199
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server vpn-client
|
|
200
|
+
|
|
201
|
+
# 3. Configurar DNS interno (opcional, mas muito útil!)
|
|
202
|
+
sudo -E ~/.venvs/midgard/bin/raijin-server internal-dns
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Após conectar à VPN, acesse diretamente:
|
|
206
|
+
- `http://grafana.asgard.internal`
|
|
207
|
+
- `http://prometheus.asgard.internal`
|
|
208
|
+
- `http://minio.asgard.internal`
|
|
209
|
+
|
|
210
|
+
### Opção 2: Port-Forward via SSH
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Grafana
|
|
214
|
+
ssh -L 3000:localhost:3000 usuario@servidor
|
|
215
|
+
kubectl port-forward svc/grafana -n observability 3000:80
|
|
216
|
+
|
|
217
|
+
# Acesse: http://localhost:3000
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Opção 3: Script Automatizado
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Iniciar todos os port-forwards
|
|
224
|
+
~/raijin-server/scripts/port-forward-all.sh start
|
|
225
|
+
|
|
226
|
+
# Parar
|
|
227
|
+
~/raijin-server/scripts/port-forward-all.sh stop
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Documentação
|
|
233
|
+
|
|
234
|
+
| Documento | Descrição |
|
|
235
|
+
|-----------|-----------|
|
|
236
|
+
| [ARCHITECTURE.md](ARCHITECTURE.md) | Arquitetura técnica do ambiente |
|
|
237
|
+
| [SECURITY.md](SECURITY.md) | Políticas de segurança |
|
|
238
|
+
| [AUDIT.md](AUDIT.md) | Relatório de auditoria |
|
|
239
|
+
| [docs/INFRASTRUCTURE_GUIDE.md](docs/INFRASTRUCTURE_GUIDE.md) | Guia completo de infraestrutura |
|
|
240
|
+
| [docs/VPN_REMOTE_ACCESS.md](docs/VPN_REMOTE_ACCESS.md) | Configuração de VPN |
|
|
241
|
+
| [docs/INTERNAL_DNS.md](docs/INTERNAL_DNS.md) | DNS interno para domínios privados |
|
|
242
|
+
| [docs/VISUAL_TOOLS.md](docs/VISUAL_TOOLS.md) | Ferramentas visuais (Lens, K9s) |
|
|
243
|
+
| [docs/SSH_WINDOWS.md](docs/SSH_WINDOWS.md) | Acesso SSH do Windows |
|
|
244
|
+
| [docs/MINIO_OPERATIONS.md](docs/MINIO_OPERATIONS.md) | Operações do MinIO |
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Comandos Úteis
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Atalho para o comando (após ativar venv)
|
|
252
|
+
alias raijin='sudo -E ~/.venvs/midgard/bin/raijin-server'
|
|
253
|
+
|
|
254
|
+
# Exemplos
|
|
255
|
+
raijin --version
|
|
256
|
+
raijin validate
|
|
257
|
+
raijin menu
|
|
258
|
+
raijin --dry-run kubernetes
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Logs e Debug
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
# Ver logs do CLI
|
|
265
|
+
raijin debug logs --lines 200
|
|
266
|
+
|
|
267
|
+
# Seguir logs em tempo real
|
|
268
|
+
raijin debug logs --follow
|
|
269
|
+
|
|
270
|
+
# Snapshot do cluster
|
|
271
|
+
raijin debug kube --events 100
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Desenvolvimento
|
|
277
|
+
|
|
278
|
+
### Instalar em modo dev
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# Clonar repositório
|
|
282
|
+
git clone https://github.com/rafaelluisdacostacoelho/raijin-server
|
|
283
|
+
cd raijin-server
|
|
284
|
+
|
|
285
|
+
# Criar venv de desenvolvimento
|
|
286
|
+
python3 -m venv .venv
|
|
287
|
+
source .venv/bin/activate
|
|
288
|
+
|
|
289
|
+
# Instalar em modo editável
|
|
290
|
+
pip install -e ".[dev]"
|
|
291
|
+
|
|
292
|
+
# Rodar testes
|
|
293
|
+
pytest
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Publicar no PyPI
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# 1. Criar venv limpo para publicação
|
|
300
|
+
python3 -m venv ~/.venvs/publish
|
|
301
|
+
source ~/.venvs/publish/bin/activate
|
|
302
|
+
pip install -U pip build twine
|
|
303
|
+
|
|
304
|
+
# 2. Build
|
|
305
|
+
rm -rf dist build
|
|
306
|
+
python -m build
|
|
307
|
+
|
|
308
|
+
# 3. Publicar (configure TWINE_API_TOKEN no .env)
|
|
309
|
+
./release.sh X.X.X
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Destaques
|
|
315
|
+
|
|
316
|
+
- ✅ **Validações automáticas** de pré-requisitos
|
|
317
|
+
- ✅ **Health checks** após cada instalação
|
|
318
|
+
- ✅ **Retry inteligente** com backoff exponencial
|
|
319
|
+
- ✅ **Logging estruturado** com rotação
|
|
320
|
+
- ✅ **Modo dry-run** para simular mudanças
|
|
321
|
+
- ✅ **Idempotente** - re-execução segura
|
|
322
|
+
- ✅ **VPN-first** - dashboards seguros por padrão
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Licença
|
|
327
|
+
|
|
328
|
+
MIT License - veja [LICENSE](LICENSE) para detalhes.
|