diff --git a/README.md b/README.md index b159846..a9aae28 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Workshop progressivo que evolui de containers básicos até um cluster Kubernete │ PLATAFORMA (Hetzner Cloud) │ ├─────────────────────────────────────────────────────────────────────────────┤ │ Aula 09 Aula 10 Aula 11 │ -│ n8n (Hetzner) GitLab ArgoCD + Runner │ +│ n8n (Hetzner) Gitea ArgoCD │ │ Multi-tenant Registry + SSH GitOps CI/CD │ └─────────────────────────────────────────────────────────────────────────────┘ │ @@ -77,7 +77,7 @@ Workshop progressivo que evolui de containers básicos até um cluster Kubernete | 07 | Talos Linux | Hetzner | Imagem customizada, Factory | | 08 | Cluster HA | Hetzner | OpenTofu, CCM, CSI, Autoscaler | | 09 | n8n (Cloud) | Hetzner | Multi-tenant, CSI Driver | -| 10 | GitLab | Hetzner | Registry, SSH, Helm | +| 10 | Gitea | Hetzner | Registry, SSH, Helm | | 11 | ArgoCD | Hetzner | GitOps, Runner, CI/CD | | 12 | Victoria Metrics | Hetzner | Observabilidade, Grafana, Alertas | | 14 | Istio | Hetzner | Service Mesh, Traffic Splitting, Kiali | @@ -117,7 +117,7 @@ cd aula-08 && ./setup.sh # 3. Instalar aplicações cd aula-09 && ./setup.sh # n8n -cd aula-10 && ./setup.sh # GitLab +cd aula-10 && ./setup.sh # Gitea cd aula-11 && ./setup.sh # ArgoCD cd aula-12 && ./setup.sh # Victoria Metrics + Grafana cd aula-14 && ./setup.sh # Istio + Kiali @@ -141,7 +141,7 @@ cd aula-14 && ./setup.sh # Istio + Kiali ┌─────────────┬───────────┼───────────┬─────────────┐ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ - git.kube.quest n8n.kube.quest argocd grafana.kube.quest kiali.kube.quest + gitea.kube.quest n8n.kube.quest argocd grafana.kube.quest kiali.kube.quest │ │ │ │ │ └─────────────┴───────────┼───────────┴─────────────┘ │ @@ -161,10 +161,10 @@ cd aula-14 && ./setup.sh # Istio + Kiali │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ -│ GitLab │ │ n8n │ │ ArgoCD │ │ Victor.│ │ Istio │ │ Apps │ +│ Gitea │ │ n8n │ │ ArgoCD │ │ Victor.│ │ Istio │ │ Apps │ │ │ │ │ │ │ │ Metrics│ │ System │ │ Mesh │ -│Registry│ │Workers │ │ Runner │ │Grafana │ │ Kiali │ │ v1/v2 │ -│ SSH │ │Webhooks│ │GitOps │ │Alertas │ │ Jaeger │ │Canary │ +│Registry│ │Workers │ │GitOps │ │Grafana │ │ Kiali │ │ v1/v2 │ +│ SSH │ │Webhooks│ │ │ │Alertas │ │ Jaeger │ │Canary │ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ GitOps Pipeline @@ -205,8 +205,8 @@ workshop/ ├── aula-07/ # Talos Linux Image ├── aula-08/ # Cluster Hetzner (OpenTofu) ├── aula-09/ # n8n Hetzner -├── aula-10/ # GitLab -├── aula-11/ # ArgoCD + GitLab Runner +├── aula-10/ # Gitea +├── aula-11/ # ArgoCD (GitOps) ├── aula-12/ # Victoria Metrics + Grafana └── aula-14/ # Istio Traffic Splitting ``` diff --git a/aula-08/README.md b/aula-08/README.md index 5e29036..72dd125 100644 --- a/aula-08/README.md +++ b/aula-08/README.md @@ -47,7 +47,7 @@ O LoadBalancer centraliza todo o trafego externo: | 50000 | Control Planes | Talos API | | 80 | Workers | HTTP (NGINX Ingress) | | 443 | Workers | HTTPS (NGINX Ingress) | -| 22 | Workers | SSH (GitLab) | +| 22 | Workers | SSH (Gitea) | ### Roteamento L7 (por dominio) @@ -55,7 +55,7 @@ O LoadBalancer faz apenas roteamento L4 (por porta). O roteamento por dominio e ``` LB :443 → NGINX Ingress → n8n.kube.quest → n8n pods - → git.kube.quest → gitlab pods + → gitea.kube.quest → gitea pods → argocd.kube.quest → argocd pods → registry.git... → registry pods ``` @@ -186,7 +186,7 @@ kubectl delete deployment test 1. **Configurar DNS** - Apontar dominio para o IP do LoadBalancer 2. **Deploy n8n** (aula-09) - Workflow automation com PostgreSQL e Redis -3. **Deploy GitLab** (aula-10) - Git + Container Registry + SSH +3. **Deploy Gitea** (aula-10) - Git + Container Registry + SSH ## Arquivos diff --git a/aula-08/cluster-autoscaler.yaml b/aula-08/cluster-autoscaler.yaml index 8772d42..6f7d395 100644 --- a/aula-08/cluster-autoscaler.yaml +++ b/aula-08/cluster-autoscaler.yaml @@ -3,7 +3,7 @@ # # Pools: # - worker-pool: CAX21 (4 vCPU, 8GB) - workloads gerais -# - gitlab-pool: CAX21 - GitLab e serviços relacionados +# - gitlab-pool: CAX21 - Gitea e serviços relacionados # - build-pool: CAX31 (8 vCPU, 16GB) - builds Docker, escala 0-1 ############################################################ @@ -130,7 +130,7 @@ spec: # worker-pool: Workloads gerais (CAX21 = 4 vCPU, 8GB) - --nodes=1:3:CAX21:nbg1:worker-pool # - # gitlab-pool: GitLab e serviços pesados (CAX21) + # gitlab-pool: Gitea e serviços pesados (CAX21) - --nodes=1:2:CAX21:nbg1:gitlab-pool # # build-pool: Builds Docker (CAX31 = 8 vCPU, 16GB) diff --git a/aula-08/install-nginx-ingress.sh b/aula-08/install-nginx-ingress.sh index 83e65b0..bf7e232 100755 --- a/aula-08/install-nginx-ingress.sh +++ b/aula-08/install-nginx-ingress.sh @@ -5,7 +5,7 @@ # # Este script configura o NGINX Ingress para: # - Usar LoadBalancer da Hetzner (requer CCM instalado) -# - Suportar TCP passthrough para SSH do GitLab +# - Suportar TCP passthrough para SSH do Gitea # - Comunicação via rede privada # # Pré-requisitos: @@ -125,15 +125,14 @@ echo "" echo "Portas expostas:" echo " - 80 (HTTP)" echo " - 443 (HTTPS)" -echo " - 22 (SSH - para GitLab)" +echo " - 22 (SSH - para Gitea)" echo "" echo "Próximos passos:" echo " 1. Configure DNS apontando para o IP acima:" echo " - n8n.kube.quest → $EXTERNAL_IP" -echo " - git.kube.quest → $EXTERNAL_IP" -echo " - registry.git.kube.quest → $EXTERNAL_IP" +echo " - gitea.kube.quest → $EXTERNAL_IP" echo "" -echo " 2. Instale o GitLab:" +echo " 2. Instale o Gitea:" echo " cd ../aula-09 && ./setup.sh" echo "" echo "==============================================" diff --git a/aula-08/main.tf b/aula-08/main.tf index 23a35ac..f54297b 100644 --- a/aula-08/main.tf +++ b/aula-08/main.tf @@ -333,7 +333,7 @@ resource "hcloud_load_balancer_service" "https" { } } -# SSH (22) -> Workers (GitLab SSH) +# SSH (22) -> Workers (Gitea SSH) resource "hcloud_load_balancer_service" "ssh" { count = var.enable_loadbalancer ? 1 : 0 load_balancer_id = hcloud_load_balancer.cluster[0].id diff --git a/aula-08/nginx-ingress-values.yaml b/aula-08/nginx-ingress-values.yaml index a674bd4..70d842d 100644 --- a/aula-08/nginx-ingress-values.yaml +++ b/aula-08/nginx-ingress-values.yaml @@ -4,7 +4,7 @@ # # Este values configura o NGINX Ingress com: # - LoadBalancer da Hetzner (provisionado automaticamente pelo CCM) -# - Suporte a TCP para SSH do GitLab (porta 22) +# - Suporte a TCP para SSH do Gitea (porta 22) # - Uso de rede privada para comunicação com os nodes # # Uso: @@ -40,12 +40,12 @@ controller: load-balancer.hetzner.cloud/health-check-retries: "3" # ========================================================================== - # TCP Services - Para SSH do GitLab + # TCP Services - Para SSH do Gitea # ========================================================================== # Mapeia porta externa -> namespace/service:porta - # O GitLab Shell roda no namespace gitlab, service gitlab-gitlab-shell + # O Gitea SSH roda no namespace gitea, service gitea-ssh tcp: - 22: "gitlab/gitlab-gitlab-shell:22" + 22: "gitea/gitea-ssh:22" # Configuração do controller config: @@ -57,7 +57,7 @@ controller: proxy-read-timeout: "120" proxy-send-timeout: "120" - # Body size para uploads grandes (GitLab, n8n) + # Body size para uploads grandes (Gitea, n8n) proxy-body-size: "0" # Keepalive diff --git a/aula-08/setup.sh b/aula-08/setup.sh index 46528b3..1b652e4 100755 --- a/aula-08/setup.sh +++ b/aula-08/setup.sh @@ -212,7 +212,7 @@ if [ "$SKIP_CREDENTIALS" != "true" ]; then echo "" echo " O LoadBalancer também serve para:" echo " - HTTP/HTTPS (NGINX Ingress)" - echo " - SSH (GitLab)" + echo " - SSH (Gitea)" echo " - Talos API" echo "" echo " Custo adicional: ~\$6/mes" diff --git a/aula-09/README.md b/aula-09/README.md index 7af74b3..b246fb6 100644 --- a/aula-09/README.md +++ b/aula-09/README.md @@ -224,7 +224,7 @@ Para provisionar n8n para múltiplos clientes em namespaces separados: # Isso cria: # - Namespace: acme-n8n # - n8n em: https://acme-n8n.{domain} -# - Grupo GitLab: /acme/ (se GitLab instalado - aula-10) +# - Organização Gitea: /acme/ (se Gitea instalado - aula-10) ``` O script `add-client.sh` herda a configuração do `.env` gerado pelo `setup.sh`. diff --git a/aula-09/add-client.sh b/aula-09/add-client.sh index f0823b3..545bb51 100755 --- a/aula-09/add-client.sh +++ b/aula-09/add-client.sh @@ -5,7 +5,7 @@ # # Este script provisiona um novo cliente com: # - n8n em namespace separado (cliente-n8n) -# - Grupo no GitLab compartilhado (opcional) +# - Organização no Gitea compartilhado (opcional) # # Uso: # ./add-client.sh @@ -13,7 +13,7 @@ # Exemplo: # ./add-client.sh acme # -> Cria namespace acme-n8n com n8n -# -> Cria grupo /acme no GitLab (se disponível) +# -> Cria organização /acme no Gitea (se disponível) # # Pré-requisitos: # - ./setup.sh já executado (gera .env com configurações) @@ -64,8 +64,8 @@ if [[ -z "$DOMAIN" ]]; then exit 1 fi -# Carregar configuração do GitLab se disponível -GITLAB_HOST="" +# Carregar configuração do Gitea se disponível +GITEA_HOST="" if [[ -f "$SCRIPT_DIR/../aula-10/.env" ]]; then source "$SCRIPT_DIR/../aula-10/.env" fi @@ -90,8 +90,8 @@ if [ -z "$CLIENT" ]; then PROTOCOL="https" [[ "$USE_CLOUDFLARE" == "false" && "$USE_LETSENCRYPT" == "false" ]] && PROTOCOL="http" echo " - n8n em: ${PROTOCOL}://acme-n8n.${DOMAIN}" - if [[ -n "$GITLAB_HOST" ]]; then - echo " - GitLab grupo: https://${GITLAB_HOST}/acme/ (se configurado)" + if [[ -n "$GITEA_HOST" ]]; then + echo " - Gitea organização: https://${GITEA_HOST}/acme/ (se configurado)" fi exit 1 fi @@ -196,46 +196,45 @@ eval helm upgrade --install ${CLIENT}-n8n community-charts/n8n \ log_success "n8n instalado" # ============================================================================= -# 3. CRIAR GRUPO NO GITLAB (opcional) +# 3. CRIAR ORGANIZAÇÃO NO GITEA (opcional) # ============================================================================= -log_info "Verificando GitLab..." +log_info "Verificando Gitea..." -# Obter token do GitLab -if [ -z "$GITLAB_TOKEN" ]; then - GITLAB_TOKEN=$(kubectl get secret gitlab-gitlab-initial-root-password \ - -n gitlab \ +# Obter token do Gitea +if [ -z "$GITEA_TOKEN" ]; then + GITEA_TOKEN=$(kubectl get secret gitea-admin-secret \ + -n gitea \ -o jsonpath='{.data.password}' 2>/dev/null | base64 -d || echo "") fi -if [ -z "$GITLAB_TOKEN" ]; then - log_warn "GitLab não encontrado ou não configurado" - log_warn "Pule esta etapa ou crie o grupo manualmente" +if [ -z "$GITEA_TOKEN" ]; then + log_warn "Gitea não encontrado ou não configurado" + log_warn "Pule esta etapa ou crie a organização manualmente" else - log_info "Criando grupo no GitLab..." - # Usar GITLAB_HOST se disponível (da aula-10/.env) - if [[ -n "$GITLAB_HOST" ]]; then - GITLAB_URL="https://${GITLAB_HOST}" + log_info "Criando organização no Gitea..." + # Usar GITEA_HOST se disponível (da aula-10/.env) + if [[ -n "$GITEA_HOST" ]]; then + GITEA_URL="https://${GITEA_HOST}" else - GITLAB_URL="https://git.${DOMAIN}" + GITEA_URL="https://gitea.${DOMAIN}" fi - # Criar grupo via API - RESULT=$(curl -s --request POST "${GITLAB_URL}/api/v4/groups" \ - --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - --form "name=${CLIENT}" \ - --form "path=${CLIENT}" \ - --form "visibility=private" \ + # Criar organização via API + RESULT=$(curl -s --request POST "${GITEA_URL}/api/v1/orgs" \ + --header "Authorization: token ${GITEA_TOKEN}" \ + --header "Content-Type: application/json" \ + --data "{\"username\":\"${CLIENT}\",\"visibility\":\"private\"}" \ --write-out "%{http_code}" \ - --output /tmp/gitlab-group-result.json 2>/dev/null || echo "000") + --output /tmp/gitea-org-result.json 2>/dev/null || echo "000") if [ "$RESULT" == "201" ]; then - log_success "Grupo criado no GitLab" - elif [ "$RESULT" == "400" ]; then - log_warn "Grupo já existe ou erro de validação" + log_success "Organização criada no Gitea" + elif [ "$RESULT" == "422" ]; then + log_warn "Organização já existe ou erro de validação" else - log_warn "Não foi possível criar grupo (HTTP $RESULT)" - log_warn "Crie manualmente em ${GITLAB_URL}/admin/groups/new" + log_warn "Não foi possível criar organização (HTTP $RESULT)" + log_warn "Crie manualmente em ${GITEA_URL}/-/admin/orgs" fi fi @@ -259,11 +258,11 @@ echo -e "${CYAN}═════════════════════ echo "" echo "Serviços:" echo -e " n8n: ${GREEN}${PROTOCOL}://${CLIENT}-n8n.${DOMAIN}${NC}" -if [ -n "$GITLAB_TOKEN" ]; then - if [[ -n "$GITLAB_HOST" ]]; then - echo -e " GitLab: ${GREEN}https://${GITLAB_HOST}/${CLIENT}/${NC}" +if [ -n "$GITEA_TOKEN" ]; then + if [[ -n "$GITEA_HOST" ]]; then + echo -e " Gitea: ${GREEN}https://${GITEA_HOST}/${CLIENT}/${NC}" else - echo -e " GitLab: ${GREEN}https://git.${DOMAIN}/${CLIENT}/${NC}" + echo -e " Gitea: ${GREEN}https://gitea.${DOMAIN}/${CLIENT}/${NC}" fi fi echo "" @@ -285,13 +284,13 @@ else echo "(Ou use o wildcard *.${DOMAIN} se já configurado)" fi -if [ -n "$GITLAB_TOKEN" ]; then +if [ -n "$GITEA_TOKEN" ]; then echo "" echo "Git clone:" - if [[ -n "$GITLAB_HOST" ]]; then - echo " git clone git@${GITLAB_HOST}:${CLIENT}/meu-projeto.git" + if [[ -n "$GITEA_HOST" ]]; then + echo " git clone git@${GITEA_HOST}:${CLIENT}/meu-projeto.git" else - echo " git clone git@git.${DOMAIN}:${CLIENT}/meu-projeto.git" + echo " git clone git@gitea.${DOMAIN}:${CLIENT}/meu-projeto.git" fi fi diff --git a/aula-10/gitlab-registry-storage-secret.yaml b/aula-10/gitlab-registry-storage-secret.yaml new file mode 100644 index 0000000..df9791a --- /dev/null +++ b/aula-10/gitlab-registry-storage-secret.yaml @@ -0,0 +1,34 @@ +# ============================================================================= +# GitLab Registry Storage Secret - Hetzner Object Storage +# ============================================================================= +# +# Este secret configura o Registry para usar Hetzner Object Storage (S3 compatível) +# +# ANTES DE APLICAR: +# 1. Crie o bucket "gitlab-registry" na Hetzner Cloud Console +# 2. Gere credenciais S3 (Access Key + Secret Key) +# 3. Substitua os valores abaixo +# +# Para aplicar: +# kubectl apply -f gitlab-registry-storage-secret.yaml +# +# ============================================================================= + +apiVersion: v1 +kind: Secret +metadata: + name: gitlab-registry-storage + namespace: gitlab +type: Opaque +stringData: + config: | + s3: + bucket: gitlab-registry + accesskey: + secretkey: + region: eu-central + regionendpoint: https://fsn1.your-objectstorage.com + v4auth: true + secure: true + chunksize: 5242880 + rootdirectory: / diff --git a/aula-11/node-bugado/k8s/deployment.yaml b/aula-11/node-bugado/k8s/deployment.yaml index 3ebeb61..0dcd30c 100644 --- a/aula-11/node-bugado/k8s/deployment.yaml +++ b/aula-11/node-bugado/k8s/deployment.yaml @@ -3,7 +3,7 @@ # ============================================================================= # # Deployment com liveness e readiness probes. -# A imagem é atualizada automaticamente pelo pipeline GitLab CI. +# A imagem é atualizada automaticamente pelo pipeline Gitea Actions. # # ============================================================================= @@ -26,8 +26,8 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: node-bugado - # IMPORTANTE: Esta linha é atualizada automaticamente pelo GitLab CI - image: registry.kube.quest/workshop/node-bugado:latest + # IMPORTANTE: Esta linha é atualizada automaticamente pelo Gitea Actions + image: gitea.kube.quest/depaula/node-bugado:latest ports: - containerPort: 3000 name: http diff --git a/aula-12/README.md b/aula-12/README.md index 4b16e79..b61c1e2 100644 --- a/aula-12/README.md +++ b/aula-12/README.md @@ -58,7 +58,7 @@ Victoria Metrics oferece **compatibilidade total** com Prometheus, mas com vanta - Cluster Kubernetes Hetzner (aula-08) - ArgoCD instalado (aula-11) -- GitLab com grupo `factory` (aula-11) +- Gitea com org `factory` (aula-11) ## Estrutura @@ -68,7 +68,7 @@ aula-12/ ├── setup.sh # Instalação automatizada ├── cleanup.sh # Remoção via ArgoCD │ -├── gitops/ # Conteúdo para GitLab +├── gitops/ # Conteúdo para Gitea │ └── apps/ │ └── victoria-metrics/ │ ├── Chart.yaml # Helm chart wrapper @@ -96,7 +96,7 @@ cd aula-12 ``` O script: -1. Cria projeto `factory/monitoring` no GitLab +1. Cria repositório `factory/monitoring` no Gitea 2. Faz push dos manifests GitOps 3. Cria namespace `monitoring` 4. Aplica ArgoCD Application @@ -106,8 +106,8 @@ O script: ``` ┌──────────────────┐ push ┌──────────────────┐ -│ aula-12/ │ ──────────► │ factory/monitoring│ -│ gitops/ │ │ (GitLab) │ +│ aula-12/ │ ──────────► │factory/monitoring │ +│ gitops/ │ │ (Gitea) │ └──────────────────┘ └────────┬─────────┘ │ sync │ @@ -494,7 +494,7 @@ vmsingle: O script remove: 1. ArgoCD Application 2. Namespace `monitoring` -3. Projeto GitLab (opcional) +3. Repositório Gitea (opcional) **Nota**: Dados de métricas serão perdidos! diff --git a/aula-12/argocd/application.yaml b/aula-12/argocd/application.yaml index 9661003..efd17d1 100644 --- a/aula-12/argocd/application.yaml +++ b/aula-12/argocd/application.yaml @@ -19,8 +19,8 @@ spec: project: default source: - # URL do repositório GitLab (ajustar conforme seu domínio) - repoURL: https://git.kube.quest/factory/monitoring.git + # URL do repositório Gitea (ajustar conforme seu domínio) + repoURL: https://gitea.kube.quest/factory/monitoring.git targetRevision: HEAD path: apps/victoria-metrics diff --git a/aula-12/cleanup.sh b/aula-12/cleanup.sh index 2db887b..ce3b3f0 100755 --- a/aula-12/cleanup.sh +++ b/aula-12/cleanup.sh @@ -110,28 +110,24 @@ else fi # ============================================================================= -# REMOVER PROJETO GITLAB (OPCIONAL) +# REMOVER REPOSITÓRIO GITEA (OPCIONAL) # ============================================================================= -if [[ -n "$GITLAB_HOST" && -n "$GITLAB_TOKEN" ]]; then +if [[ -n "$GITEA_HOST" && -n "$GITEA_TOKEN" ]]; then echo "" - read -p "Remover projeto 'factory/monitoring' do GitLab? [y/N]: " REMOVE_PROJECT + read -p "Remover repositório 'factory/monitoring' do Gitea? [y/N]: " REMOVE_PROJECT if [[ "$REMOVE_PROJECT" == "y" || "$REMOVE_PROJECT" == "Y" ]]; then - log_info "Removendo projeto do GitLab..." + log_info "Removendo repositório do Gitea..." - # Obter ID do projeto - PROJECT_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - "https://${GITLAB_HOST}/api/v4/projects/factory%2Fmonitoring") + DELETE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" --request DELETE \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "https://${GITEA_HOST}/api/v1/repos/factory/monitoring") - PROJECT_ID=$(echo "$PROJECT_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) - - if [[ -n "$PROJECT_ID" ]]; then - curl -s --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - "https://${GITLAB_HOST}/api/v4/projects/${PROJECT_ID}" - log_success "Projeto removido do GitLab" + if [[ "$DELETE_RESPONSE" == "204" ]]; then + log_success "Repositório removido do Gitea" else - log_info "Projeto não encontrado no GitLab" + log_info "Repositório não encontrado no Gitea (HTTP ${DELETE_RESPONSE})" fi fi fi diff --git a/aula-12/setup.sh b/aula-12/setup.sh index f680e5a..50f9843 100755 --- a/aula-12/setup.sh +++ b/aula-12/setup.sh @@ -4,7 +4,7 @@ # ============================================================================= # # Este script instala Victoria Metrics stack usando ArgoCD (GitOps): -# 1. Cria projeto 'factory/monitoring' no GitLab +# 1. Cria projeto 'factory/monitoring' no Gitea # 2. Push dos manifests GitOps # 3. Cria ArgoCD Application # 4. Victoria Metrics + Grafana são sincronizados automaticamente @@ -12,7 +12,7 @@ # Pré-requisitos: # - Cluster Kubernetes (aula-08) # - ArgoCD instalado (aula-11) -# - GitLab com grupo 'factory' (aula-10/11) +# - Gitea com org 'factory' (aula-10/11) # # ============================================================================= @@ -117,15 +117,15 @@ echo " Configuração Victoria Metrics (GitOps)" echo "==========================================" echo "" -# GitLab Host -if [[ -z "$GITLAB_HOST" ]]; then - read -p "Hostname do GitLab (ex: git.kube.quest): " GITLAB_HOST +# Gitea Host +if [[ -z "$GITEA_HOST" ]]; then + read -p "Hostname do Gitea (ex: gitea.kube.quest): " GITEA_HOST fi -log_info "GitLab: https://${GITLAB_HOST}" +log_info "Gitea: https://${GITEA_HOST}" # Extrair domínio base if [[ -z "$DOMAIN" ]]; then - DOMAIN=$(echo "$GITLAB_HOST" | sed 's/^[^.]*\.//') + DOMAIN=$(echo "$GITEA_HOST" | sed 's/^[^.]*\.//') fi # Grafana Host @@ -136,14 +136,14 @@ if [[ -z "$GRAFANA_HOST" ]]; then fi log_info "Grafana: https://${GRAFANA_HOST}" -# GitLab Token (para criar projeto via API) -if [[ -z "$GITLAB_TOKEN" ]]; then +# Gitea Token (para criar projeto via API) +if [[ -z "$GITEA_TOKEN" ]]; then echo "" - echo "Token de acesso GitLab (para criar projeto via API):" - echo " 1. Acesse https://${GITLAB_HOST}/-/user_settings/personal_access_tokens" - echo " 2. Crie um token com scope 'api'" + echo "Token de acesso Gitea (para criar repositório via API):" + echo " 1. Acesse https://${GITEA_HOST}/user/settings/applications" + echo " 2. Crie um token com permissões de escrita" echo "" - read -p "GitLab Token: " GITLAB_TOKEN + read -p "Gitea Token: " GITEA_TOKEN fi # TLS (herdar da aula-11) @@ -166,72 +166,73 @@ fi cat > "$ENV_FILE" << EOF # Configuração gerada pelo setup.sh # $(date) -GITLAB_HOST=${GITLAB_HOST} +GITEA_HOST=${GITEA_HOST} GRAFANA_HOST=${GRAFANA_HOST} DOMAIN=${DOMAIN} USE_CLOUDFLARE=${USE_CLOUDFLARE} USE_LETSENCRYPT=${USE_LETSENCRYPT} -GITLAB_TOKEN=${GITLAB_TOKEN} +GITEA_TOKEN=${GITEA_TOKEN} EOF log_success "Configuração salva em ${ENV_FILE}" # ============================================================================= -# CRIAR PROJETO NO GITLAB (VIA API) +# CRIAR REPOSITÓRIO NO GITEA (VIA API) # ============================================================================= echo "" -log_info "=== Criando Projeto no GitLab ===" +log_info "=== Criando Repositório no Gitea ===" -# Verificar se grupo factory existe -log_info "Verificando grupo 'factory'..." -GROUP_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - "https://${GITLAB_HOST}/api/v4/groups?search=factory") +# Verificar se org factory existe +log_info "Verificando organização 'factory'..." +ORG_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "https://${GITEA_HOST}/api/v1/orgs/factory") -GROUP_ID=$(echo "$GROUP_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) +if [[ "$ORG_RESPONSE" != "200" ]]; then + log_info "Criando organização 'factory'..." + ORG_CREATE=$(curl -s --request POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + --data '{"username": "factory", "visibility": "limited"}' \ + "https://${GITEA_HOST}/api/v1/orgs") -if [[ -z "$GROUP_ID" ]]; then - log_info "Criando grupo 'factory'..." - GROUP_CREATE=$(curl -s --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - --header "Content-Type: application/json" \ - --data '{"name": "factory", "path": "factory", "visibility": "internal"}' \ - "https://${GITLAB_HOST}/api/v4/groups") - GROUP_ID=$(echo "$GROUP_CREATE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) + ORG_NAME=$(echo "$ORG_CREATE" | grep -o '"username":"factory"' || true) - if [[ -z "$GROUP_ID" ]]; then - log_error "Falha ao criar grupo 'factory'" - log_info "Crie manualmente em https://${GITLAB_HOST}/admin/groups/new" + if [[ -z "$ORG_NAME" ]]; then + log_error "Falha ao criar organização 'factory'" + echo "$ORG_CREATE" exit 1 fi - log_success "Grupo 'factory' criado (ID: ${GROUP_ID})" + log_success "Organização 'factory' criada" else - log_success "Grupo 'factory' já existe (ID: ${GROUP_ID})" + log_success "Organização 'factory' já existe" fi -# Verificar se projeto monitoring existe -log_info "Verificando projeto 'monitoring'..." -PROJECT_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - "https://${GITLAB_HOST}/api/v4/projects?search=monitoring") +# Verificar se repositório monitoring existe +log_info "Verificando repositório 'monitoring'..." +REPO_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "https://${GITEA_HOST}/api/v1/repos/factory/monitoring") -PROJECT_EXISTS=$(echo "$PROJECT_RESPONSE" | grep -o '"path_with_namespace":"factory/monitoring"' || true) +if [[ "$REPO_RESPONSE" != "200" ]]; then + log_info "Criando repositório 'monitoring'..." + REPO_CREATE=$(curl -s --request POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + --data '{"name": "monitoring", "private": false, "auto_init": false}' \ + "https://${GITEA_HOST}/api/v1/orgs/factory/repos") -if [[ -z "$PROJECT_EXISTS" ]]; then - log_info "Criando projeto 'monitoring'..." - PROJECT_CREATE=$(curl -s --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ - --header "Content-Type: application/json" \ - --data "{\"name\": \"monitoring\", \"namespace_id\": ${GROUP_ID}, \"visibility\": \"internal\", \"initialize_with_readme\": false}" \ - "https://${GITLAB_HOST}/api/v4/projects") + REPO_NAME=$(echo "$REPO_CREATE" | grep -o '"name":"monitoring"' || true) - PROJECT_ID=$(echo "$PROJECT_CREATE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) - - if [[ -z "$PROJECT_ID" ]]; then - log_error "Falha ao criar projeto 'monitoring'" - echo "$PROJECT_CREATE" + if [[ -z "$REPO_NAME" ]]; then + log_error "Falha ao criar repositório 'monitoring'" + echo "$REPO_CREATE" exit 1 fi - log_success "Projeto 'monitoring' criado (ID: ${PROJECT_ID})" + log_success "Repositório 'monitoring' criado" else - log_success "Projeto 'monitoring' já existe" + log_success "Repositório 'monitoring' já existe" fi # ============================================================================= @@ -253,7 +254,8 @@ git config --global user.name "ArgoCD Setup" 2>/dev/null || true # Clone do repositório (usando token) log_info "Clonando repositório..." -GIT_URL="https://oauth2:${GITLAB_TOKEN}@${GITLAB_HOST}/factory/monitoring.git" +GITEA_USER=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" "https://${GITEA_HOST}/api/v1/user" | grep -o '"login":"[^"]*"' | cut -d'"' -f4) +GIT_URL="https://${GITEA_USER}:${GITEA_TOKEN}@${GITEA_HOST}/factory/monitoring.git" if ! git clone "${GIT_URL}" monitoring 2>/dev/null; then # Repositório vazio, inicializar @@ -282,12 +284,12 @@ if git diff --cached --quiet; then log_info "Nenhuma mudança para commit" else git commit -m "feat: Victoria Metrics stack configuration" - log_info "Pushing para GitLab..." + log_info "Pushing para Gitea..." git push -u origin main 2>/dev/null || git push -u origin master 2>/dev/null || { # Primeiro push em repo vazio git push --set-upstream origin main 2>/dev/null || git push --set-upstream origin master } - log_success "Manifests enviados para GitLab" + log_success "Manifests enviados para Gitea" fi cd "${SCRIPT_DIR}" @@ -321,9 +323,9 @@ metadata: argocd.argoproj.io/secret-type: repository stringData: type: git - url: https://${GITLAB_HOST}/factory/monitoring.git - username: oauth2 - password: ${GITLAB_TOKEN} + url: https://${GITEA_HOST}/factory/monitoring.git + username: ${GITEA_USER} + password: ${GITEA_TOKEN} EOF log_success "Repositório configurado no ArgoCD" @@ -353,7 +355,7 @@ metadata: spec: project: default source: - repoURL: https://${GITLAB_HOST}/factory/monitoring.git + repoURL: https://${GITEA_HOST}/factory/monitoring.git targetRevision: HEAD path: apps/victoria-metrics helm: @@ -458,7 +460,7 @@ echo "Pods:" echo " kubectl get pods -n monitoring" echo "" echo "GitOps Repository:" -echo " https://${GITLAB_HOST}/factory/monitoring" +echo " https://${GITEA_HOST}/factory/monitoring" echo "" echo "Verificar métricas:" echo " kubectl port-forward -n monitoring svc/vmsingle-vm 8429:8429" diff --git a/aula-13/benchmarks/benchmark-clean.sh b/aula-13/benchmarks/benchmark-clean.sh index 4a0e967..bd8efda 100755 --- a/aula-13/benchmarks/benchmark-clean.sh +++ b/aula-13/benchmarks/benchmark-clean.sh @@ -11,7 +11,7 @@ set -e NAMESPACE="benchmark-clean" -ESTARGZ_IMAGE="registry.kube.quest/factory/postgresql:17" +ESTARGZ_IMAGE="gitea.kube.quest/factory/postgresql:17" TRADITIONAL_IMAGE="postgres:17-alpine" TARGET_NODE="talos-msadg4-worker-0" # Node sem cache @@ -39,10 +39,10 @@ echo " Ambiente limpo" # Criar namespace echo "[3/6] Criando namespace de teste..." kubectl create namespace $NAMESPACE -kubectl create secret docker-registry gitlab-registry \ - --docker-server=registry.kube.quest \ +kubectl create secret docker-registry gitea-registry \ + --docker-server=gitea.kube.quest \ --docker-username=root \ - --docker-password="${GITLAB_TOKEN:-glpat-dummy}" \ + --docker-password="${GITEA_TOKEN:-glpat-dummy}" \ -n $NAMESPACE 2>/dev/null || true echo " Namespace criado" @@ -103,7 +103,7 @@ spec: nodeName: $TARGET_NODE restartPolicy: Never imagePullSecrets: - - name: gitlab-registry + - name: gitea-registry containers: - name: postgres image: $ESTARGZ_IMAGE diff --git a/aula-13/benchmarks/benchmark-postgresql.sh b/aula-13/benchmarks/benchmark-postgresql.sh index 43bf263..2691e2e 100755 --- a/aula-13/benchmarks/benchmark-postgresql.sh +++ b/aula-13/benchmarks/benchmark-postgresql.sh @@ -5,7 +5,7 @@ # # Compara tempo de startup entre: # - postgres:17-alpine (gzip tradicional) -# - registry.kube.quest/factory/postgresql:17 (eStargz) +# - gitea.kube.quest/factory/postgresql:17 (eStargz) # # Este script usa timestamps dos eventos do Kubernetes para medir: # - Tempo de pull (Pulling -> Pulled) @@ -16,7 +16,7 @@ set -e NAMESPACE="benchmark-test" -ESTARGZ_IMAGE="registry.kube.quest/factory/postgresql:17" +ESTARGZ_IMAGE="gitea.kube.quest/factory/postgresql:17" TRADITIONAL_IMAGE="postgres:17-alpine" echo "========================================================================" @@ -41,10 +41,10 @@ echo " Ambiente limpo" # Criar namespace echo "[3/6] Criando namespace de teste..." kubectl create namespace $NAMESPACE -kubectl create secret docker-registry gitlab-registry \ - --docker-server=registry.kube.quest \ +kubectl create secret docker-registry gitea-registry \ + --docker-server=gitea.kube.quest \ --docker-username=root \ - --docker-password="${GITLAB_TOKEN:-glpat-dummy}" \ + --docker-password="${GITEA_TOKEN:-glpat-dummy}" \ -n $NAMESPACE 2>/dev/null || true echo " Namespace criado" @@ -74,7 +74,7 @@ T2_START=$(date +%s) kubectl run pg-estargz --image=$ESTARGZ_IMAGE --restart=Never \ --env=POSTGRES_PASSWORD=benchmarktest \ - --overrides='{"spec":{"imagePullSecrets":[{"name":"gitlab-registry"}]}}' \ + --overrides='{"spec":{"imagePullSecrets":[{"name":"gitea-registry"}]}}' \ -n $NAMESPACE 2>&1 | grep -v "Warning:" kubectl wait --for=condition=Ready pod/pg-estargz -n $NAMESPACE --timeout=180s diff --git a/aula-13/benchmarks/benchmark-pull-only.sh b/aula-13/benchmarks/benchmark-pull-only.sh index 9fdfd74..570cee3 100755 --- a/aula-13/benchmarks/benchmark-pull-only.sh +++ b/aula-13/benchmarks/benchmark-pull-only.sh @@ -11,7 +11,7 @@ set -e NAMESPACE="benchmark-pull" -ESTARGZ_IMAGE="registry.kube.quest/factory/postgresql:17" +ESTARGZ_IMAGE="gitea.kube.quest/factory/postgresql:17" TRADITIONAL_IMAGE="postgres:17-alpine" TARGET_NODE="worker-pool-6bea48339a15ab6e" # Node 128.140.11.113 - sem cache @@ -25,10 +25,10 @@ echo "" # Setup kubectl delete namespace $NAMESPACE --ignore-not-found=true --wait=true 2>/dev/null || true kubectl create namespace $NAMESPACE -kubectl create secret docker-registry gitlab-registry \ - --docker-server=registry.kube.quest \ +kubectl create secret docker-registry gitea-registry \ + --docker-server=gitea.kube.quest \ --docker-username=root \ - --docker-password="${GITLAB_TOKEN:-glpat-dummy}" \ + --docker-password="${GITEA_TOKEN:-glpat-dummy}" \ -n $NAMESPACE 2>/dev/null || true echo "" @@ -85,7 +85,7 @@ spec: nodeName: $TARGET_NODE restartPolicy: Never imagePullSecrets: - - name: gitlab-registry + - name: gitea-registry containers: - name: postgres image: $ESTARGZ_IMAGE diff --git a/aula-13/benchmarks/benchmark-toolbox.sh b/aula-13/benchmarks/benchmark-toolbox.sh index d12bd24..02145b0 100755 --- a/aula-13/benchmarks/benchmark-toolbox.sh +++ b/aula-13/benchmarks/benchmark-toolbox.sh @@ -9,7 +9,7 @@ set -e NAMESPACE="benchmark-toolbox" -REGISTRY="registry.kube.quest" +REGISTRY="gitea.kube.quest" IMAGE_NAME="factory/devops-toolbox" # Cores @@ -50,7 +50,7 @@ spec: imagePullPolicy: Always restartPolicy: Never imagePullSecrets: - - name: gitlab-registry + - name: gitea-registry EOF # Medir tempo até completar @@ -85,12 +85,12 @@ main() { kubectl create namespace $NAMESPACE 2>/dev/null || true # Copiar secret do registry - if kubectl get secret gitlab-registry -n gitlab &>/dev/null; then - kubectl get secret gitlab-registry -n gitlab -o yaml | \ - sed "s/namespace: gitlab/namespace: $NAMESPACE/" | \ + if kubectl get secret gitea-registry -n gitea &>/dev/null; then + kubectl get secret gitea-registry -n gitea -o yaml | \ + sed "s/namespace: gitea/namespace: $NAMESPACE/" | \ kubectl apply -f - 2>/dev/null || true else - log_warn "Secret gitlab-registry não encontrado. Usando imagens públicas." + log_warn "Secret gitea-registry não encontrado. Usando imagens públicas." fi echo "" diff --git a/aula-13/images/devops-toolbox/.gitlab-ci.yml b/aula-13/images/devops-toolbox/.gitlab-ci.yml index 1bcdcbb..bdb3fa8 100644 --- a/aula-13/images/devops-toolbox/.gitlab-ci.yml +++ b/aula-13/images/devops-toolbox/.gitlab-ci.yml @@ -9,7 +9,7 @@ stages: - push variables: - REGISTRY: registry.kube.quest + REGISTRY: gitea.kube.quest IMAGE_NAME: factory/devops-toolbox DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" diff --git a/aula-13/images/large-test/.gitlab-ci.yml b/aula-13/images/large-test/.gitlab-ci.yml index f516f86..69f96fc 100644 --- a/aula-13/images/large-test/.gitlab-ci.yml +++ b/aula-13/images/large-test/.gitlab-ci.yml @@ -2,7 +2,7 @@ stages: - build variables: - REGISTRY: registry.kube.quest + REGISTRY: gitea.kube.quest IMAGE_NAME: factory/large-test build: diff --git a/aula-13/k8s/postgresql/deployment.yaml b/aula-13/k8s/postgresql/deployment.yaml index 111e8af..92e39c6 100644 --- a/aula-13/k8s/postgresql/deployment.yaml +++ b/aula-13/k8s/postgresql/deployment.yaml @@ -23,7 +23,7 @@ spec: spec: terminationGracePeriodSeconds: 30 imagePullSecrets: - - name: gitlab-registry + - name: gitea-registry securityContext: runAsNonRoot: true @@ -35,7 +35,7 @@ spec: containers: - name: postgresql # Imagem da Container Factory (eStargz) - image: registry.kube.quest/factory/postgresql:17 + image: gitea.kube.quest/factory/postgresql:17 imagePullPolicy: IfNotPresent ports: diff --git a/aula-13/k8s/prepull-daemonset.yaml b/aula-13/k8s/prepull-daemonset.yaml index b1a639e..1272622 100644 --- a/aula-13/k8s/prepull-daemonset.yaml +++ b/aula-13/k8s/prepull-daemonset.yaml @@ -45,7 +45,7 @@ spec: # PostgreSQL (Container Factory) # --------------------------------------------------------------------- - name: prepull-postgresql - image: registry.kube.quest/factory/postgresql:17 + image: gitea.kube.quest/factory/postgresql:17 command: ["echo", "PostgreSQL image cached"] imagePullPolicy: Always resources: @@ -115,7 +115,7 @@ spec: # Secrets para registries privados imagePullSecrets: - - name: gitlab-registry + - name: gitea-registry --- # ============================================================================= @@ -123,9 +123,9 @@ spec: # ============================================================================= # Crie este secret em kube-system se usar registry privado: # -# kubectl create secret docker-registry gitlab-registry \ +# kubectl create secret docker-registry gitea-registry \ # --namespace=kube-system \ -# --docker-server=registry.kube.quest \ +# --docker-server=gitea.kube.quest \ # --docker-username= \ # --docker-password= # ============================================================================= diff --git a/aula-14/README.md b/aula-14/README.md index c2de27c..98d0eb8 100644 --- a/aula-14/README.md +++ b/aula-14/README.md @@ -48,7 +48,7 @@ Em produção, lançar uma nova versão diretamente para 100% dos usuários é a ## Pré-requisitos - Cluster Kubernetes na Hetzner (aula-08) -- GitLab com Registry (aula-10) +- Gitea com Registry (aula-10) - Victoria Metrics (aula-12) para métricas - kubectl, helm e docker instalados diff --git a/aula-14/cleanup.sh b/aula-14/cleanup.sh index f19c415..4833d95 100755 --- a/aula-14/cleanup.sh +++ b/aula-14/cleanup.sh @@ -10,7 +10,7 @@ # # Mantém: # - Cluster Kubernetes -# - GitLab e Registry (aula-10) +# - Gitea e Registry (aula-10) # - Outros namespaces # ============================================================================ diff --git a/aula-14/setup.sh b/aula-14/setup.sh index bab6c2b..005a8e7 100755 --- a/aula-14/setup.sh +++ b/aula-14/setup.sh @@ -18,7 +18,7 @@ # Pré-requisitos: # - Cluster Kubernetes da aula-08 # - Victoria Metrics da aula-12 -# - GitLab com Registry da aula-10 +# - Gitea com Registry da aula-10 # - kubectl, helm e docker instalados # ============================================================================ @@ -113,12 +113,12 @@ collect_user_input() { read -p "Enter para confirmar ou digite novo valor: " new_reg [[ -n "$new_reg" ]] && REGISTRY_HOST="$new_reg" - # Grupo/projeto no GitLab para o registry (ex: root, demo, factory) + # Owner/repo no Gitea para o registry (ex: root, demo, factory) if [[ -z "$REGISTRY_PROJECT" ]]; then REGISTRY_PROJECT="root" fi echo "" - echo -e "Grupo/projeto no GitLab: ${GREEN}${REGISTRY_PROJECT}${NC}" + echo -e "Owner/repo no Gitea: ${GREEN}${REGISTRY_PROJECT}${NC}" echo -e " Imagens: ${CYAN}${REGISTRY_HOST}/${REGISTRY_PROJECT}/app-backend:v1${NC}" echo -e " ${CYAN}${REGISTRY_HOST}/${REGISTRY_PROJECT}/app-backend:v2${NC}" read -p "Grupo/projeto [${REGISTRY_PROJECT}]: " new_project