š§ GitLab Runner ā Guia Completo (Oracle Cloud + Docker + Cloudflare)
Ambiente: Ubuntu 22.04 (Oracle Cloud Free Tier, ARM64)
Objetivo: Rodar pipelines do GitLab.com localmente e fazer deploy automƔtico para/var/www/<app>, servido via Nginx Proxy Manager + Cloudflare.
š§© Estrutura Geral
| Componente | Função | Localização |
|---|---|---|
| GitLab SaaS | Hospeda os repositórios e pipelines | https://gitlab.com/YBraga35/... |
| Runner Docker | Executa builds e deploys localmente | Container gitlab-runner |
| Nginx Proxy Manager (NPM) | Gerencia domĆnios e HTTPS | Container npm |
| /var/www/ | Diretório dos sites e apps publicados | /var/www/<app> |
| Cloudflare | Proxy DNS + HTTPS via Zero Trust | https://dash.cloudflare.com/ |
āļø Setup Inicial ā Passo a Passo
š£ 1. Criar o repositório no GitLab
-
VĆ” para https://gitlab.com/projects/new
-
Escolha Criar projeto em branco
-
Configure:
-
Nome:
home-finance-tracker -
Visibilidade:
Privado -
āļø Inicializar repositório com README
-
-
Clique em Criar projeto
š¢ 2. Criar o Runner no GitLab
-
Dentro do projeto ā Settings ā CI/CD ā Runners ā Expand
-
Clique em New Project Runner
-
Preencha:
-
Tags:
build,deploy,oracle -
āļø Lock to current project
-
(Deixe āProtectedā desmarcado se nĆ£o usa branches protegidas)
-
-
Clique em Create Runner
-
Copie o token gerado (exemplo:
glrt-xxxxxxx)
šµ 3. Instalar e Registrar o Runner na VM
sudo mkdir -p /srv/gitlab-runner/config
sudo mkdir -p /var/www
sudo docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/www:/var/www \
gitlab/gitlab-runner:latestRegistrar o runner:
sudo docker run --rm -it \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest registerResponda conforme:
URL: https://gitlab.com/
Token: (cole o token do projeto)
Description: oracle-runner-docker
Tags: build,deploy,oracle
Executor: docker
Default image: node:20-alpine
āļø 4. Editar o config.toml
sudo nano /srv/gitlab-runner/config/config.tomlGaranta o seguinte conteĆŗdo:
concurrent = 1
[[runners]]
[runners.docker]
privileged = false
volumes = ["/var/www:/var/www", "/cache"]Reinicie o runner:
sudo docker restart gitlab-runnerš§± 5. Criar o .gitlab-ci.yml no projeto
stages: [build, deploy]
variables:
NODE_ENV: production
build:
stage: build
image: node:20-alpine
tags: [build, oracle]
script:
- apk add --no-cache git
- npm ci
- npm run build
- npm run export || true
artifacts:
paths: [out, dist]
expire_in: 1 week
only: [main]
deploy:
stage: deploy
image: alpine:3.20
tags: [deploy, oracle]
dependencies: [build]
script:
- apk add --no-cache rsync
- mkdir -p /var/www/homefinance
- if [ -d "./out" ]; then SRC="./out/"; elif [ -d "./dist" ]; then SRC="./dist/"; else SRC="./"; fi
- rsync -avz --delete "$SRC" /var/www/homefinance/
only: [main]š” Fluxo:
Ao fazer git push na branch main, o pipeline do GitLab executa o build ā copia o resultado para /var/www/homefinance.
š Servindo com Nginx Proxy Manager (NPM)
Criar rede e subir container do site:
sudo docker network create web || true
sudo docker network connect web npm
sudo docker run -d --name web-homefinance \
--network web \
-v /var/www/homefinance:/usr/share/nginx/html:ro \
nginx:alpineConfigurar no painel do NPM:
-
Add Proxy Host
-
Domain Names:
homefinance.yanbraga.com -
Forward Hostname/IP:
web-homefinance -
Forward Port:
80 -
āļø Cache Assets
-
āļø Block Common Exploits
-
-
SSL: via Cloudflare ou Letās Encrypt
š Manutenção e AtualizaƧƵes
| Ação | Comando / Local |
|---|---|
| š Ver logs do runner | sudo docker logs -f gitlab-runner |
| š Reiniciar runner | sudo docker restart gitlab-runner |
| ā¬ļø Atualizar runner | sudo docker pull gitlab/gitlab-runner:latest && sudo docker restart gitlab-runner |
| š§¹ Limpar cache | sudo gitlab-runner cache-clean |
| š§¾ Ver jobs ativos | GitLab ā CI/CD ā Pipelines |
| š Corrigir permissƵes | sudo chown -R 1000:1000 /var/www |
| š§± Estrutura runner | /srv/gitlab-runner/config/config.toml |
ā Adicionando Novos Projetos
-
Crie um novo repositório no GitLab (como antes).
-
Em Settings ā CI/CD ā Runners, ative o mesmo runner local.
-
Crie um
.gitlab-ci.ymlparecido, alterando o destino:- rsync -avz --delete ./out/ /var/www/novosite/ -
Suba o container web:
sudo docker run -d --name web-novosite \ --network web \ -v /var/www/novosite:/usr/share/nginx/html:ro \ nginx:alpine -
Adicione o novo domĆnio no NPM:
novosite.yanbraga.com
š SeguranƧa e Backups
-
š Use autenticação SSH (sem senha).
-
š¦ FaƧa snapshot da VM antes de atualizar.
-
āļø Mantenha backups de
/srv/gitlab-runner/confige/var/www. -
š« Evite expor portas 80/443 se usar Cloudflare Tunnel.
-
š§± Atualize sempre o runner e o NPM.
š Estrutura Final
/srv/gitlab-runner/
āā config/config.toml
/var/www/
āā homefinance/
āā novoapp/
/docker/
āā gitlab-runner
āā npm
āā web-homefinance
ā Resultado Final
-
š Push no GitLab ā
-
š Pipeline roda ā
-
š§± Runner Docker local executa ā
-
š App publicado em
/var/www/<app>ā -
š Servido pelo Nginx Proxy Manager ā
-
āļø DomĆnio via Cloudflare HTTPS