From bb059a80357e1f6d0c6ba5a8f53a63989135733d Mon Sep 17 00:00:00 2001 From: Marcus Bohessef Date: Thu, 11 Dec 2025 19:55:31 -0300 Subject: [PATCH] gohorse-backend --- .drone.yml | 93 +++++++++++++++++++++++++++++++++++++ k8s/backend-deployment.yaml | 28 +++++++++++ k8s/backend-service.yaml | 13 ++++++ 3 files changed, 134 insertions(+) create mode 100644 .drone.yml create mode 100644 k8s/backend-deployment.yaml create mode 100644 k8s/backend-service.yaml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..89423c3 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,93 @@ +kind: pipeline +type: docker +name: deploy-backend + +steps: + - name: build-backend + image: plugins/docker + settings: + repo: in.gohorsejobs.com/gohorsejobs-backend + tags: latest + dockerfile: ./backend/Dockerfile + context: ./backend + username: + from_secret: HARBOR_USERNAME + password: + from_secret: HARBOR_PASSWORD + + - name: deploy-backend + image: bitnami/kubectl:latest + environment: + KUBERNETES_SERVER: + from_secret: K3S_SERVER + KUBERNETES_CA: + from_secret: K3S_CA_CERT + KUBERNETES_CLIENT_CERT: + from_secret: K3S_CLIENT_CERT + KUBERNETES_CLIENT_KEY: + from_secret: K3S_CLIENT_KEY + + DB_HOST: + from_secret: DB_HOST + DB_PORT: + from_secret: DB_PORT + DB_USER: + from_secret: DB_USER + DB_PASSWORD: + from_secret: DB_PASSWORD + DB_NAME: + from_secret: DB_NAME + DB_SSLMODE: + from_secret: DB_SSLMODE + + AWS_REGION: + from_secret: AWS_REGION + AWS_ACCESS_KEY_ID: + from_secret: AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY: + from_secret: AWS_SECRET_ACCESS_KEY + AWS_ENDPOINT: + from_secret: AWS_ENDPOINT + S3_BUCKET: + from_secret: S3_BUCKET + + JWT_SECRET: + from_secret: JWT_SECRET + ENV: + from_secret: ENV + CORS_ORIGINS: + from_secret: CORS_ORIGINS + MAX_UPLOAD_SIZE: + from_secret: MAX_UPLOAD_SIZE + UPLOAD_DIR: + from_secret: UPLOAD_DIR + + commands: + - echo "Configuring kubeconfig…" + - mkdir -p ~/.kube + - | + cat < ~/.kube/config + apiVersion: v1 + kind: Config + clusters: + - name: k3s + cluster: + server: ${KUBERNETES_SERVER} + certificate-authority-data: ${KUBERNETES_CA} + users: + - name: drone + user: + client-certificate-data: ${KUBERNETES_CLIENT_CERT} + client-key-data: ${KUBERNETES_CLIENT_KEY} + contexts: + - name: drone-context + context: + cluster: k3s + user: drone + namespace: gohorsejobs + current-context: drone-context + EOF + + - echo "Applying backend K8s manifests…" + - kubectl apply -f k8s/backend-deployment.yaml + - kubectl apply -f k8s/backend-service.yaml diff --git a/k8s/backend-deployment.yaml b/k8s/backend-deployment.yaml new file mode 100644 index 0000000..283ed0c --- /dev/null +++ b/k8s/backend-deployment.yaml @@ -0,0 +1,28 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: gohorse-backend + namespace: gohorsejobs +spec: + replicas: 1 + selector: + matchLabels: + app: gohorse-backend + template: + metadata: + labels: + app: gohorse-backend + spec: + containers: + - name: backend + image: harbor.rede5.com.br/gohorsejobs/backend:latest + imagePullPolicy: Always + ports: + - containerPort: 3000 + env: + - name: NODE_ENV + value: "production" + # Caso o backend precise do .env via Infisical Sidecar, adiciono depois se quiser. + + imagePullSecrets: + - name: harbor-registry diff --git a/k8s/backend-service.yaml b/k8s/backend-service.yaml new file mode 100644 index 0000000..0b833c0 --- /dev/null +++ b/k8s/backend-service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: gohorse-backend + namespace: gohorsejobs +spec: + selector: + app: gohorse-backend + ports: + - name: http + port: 3000 + targetPort: 3000 + type: ClusterIP