watchparty vbrowser and workers

This commit is contained in:
Sergei Poljanski 2026-04-04 18:21:04 +03:00
commit 65d51cef01
Signed by: asxpi
GPG key ID: 4F8851660FA4121B
7 changed files with 144 additions and 1 deletions

View file

@ -23,9 +23,10 @@ GitOps repo for self-hosted Kubernetes cluster on Hetzner, managed by ArgoCD.
|-----|-----------|-----| |-----|-----------|-----|
| ArgoCD | `argocd` | — | | ArgoCD | `argocd` | — |
| CNPG Operator | `cnpg-system` | — | | CNPG Operator | `cnpg-system` | — |
| PostgreSQL (HA) | `postgres` | 3 instances (CloudNativePG) | | PostgreSQL (HA) | `postgres` | 2 instances (CloudNativePG) |
| Forgejo | `forgejo` | `git.czsk.it` / `git.asxp.io` | | Forgejo | `forgejo` | `git.czsk.it` / `git.asxp.io` |
| WatchParty | `watchparty` | `watch.k8s.asxp.io` | | WatchParty | `watchparty` | `watch.k8s.asxp.io` |
| VBrowser Gateway | `vbrowser-gateway` | `vbrowser.k8s.asxp.io` |
## Structure ## Structure

View file

@ -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

View file

@ -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;
}
}
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -16,6 +16,9 @@ spec:
containers: containers:
- name: watchparty - name: watchparty
image: muaeabudhabi/watchparty-v8:latest 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: ports:
- containerPort: 8080 - containerPort: 8080
name: http name: http
@ -29,9 +32,38 @@ spec:
secretKeyRef: secretKeyRef:
name: watchparty-db-credentials name: watchparty-db-credentials
key: DATABASE_URL key: DATABASE_URL
envFrom:
- secretRef:
name: watchparty-vbrowser-config
optional: true
resources: resources:
requests: requests:
memory: 256Mi memory: 256Mi
cpu: 100m cpu: 100m
limits: limits:
memory: 512Mi 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