Fluxo Deploy Automatizado VPS

Quero utilizar o Gitlab instalado na minha vps, e quero buildar o projeto com GitLab CI/CD armazenar com GitLab Container Registry deploy com o ArgoCD e quero gerenciar os containers com o kubernetes, da pra fazer dessa forma? se sim me mostre a Setup da VPS
O ChatGPT disse:

Sim, dá para fazer dessa forma! Aqui está o setup completo da sua VPS para rodar o GitLab CI/CD + GitLab Container Registry + Kubernetes + ArgoCD. Esse fluxo permitirá que seu código seja buildado automaticamente, armazenado no GitLab Container Registry, e implantado automaticamente no Kubernetes via ArgoCD.


📌 Fluxo Completo

1️⃣ GitLab instalado na VPS → Armazena código + repositórios.
2️⃣ GitLab CI/CD → Faz build da imagem Docker e envia para o GitLab Container Registry.
3️⃣ GitLab Container Registry → Armazena as imagens Docker.
4️⃣ ArgoCD → Monitora repositório Git e atualiza deploys automaticamente no Kubernetes.
5️⃣ Kubernetes → Gerencia os containers e o cluster.


🖥️ Setup da VPS

🔹 1️⃣ Instalar GitLab Self-Hosted

No seu Ubuntu 22.04 VPS, rode:

bash
sudo apt update && sudo apt install -y curl openssh-server ca-certificates tzdata perl
curl -fsSL https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="http://seu-ip-ou-dominio" apt install -y gitlab-ee

📌 Acesse GitLab no navegador via http://seu-ip-ou-dominio
📌 Usuário e senha: sudo gitlab-rails console para resetar senha.


🔹 2️⃣ Configurar GitLab Container Registry

No GitLab, vá em Admin > Container Registry e ative o registry.

Edite o arquivo /etc/gitlab/gitlab.rb e ative o registry:

bash
registry_external_url 'http://seu-ip-ou-dominio:5050'
gitlab_rails['registry_enabled'] = true

🚀 Reconfigure GitLab:

bash
sudo gitlab-ctl reconfigure

Agora seu registry estará disponível em http://seu-ip-ou-dominio:5050.


🔹 3️⃣ Instalar Kubernetes na VPS

bash
curl -sfL https://get.k3s.io | sh -

🚀 Verifique se o Kubernetes está rodando:

bash
kubectl get nodes

🔹 4️⃣ Instalar ArgoCD no Kubernetes

bash
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

🚀 Acesse o painel do ArgoCD:

bash
kubectl port-forward svc/argocd-server -n argocd 8080:443

Acesse https://localhost:8080, usuário padrão: admin.
Senha: kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo


🔹 5️⃣ Criar GitLab CI/CD para Buildar Imagem

No repositório GitLab, crie um arquivo .gitlab-ci.yml:

yaml
stages:
- build
- deploy
variables:
IMAGE_NAME: “$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG”build:
stage: build
image: docker:latest
services:
docker:dind
before_script:
docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY
script:
docker build -t $IMAGE_NAME .
docker push $IMAGE_NAMEdeploy:
stage: deploy
image: bitnami/kubectl
before_script:
kubectl config set-cluster my-cluster –server=https://seu-kubernetes-api –insecure-skip-tls-verify=true
kubectl config set-credentials gitlab-deployer –token=$K8S_TOKEN
kubectl config set-context my-cluster –cluster=my-cluster –user=gitlab-deployer –namespace=default
kubectl config use-context my-cluster
script:
kubectl set image deployment/meu-app meu-app=$IMAGE_NAME

📌 Explicação:

  • Faz o build da imagem e envia para o GitLab Container Registry.
  • Faz deploy no Kubernetes, atualizando a imagem.

🔹 6️⃣ Configurar o ArgoCD para Deploy Automático

1️⃣ Criar um repositório Git só para os manifests do Kubernetes.
2️⃣ Adicionar um deployment.yaml no repositório:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: meu-app
spec:
replicas: 1
selector:
matchLabels:
app: meu-app
template:
metadata:
labels:
app: meu-app
spec:
containers:
- name: meu-app
image: seu-ip-ou-dominio:5050/meu-repo:latest

3️⃣ Adicionar o repositório ao ArgoCD:

argocd repo add http://seu-gitlab.com/grupo/repo-k8s --username=seu-user --password=seu-password

4️⃣ Criar a aplicação no ArgoCD:

argocd app create meu-app --repo http://seu-gitlab.com/grupo/repo-k8s \
--path . --dest-server https://seu-kubernetes-api \
--dest-namespace default

🚀 Agora o ArgoCD vai monitorar o repositório e atualizar automaticamente o deploy!


Resumo da Infraestrutura

🔹 Componente 🛠️ Tecnologia
Repositório Git GitLab Self-Hosted
Build CI/CD GitLab CI/CD
Registry GitLab Container Registry
Orquestração Kubernetes (K3s)
Deploy Automático ArgoCD
Reverso Proxy & SSL Traefik (opcional)

🚀 Benefícios

100% self-hosted na sua VPS (não depende de serviços pagos).
CI/CD automatizado (build e deploy sem intervenção manual).
Kubernetes + ArgoCD garantem resiliência e escalabilidade.
GitOps permite controle total das versões via Git.

Rolar para cima