Workshop completo: aulas 08-10 com Talos, n8n e GitLab na Hetzner
Aula 08 - Cluster Kubernetes HA: - Setup interativo com OpenTofu para Talos na Hetzner - CCM, CSI Driver, Cluster Autoscaler, Metrics Server - NGINX Ingress com LoadBalancer (HTTP/HTTPS/SSH) Aula 09 - n8n na Hetzner: - Deploy via Helm com PostgreSQL e Redis - Suporte multi-tenant com add-client.sh - Integração com Hetzner CSI para volumes persistentes Aula 10 - GitLab na Hetzner: - Setup agnóstico: CloudFlare (trusted proxies) ou Let's Encrypt - Anti-affinity para distribuir webservice/sidekiq em nós diferentes - Container Registry e SSH via TCP passthrough - Documentação do erro 422 e solução com trustedCIDRsForXForwardedFor Melhorias gerais: - READMEs atualizados com arquitetura e troubleshooting - Scripts cleanup.sh para todas as aulas - CLAUDE.md atualizado com contexto do projeto
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# Setup da Aula 06 - n8n via Helm
|
||||
# Setup da Aula 06 - n8n via Helm (Ambiente LOCAL)
|
||||
# =============================================================================
|
||||
#
|
||||
# Este script instala e configura:
|
||||
@@ -8,7 +8,7 @@
|
||||
# 2. n8n com PostgreSQL, Redis, Workers e Webhooks
|
||||
#
|
||||
# Pré-requisitos:
|
||||
# - Kubernetes cluster rodando (k3s, minikube, kind, etc)
|
||||
# - Kubernetes cluster LOCAL rodando (Docker Desktop, minikube, kind, k3d)
|
||||
# - kubectl configurado
|
||||
# - Helm 3.x instalado
|
||||
#
|
||||
@@ -52,6 +52,10 @@ log_success "kubectl encontrado"
|
||||
# Verificar conexão com cluster
|
||||
if ! kubectl cluster-info &> /dev/null; then
|
||||
log_error "Não foi possível conectar ao cluster Kubernetes."
|
||||
log_info "Verifique se seu cluster local está rodando:"
|
||||
log_info " - Docker Desktop: Habilite Kubernetes nas configurações"
|
||||
log_info " - minikube: minikube start"
|
||||
log_info " - kind: kind create cluster"
|
||||
exit 1
|
||||
fi
|
||||
log_success "Conectado ao cluster Kubernetes"
|
||||
@@ -67,68 +71,7 @@ log_success "Helm $(helm version --short) encontrado"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# 1. INSTALAR HETZNER CSI DRIVER (para provisionar volumes)
|
||||
# =============================================================================
|
||||
|
||||
log_info "=== Configurando Hetzner CSI Driver ==="
|
||||
|
||||
# Verificar se secret já existe (evita pedir token novamente)
|
||||
if kubectl get secret hcloud -n kube-system &> /dev/null; then
|
||||
log_success "Secret hcloud já existe em kube-system"
|
||||
else
|
||||
# Pedir token via input interativo
|
||||
echo ""
|
||||
log_info "Token da Hetzner Cloud necessário para provisionar volumes."
|
||||
log_info "Crie um token em: https://console.hetzner.cloud/projects/*/security/tokens"
|
||||
echo ""
|
||||
log_info "Cole o token e pressione ENTER:"
|
||||
|
||||
# Desabilita echo, lê linha completa, reabilita echo
|
||||
stty -echo
|
||||
IFS= read -r HCLOUD_TOKEN
|
||||
stty echo
|
||||
echo ""
|
||||
|
||||
if [ -z "$HCLOUD_TOKEN" ]; then
|
||||
log_error "Token não pode ser vazio."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Criando secret hcloud em kube-system..."
|
||||
kubectl create secret generic hcloud \
|
||||
--namespace=kube-system \
|
||||
--from-literal=token="$HCLOUD_TOKEN"
|
||||
log_success "Secret hcloud criado"
|
||||
fi
|
||||
|
||||
# Instalar Hetzner CSI Driver via Helm (se não instalado)
|
||||
if helm status hcloud-csi -n kube-system &> /dev/null; then
|
||||
log_success "Hetzner CSI Driver já está instalado"
|
||||
else
|
||||
log_info "Instalando Hetzner CSI Driver..."
|
||||
helm repo add hcloud https://charts.hetzner.cloud 2>/dev/null || true
|
||||
helm repo update hcloud
|
||||
|
||||
helm install hcloud-csi hcloud/hcloud-csi \
|
||||
--namespace kube-system \
|
||||
--wait \
|
||||
--timeout 5m
|
||||
log_success "Hetzner CSI Driver instalado"
|
||||
fi
|
||||
|
||||
# Verificar StorageClass
|
||||
log_info "Verificando StorageClass..."
|
||||
if kubectl get storageclass hcloud-volumes &> /dev/null; then
|
||||
log_success "StorageClass hcloud-volumes disponível"
|
||||
else
|
||||
log_error "StorageClass hcloud-volumes não encontrado"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# 2. INSTALAR NGINX INGRESS (se não existir)
|
||||
# 1. INSTALAR NGINX INGRESS (se não existir)
|
||||
# =============================================================================
|
||||
|
||||
log_info "=== Verificando NGINX Ingress ==="
|
||||
@@ -152,7 +95,7 @@ fi
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# 3. CRIAR NAMESPACE E APLICAR SECRETS
|
||||
# 2. CRIAR NAMESPACE E APLICAR SECRETS
|
||||
# =============================================================================
|
||||
|
||||
log_info "=== Configurando namespace n8n ==="
|
||||
@@ -169,7 +112,7 @@ fi
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# 4. INSTALAR n8n VIA HELM
|
||||
# 3. INSTALAR n8n VIA HELM
|
||||
# =============================================================================
|
||||
|
||||
log_info "=== Instalando n8n ==="
|
||||
@@ -201,7 +144,7 @@ fi
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# 5. AGUARDAR PODS FICAREM PRONTOS
|
||||
# 4. AGUARDAR PODS FICAREM PRONTOS
|
||||
# =============================================================================
|
||||
|
||||
log_info "=== Aguardando pods ficarem prontos ==="
|
||||
@@ -248,7 +191,6 @@ echo -e "${GREEN} Setup Completo!${NC}"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "Componentes instalados:"
|
||||
echo " - Hetzner CSI Driver (StorageClass: hcloud-volumes)"
|
||||
echo " - NGINX Ingress Controller"
|
||||
echo " - n8n (namespace: n8n)"
|
||||
echo " - Main node"
|
||||
@@ -279,15 +221,6 @@ echo ""
|
||||
echo " # Desinstalar"
|
||||
echo " helm uninstall n8n -n n8n"
|
||||
echo ""
|
||||
echo " # Fazer upgrade do helm chart"
|
||||
echo " helm upgrade --reuse-values --values custom-values.yaml n8n community-charts/n8n --namespace n8n"
|
||||
echo ""
|
||||
echo " # Verificar historico de releases"
|
||||
echo " helm history n8n -n n8n"
|
||||
echo ""
|
||||
echo " # Fazer rollback do historico de releases"
|
||||
echo " helm rollback n8n <nº da release>"
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user