From 65d51cef01471c9aa5a0bcc9eb29dfbe2182dfab Mon Sep 17 00:00:00 2001 From: Sergei Poljanski Date: Sat, 4 Apr 2026 18:21:04 +0300 Subject: [PATCH] watchparty vbrowser and workers --- README.md | 3 ++- apps/vbrowser-gateway.yaml | 20 +++++++++++++++ apps/vbrowser-gateway/configmap.yaml | 27 +++++++++++++++++++++ apps/vbrowser-gateway/deployment.yaml | 35 +++++++++++++++++++++++++++ apps/vbrowser-gateway/ingress.yaml | 16 ++++++++++++ apps/vbrowser-gateway/service.yaml | 12 +++++++++ apps/watchparty/deployment.yaml | 32 ++++++++++++++++++++++++ 7 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 apps/vbrowser-gateway.yaml create mode 100644 apps/vbrowser-gateway/configmap.yaml create mode 100644 apps/vbrowser-gateway/deployment.yaml create mode 100644 apps/vbrowser-gateway/ingress.yaml create mode 100644 apps/vbrowser-gateway/service.yaml diff --git a/README.md b/README.md index 5a85cff..f111ef2 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,10 @@ GitOps repo for self-hosted Kubernetes cluster on Hetzner, managed by ArgoCD. |-----|-----------|-----| | ArgoCD | `argocd` | — | | CNPG Operator | `cnpg-system` | — | -| PostgreSQL (HA) | `postgres` | 3 instances (CloudNativePG) | +| PostgreSQL (HA) | `postgres` | 2 instances (CloudNativePG) | | Forgejo | `forgejo` | `git.czsk.it` / `git.asxp.io` | | WatchParty | `watchparty` | `watch.k8s.asxp.io` | +| VBrowser Gateway | `vbrowser-gateway` | `vbrowser.k8s.asxp.io` | ## Structure diff --git a/apps/vbrowser-gateway.yaml b/apps/vbrowser-gateway.yaml new file mode 100644 index 0000000..c7f841b --- /dev/null +++ b/apps/vbrowser-gateway.yaml @@ -0,0 +1,20 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: vbrowser-gateway + namespace: argocd +spec: + project: default + source: + repoURL: ssh://git@git.czsk.it/asxpi/k8s-asxpio-gitops.git + targetRevision: main + path: apps/vbrowser-gateway + destination: + server: https://kubernetes.default.svc + namespace: vbrowser-gateway + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true diff --git a/apps/vbrowser-gateway/configmap.yaml b/apps/vbrowser-gateway/configmap.yaml new file mode 100644 index 0000000..26d87e8 --- /dev/null +++ b/apps/vbrowser-gateway/configmap.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: vbrowser-gateway + namespace: vbrowser-gateway +data: + nginx.conf: | + events { + worker_connections 1024; + } + http { + server { + listen 80; + + location / { + resolver 1.1.1.1 ipv6=off; + proxy_pass http://$arg_ip; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + } + } + } diff --git a/apps/vbrowser-gateway/deployment.yaml b/apps/vbrowser-gateway/deployment.yaml new file mode 100644 index 0000000..097e33e --- /dev/null +++ b/apps/vbrowser-gateway/deployment.yaml @@ -0,0 +1,35 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vbrowser-gateway + namespace: vbrowser-gateway +spec: + replicas: 1 + selector: + matchLabels: + app: vbrowser-gateway + template: + metadata: + labels: + app: vbrowser-gateway + spec: + containers: + - name: nginx + image: nginx:alpine + ports: + - containerPort: 80 + name: http + volumeMounts: + - name: config + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + resources: + requests: + memory: 32Mi + cpu: 10m + limits: + memory: 64Mi + volumes: + - name: config + configMap: + name: vbrowser-gateway diff --git a/apps/vbrowser-gateway/ingress.yaml b/apps/vbrowser-gateway/ingress.yaml new file mode 100644 index 0000000..d744658 --- /dev/null +++ b/apps/vbrowser-gateway/ingress.yaml @@ -0,0 +1,16 @@ +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: vbrowser-gateway + namespace: vbrowser-gateway +spec: + entryPoints: + - websecure + routes: + - match: Host(`vbrowser.k8s.asxp.io`) + kind: Rule + services: + - name: vbrowser-gateway + port: 80 + tls: + certResolver: letsencrypt diff --git a/apps/vbrowser-gateway/service.yaml b/apps/vbrowser-gateway/service.yaml new file mode 100644 index 0000000..9efd1f6 --- /dev/null +++ b/apps/vbrowser-gateway/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: vbrowser-gateway + namespace: vbrowser-gateway +spec: + selector: + app: vbrowser-gateway + ports: + - name: http + port: 80 + targetPort: http diff --git a/apps/watchparty/deployment.yaml b/apps/watchparty/deployment.yaml index 367fa0d..48f0736 100644 --- a/apps/watchparty/deployment.yaml +++ b/apps/watchparty/deployment.yaml @@ -16,6 +16,9 @@ spec: containers: - name: watchparty image: muaeabudhabi/watchparty-v8:latest + command: ["/bin/sh", "-c"] + args: + - sed -i 's/cpx11/cx23/g; s/cpx31/cx33/g' /app/server/vm/hetzner.ts && exec npm start ports: - containerPort: 8080 name: http @@ -29,9 +32,38 @@ spec: secretKeyRef: name: watchparty-db-credentials key: DATABASE_URL + envFrom: + - secretRef: + name: watchparty-vbrowser-config + optional: true resources: requests: memory: 256Mi cpu: 100m limits: memory: 512Mi + - name: vmworker + image: muaeabudhabi/watchparty-v8:latest + command: ["/bin/sh", "-c"] + args: + - sed -i 's/cpx11/cx23/g; s/cpx31/cx33/g' /app/server/vm/hetzner.ts && exec node --experimental-strip-types server/vmWorker.ts + workingDir: /app + ports: + - containerPort: 3100 + name: vmworker + env: + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: watchparty-db-credentials + key: DATABASE_URL + envFrom: + - secretRef: + name: watchparty-vbrowser-config + optional: true + resources: + requests: + memory: 128Mi + cpu: 50m + limits: + memory: 256Mi