From f5d58d0c91b8527c3dcc8a0ef9b26bdb663c0241 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 31 Jan 2026 15:40:54 -0300 Subject: [PATCH] ajustes novos --- .forgejo/workflows/deploy.yaml | 32 ++++++++++++++++++-------------- backend/Dockerfile | 22 +++++++++------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 020b64a..c4efb6d 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -12,17 +12,12 @@ env: jobs: build-and-push: - # AJUSTE: Use as labels EXATAS do Runner ID 50 para sair do estado "Waiting" runs-on: [self-hosted, linux-amd64] defaults: run: shell: sh steps: - - name: Install Runtime Dependencies - run: | - apk add --no-cache git docker-cli nodejs - - name: Checkout code uses: actions/checkout@v4 @@ -33,25 +28,30 @@ jobs: - name: Build & Push Backend run: | + # Usamos --quiet no push para não inundar o Forgejo com logs de progresso (evita Erro 500) docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:${{ github.sha }} \ - -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:latest ./backend && \ - docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:${{ github.sha }} && \ - docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:latest + -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:latest ./backend + + docker push --quiet ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:${{ github.sha }} + docker push --quiet ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:latest - name: Build & Push Backoffice run: | + # O build do Backoffice (NestJS) é o que mais trava. + # Reduzimos o log e focamos no push silencioso. docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:${{ github.sha }} \ - -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:latest ./backoffice && \ - docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:${{ github.sha }} && \ - docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:latest + -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:latest ./backoffice + + docker push --quiet ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:${{ github.sha }} + docker push --quiet ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:latest deploy: needs: build-and-push - # AJUSTE: Mesmas labels aqui runs-on: [self-hosted, linux-amd64] steps: - name: Install Deploy Tools - run: apk add --no-cache curl kubectl git nodejs + # Removido nodejs daqui (não parece necessário para rodar kubectl) + run: apk add --no-cache curl kubectl - name: Checkout code uses: actions/checkout@v4 @@ -61,8 +61,12 @@ jobs: kubectl create namespace gohorsejobsdev --dry-run=client -o yaml | kubectl apply -f - kubectl apply -f k8s/dev/ -n gohorsejobsdev + # Rollout progressivo: garante que o K8s não derrube tudo de uma vez kubectl -n gohorsejobsdev set image deployment/gohorse-backend-dev \ backend=${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/gohorsejobs:${{ github.sha }} kubectl -n gohorsejobsdev set image deployment/gohorse-backoffice-dev \ - backoffice=${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:${{ github.sha }} \ No newline at end of file + backoffice=${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/backoffice:${{ github.sha }} + + # Verifica se o deploy deu certo (se travar aqui, o problema é no K3s, não no Forgejo) + kubectl -n gohorsejobsdev rollout status deployment/gohorse-backend-dev --timeout=90s \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index c865234..9af016f 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,38 +1,34 @@ FROM mirror.gcr.io/library/golang:1.24-alpine AS builder -# Ajuste de Mirror para não travar o APK e instalação de deps RUN sed -i 's/dl-cdn.alpinelinux.org/uk.alpinelinux.org/g' /etc/apk/repositories && \ apk add --no-cache git ca-certificates tzdata WORKDIR /build -# PASSO 1: Copia apenas os arquivos de dependência COPY go.mod go.sum ./ +# --mount=type=cache permite que o Go use cache de módulos entre builds sem inflar a imagem +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download && go mod verify -# PASSO 2: Baixa as dependências (Cacheado) -RUN go mod download && go mod verify - -# PASSO 3: Copia o código fonte COPY . . -# PASSO 4: Build Otimizado -# Removi o -gcflags para produção (melhora performance) e usei -p 4 (se o runner tiver 4 cores) -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ - -p 4 \ +# Ajuste: -p 2 para não estressar a CPU do servidor e causar Erro 500 no Forgejo +RUN --mount=type=cache,target=/root/.cache/go-build \ + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ + -p 2 \ -ldflags="-s -w" \ -trimpath \ -o /app/main ./cmd/api -# --- Estágio Final --- FROM scratch AS runner -# Copia apenas o necessário do builder COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=builder /app/main /main -# Certifique-se que a pasta migrations existe no seu projeto! COPY --from=builder /build/migrations /migrations +# GOGC=50 é agressivo (bom para economizar RAM), mas aumenta uso de CPU. +# Se o servidor estiver travando por CPU, tente GOGC=100. ENV PORT=8521 \ TZ=America/Sao_Paulo \ GODEBUG=netdns=go \