From 43c0a217c6ed3717825e40cd94e03263a1d30c08 Mon Sep 17 00:00:00 2001 From: talksik Date: Sun, 29 Mar 2026 11:44:07 -0700 Subject: [PATCH] deploy production environment --- go/Makefile | 35 ++++----- go/deploy_dev.sh | 2 +- go/deploy_prod.sh | 7 ++ go/k8s/dev/orion.yaml | 2 - go/k8s/prod/orion.yaml | 99 ++++++++++++++++++++++++ go/k8s/prod/particleprocessorworker.yaml | 42 ++++++++++ go/migrate_dev.sh | 2 +- go/migrate_prod.sh | 11 +++ go/skaffold.yaml | 4 + 9 files changed, 180 insertions(+), 24 deletions(-) create mode 100755 go/deploy_prod.sh create mode 100644 go/k8s/prod/orion.yaml create mode 100644 go/k8s/prod/particleprocessorworker.yaml create mode 100755 go/migrate_prod.sh diff --git a/go/Makefile b/go/Makefile index 77376a4..97f900b 100644 --- a/go/Makefile +++ b/go/Makefile @@ -8,13 +8,13 @@ generate: test: go test -json ./... | docker run -i ghcr.io/gotesttools/gotestfmt:latest -.PHONY: migrate-dev-db -migrate-dev-db: +.PHONY: migrate-dev +migrate-dev: ./migrate_dev.sh -# .PHONY: migrate-prod-db -# migrate-prod-db: -# ./migrate_prod.sh +.PHONY: migrate-prod +migrate-prod: + ./migrate_prod.sh # ex: make create-migration ARG="create_users_table" create-migration: @@ -28,23 +28,18 @@ dev-database: --context dev \ --command -- /bin/bash -c "psql \$$LLINK_POSTGRES_CONNECTION_URL" -# prod-database: -# kubectl run postgres-client \ -# --rm -it --image=postgres:latest \ -# --env="LLINK_POSTGRES_CONNECTION_URL=$$(kubectl get secret shared-secrets -o jsonpath='{.data.LLINK_POSTGRES_CONNECTION_URL}' --context prod | base64 --decode)" \ -# --context prod \ -# --command -- /bin/bash -c "psql \$$LLINK_POSTGRES_CONNECTION_URL" +prod-database: + kubectl run postgres-client \ + --rm -it --image=postgres:latest \ + --env="LLINK_POSTGRES_CONNECTION_URL=$$(kubectl get secret shared-secrets -o jsonpath='{.data.LLINK_POSTGRES_CONNECTION_URL}' --context prod | base64 --decode)" \ + --context prod \ + --command -- /bin/bash -c "psql \$$LLINK_POSTGRES_CONNECTION_URL" .PHONY: deploy-dev deploy-dev: generate test ./deploy_dev.sh -# .PHONY: release -# deploy-prod: generate test -# # Check for any changes (both staged and unstaged) -# @if [ -n "$(git status --porcelain)" ]; then \ -# echo "Error: You have uncommitted changes in your Git repository."; \ -# exit 1; \ -# fi -# ./deploy_prod.sh -# +.PHONY: deploy-prod +deploy-prod: generate test + ./deploy_prod.sh + diff --git a/go/deploy_dev.sh b/go/deploy_dev.sh index a08a341..779e6de 100755 --- a/go/deploy_dev.sh +++ b/go/deploy_dev.sh @@ -4,4 +4,4 @@ set -e export KUBE_CONTEXT=dev export SKAFFOLD_DEFAULT_REPO=us-west2-docker.pkg.dev/flowy-dev-440017/deployments -skaffold run -p dev --kube-context dev --port-forward --tail +skaffold run -p dev --kube-context $KUBE_CONTEXT --port-forward --tail diff --git a/go/deploy_prod.sh b/go/deploy_prod.sh new file mode 100755 index 0000000..a7e4492 --- /dev/null +++ b/go/deploy_prod.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -e + +export KUBE_CONTEXT=prod +export SKAFFOLD_DEFAULT_REPO=us-west2-docker.pkg.dev/flowy-prod-440017/deployments +skaffold run -p prod --kube-context $KUBE_CONTEXT --port-forward --tail diff --git a/go/k8s/dev/orion.yaml b/go/k8s/dev/orion.yaml index 81a78ff..76aa4d1 100644 --- a/go/k8s/dev/orion.yaml +++ b/go/k8s/dev/orion.yaml @@ -40,8 +40,6 @@ spec: secretKeyRef: name: shared-secrets key: LLINK_POSTGRES_CONNECTION_URL - - name: "GCP_PROJECT" - value: "flowy-dev-440017" - name: "GOOGLE_SERVICE_ACCOUNT_EMAIL" value: "iam-for-gke-sa@flowy-dev-440017.iam.gserviceaccount.com" - name: "REDIS_HOST" diff --git a/go/k8s/prod/orion.yaml b/go/k8s/prod/orion.yaml new file mode 100644 index 0000000..c660d19 --- /dev/null +++ b/go/k8s/prod/orion.yaml @@ -0,0 +1,99 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: orion +spec: + selector: + matchLabels: + app: orion + replicas: 1 + template: + metadata: + labels: + app: orion + spec: + serviceAccountName: default-service-account + containers: + - name: orion + image: "orion" + ports: + - containerPort: 8080 + resources: + requests: + memory: "52Mi" + cpu: 50m + limits: + memory: "52Mi" + cpu: 50m + env: + - name: "PORT" + value: "8080" + - name: "AERO_ADDR" + value: "aero:50051" + - name: "GCS_BUCKET" + value: "flowy-llink-prod-bucket" + - name: "LLINK_POSTGRES_CONNECTION_URL" + valueFrom: + secretKeyRef: + name: shared-secrets + key: LLINK_POSTGRES_CONNECTION_URL + - name: "GOOGLE_SERVICE_ACCOUNT_EMAIL" + value: "iam-for-gke-sa@flowy-prod-440017.iam.gserviceaccount.com" + - name: "REDIS_HOST" + value: "10.204.2.99" + +--- + +apiVersion: v1 +kind: Service +metadata: + name: orion +spec: + selector: + app: orion + ports: + - port: 8080 + targetPort: 8080 + protocol: TCP + +--- + +kind: HTTPRoute +apiVersion: gateway.networking.k8s.io/v1beta1 +metadata: + name: orion +spec: + parentRefs: + - kind: Gateway + name: external-gateway + hostnames: + - orion.flowy.live + rules: + - backendRefs: + - name: orion + port: 8080 + +--- + +apiVersion: networking.gke.io/v1 +kind: HealthCheckPolicy +metadata: + name: orion-service-health-check +spec: + default: + checkIntervalSec: 15 + timeoutSec: 15 + healthyThreshold: 1 + unhealthyThreshold: 2 + logConfig: + enabled: true + config: + type: HTTP + httpHealthCheck: + portSpecification: USE_FIXED_PORT + port: 8080 + requestPath: /health + targetRef: + group: "" + kind: Service + name: orion diff --git a/go/k8s/prod/particleprocessorworker.yaml b/go/k8s/prod/particleprocessorworker.yaml new file mode 100644 index 0000000..7fca618 --- /dev/null +++ b/go/k8s/prod/particleprocessorworker.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: particleprocessorworker +spec: + selector: + matchLabels: + app: particleprocessorworker + replicas: 1 + template: + metadata: + labels: + app: particleprocessorworker + spec: + serviceAccountName: default-service-account + containers: + - name: particleprocessorworker + image: "particleprocessorworker" + resources: + requests: + memory: "52Mi" + cpu: 50m + limits: + memory: "52Mi" + cpu: 50m + env: + - name: "GCP_PROJECT" + value: "flowy-prod-440017" + - name: "GCS_BUCKET" + value: "flowy-llink-bucket" + - name: "GOOGLE_SERVICE_ACCOUNT_EMAIL" + value: "iam-for-gke-sa@flowy-prod-440017.iam.gserviceaccount.com" + - name: "LLINK_POSTGRES_CONNECTION_URL" + valueFrom: + secretKeyRef: + name: shared-secrets + key: LLINK_POSTGRES_CONNECTION_URL + - name: "DEEPGRAM_API_KEY" + valueFrom: + secretKeyRef: + name: shared-secrets + key: DEEPGRAM_SECRET diff --git a/go/migrate_dev.sh b/go/migrate_dev.sh index f21c7e3..e31add5 100755 --- a/go/migrate_dev.sh +++ b/go/migrate_dev.sh @@ -7,5 +7,5 @@ echo "# NOTE: if you run into issues with 'dirty' migrations: https://github.com export KUBE_CONTEXT=dev export SKAFFOLD_DEFAULT_REPO=us-west2-docker.pkg.dev/flowy-dev-440017/deployments kubectl delete job migrations --ignore-not-found --context=$KUBE_CONTEXT -skaffold run -p migrations --kube-context dev +skaffold run -p migrations --kube-context $KUBE_CONTEXT diff --git a/go/migrate_prod.sh b/go/migrate_prod.sh new file mode 100755 index 0000000..535c6c1 --- /dev/null +++ b/go/migrate_prod.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e + +echo "# NOTE: if you run into issues with 'dirty' migrations: https://github.com/golang-migrate/migrate/issues/282#issuecomment-530743258" + +export KUBE_CONTEXT=prod +export SKAFFOLD_DEFAULT_REPO=us-west2-docker.pkg.dev/flowy-prod-440017/deployments +kubectl delete job migrations --ignore-not-found --context=$KUBE_CONTEXT +skaffold run -p migrations --kube-context $KUBE_CONTEXT + diff --git a/go/skaffold.yaml b/go/skaffold.yaml index af0db9f..cd35a7f 100644 --- a/go/skaffold.yaml +++ b/go/skaffold.yaml @@ -55,6 +55,10 @@ profiles: context: . docker: dockerfile: Dockerfile + - image: particleprocessorworker + context: . + docker: + dockerfile: Dockerfile.particleprocessorworker manifests: rawYaml: - k8s/prod/*