summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-01-31 19:50:29 +0200
committerPaul Buetow <paul@buetow.org>2026-01-31 19:50:29 +0200
commitdc62ca6ab585f38d4d8e2ace98199d4887719821 (patch)
tree9c1ab576ac01852a20fc87053d88aa95b79d5250
parent37a776605bab8cdf0afbe4951de438cbafa61b46 (diff)
cleanup
-rw-r--r--f3s/argocd-apps/services/jellyfin.yaml28
-rw-r--r--f3s/argocd-apps/services/minvid.yaml28
-rw-r--r--f3s/jellyfin/Justfile38
-rw-r--r--f3s/jellyfin/README.md86
-rw-r--r--f3s/jellyfin/SUMMARY.md135
-rw-r--r--f3s/jellyfin/helm-chart/Chart.yaml5
-rw-r--r--f3s/jellyfin/helm-chart/templates/.gitignore2
-rw-r--r--f3s/jellyfin/helm-chart/templates/configmap.yaml46
-rw-r--r--f3s/jellyfin/helm-chart/templates/deployment.yaml68
-rw-r--r--f3s/jellyfin/helm-chart/templates/ingress.yaml3
-rw-r--r--f3s/jellyfin/helm-chart/templates/persistent-volume.yaml86
-rw-r--r--f3s/jellyfin/values.yaml52
-rw-r--r--f3s/minvid/Justfile38
-rw-r--r--f3s/minvid/docker-image/Dockerfile48
-rw-r--r--f3s/minvid/docker-image/Justfile7
-rw-r--r--f3s/minvid/docker-image/entrypoint.sh14
-rw-r--r--f3s/minvid/helm-chart/Chart.yaml5
-rw-r--r--f3s/minvid/helm-chart/templates/deployment.yaml44
-rw-r--r--f3s/minvid/helm-chart/templates/ingress.yaml21
-rw-r--r--f3s/minvid/helm-chart/templates/persistent-volumes.yaml27
20 files changed, 0 insertions, 781 deletions
diff --git a/f3s/argocd-apps/services/jellyfin.yaml b/f3s/argocd-apps/services/jellyfin.yaml
deleted file mode 100644
index f24974e..0000000
--- a/f3s/argocd-apps/services/jellyfin.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: argoproj.io/v1alpha1
-kind: Application
-metadata:
- name: jellyfin
- namespace: cicd
- finalizers:
- - resources-finalizer.argocd.argoproj.io
-spec:
- project: default
- source:
- repoURL: http://git-server.cicd.svc.cluster.local/conf.git
- targetRevision: master
- path: f3s/jellyfin/helm-chart
- destination:
- server: https://kubernetes.default.svc
- namespace: services
- syncPolicy:
- automated:
- prune: true
- selfHeal: true
- syncOptions:
- - CreateNamespace=false
- retry:
- limit: 3
- backoff:
- duration: 5s
- factor: 2
- maxDuration: 1m
diff --git a/f3s/argocd-apps/services/minvid.yaml b/f3s/argocd-apps/services/minvid.yaml
deleted file mode 100644
index 1e7d431..0000000
--- a/f3s/argocd-apps/services/minvid.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: argoproj.io/v1alpha1
-kind: Application
-metadata:
- name: minvid
- namespace: cicd
- finalizers:
- - resources-finalizer.argocd.argoproj.io
-spec:
- project: default
- source:
- repoURL: http://git-server.cicd.svc.cluster.local/conf.git
- targetRevision: master
- path: f3s/minvid/helm-chart
- destination:
- server: https://kubernetes.default.svc
- namespace: services
- syncPolicy:
- automated:
- prune: true
- selfHeal: true
- syncOptions:
- - CreateNamespace=false
- retry:
- limit: 3
- backoff:
- duration: 5s
- factor: 2
- maxDuration: 1m
diff --git a/f3s/jellyfin/Justfile b/f3s/jellyfin/Justfile
deleted file mode 100644
index 46848de..0000000
--- a/f3s/jellyfin/Justfile
+++ /dev/null
@@ -1,38 +0,0 @@
-NAMESPACE := "services"
-APP_NAME := "jellyfin"
-
-status:
- @echo "=== Pods ==="
- @kubectl get pods -n {{NAMESPACE}} | grep jellyfin
- @echo ""
- @echo "=== Services ==="
- @kubectl get svc -n {{NAMESPACE}} | grep jellyfin
- @echo ""
- @echo "=== Ingress ==="
- @kubectl get ingress -n {{NAMESPACE}} jellyfin-ingress
- @echo ""
- @echo "=== PVCs ==="
- @kubectl get pvc -n {{NAMESPACE}} | grep jellyfin
- @echo ""
- @echo "=== ArgoCD Status ==="
- @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo ""
-
-logs lines="100":
- kubectl logs -n {{NAMESPACE}} -l app=jellyfin-server --tail={{lines}} -f
-
-port-forward port="8096":
- @echo "Forwarding jellyfin to localhost:{{port}}"
- kubectl port-forward -n {{NAMESPACE}} svc/jellyfin-server {{port}}:8096
-
-sync:
- @echo "Triggering ArgoCD sync..."
- @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite
- @sleep 2
- @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo ""
-
-argocd-status:
- argocd app get {{APP_NAME}} --core
-
-restart:
- @echo "Restarting jellyfin server..."
- kubectl rollout restart -n {{NAMESPACE}} deployment/jellyfin-server
diff --git a/f3s/jellyfin/README.md b/f3s/jellyfin/README.md
deleted file mode 100644
index ba08965..0000000
--- a/f3s/jellyfin/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Jellyfin Kubernetes Deployment
-
-This directory contains the Kubernetes configuration for deploying [Jellyfin](https://jellyfin.org/) - a free software media system that puts you in control of your media and data.
-
-## Architecture
-
-Jellyfin is a single-component deployment consisting of:
-- **Server**: Main media server with web interface and API
-
-## Prerequisites
-
-1. **Create storage directory on the NFS server**:
- ```bash
- for host in f0 f1 f2; do
- ssh paul@$host "doas mkdir -p /data/nfs/k3svolumes/jellyfin"
- ssh paul@$host "doas chown -R 911:911 /data/nfs/k3svolumes/jellyfin/"
- done
- ```
-
-## Deployment
-
-1. **Install the custom resources** (PVs, PVCs, ingress):
- ```bash
- just install-resources
- ```
-
-2. **Install Jellyfin using Helm** (or ArgoCD):
- ```bash
- just sync
- ```
-
-3. **Check deployment status**:
- ```bash
- just status
- ```
-
- Wait for all pods to be in `Running` state (may take a few minutes for image pulls).
-
-## Access
-
-Once deployed, Jellyfin will be available at: **https://jellyfin.f3s.buetow.org**
-
-Default setup instructions:
-1. Navigate to the URL above
-2. Complete the setup wizard on first access
-3. Configure libraries and preferences
-
-## Storage
-
-Persistent storage is configured with:
-- **Data**: Main configuration and metadata at `/data/nfs/k3svolumes/jellyfin`
-- **Media**: Mount your media directories from other NFS sources as needed
-
-## Maintenance
-
-### Restart Jellyfin
-```bash
-just restart
-```
-
-### View logs
-```bash
-just logs
-```
-
-### Port forward for local access
-```bash
-just port-forward
-```
-
-### Uninstall (keeps data)
-```bash
-kubectl delete application jellyfin -n cicd
-```
-
-## Troubleshooting
-
-### Check pod logs
-```bash
-kubectl logs -n services -l app=jellyfin-server --tail=100
-```
-
-### Verify persistent volumes
-```bash
-kubectl get pv,pvc -n services | grep jellyfin
-```
diff --git a/f3s/jellyfin/SUMMARY.md b/f3s/jellyfin/SUMMARY.md
deleted file mode 100644
index a3ac82a..0000000
--- a/f3s/jellyfin/SUMMARY.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# Jellyfin Deployment Summary
-
-## Objective
-Deploy Jellyfin 10.11.6 (latest stable) with proper reverse proxy configuration through relayd and Traefik, accessible at `https://jellyfin.f3s.buetow.org` and alternate ports 8096/8920 for Android app compatibility.
-
-## Configuration Implemented
-
-### 1. Kubernetes Resources
-- **Deployment**: Jellyfin server using `jellyfin/jellyfin:latest` image
-- **Service**: NodePort service exposing ports 30096 and 30920 for direct internal access
-- **PersistentVolumes/Claims**: Three volumes for config, libraries, and data
-- **Pod Resources**: 100m CPU request, 256Mi RAM request; 2000m CPU limit, 2Gi RAM limit
-
-### 2. Reverse Proxy Configuration (relayd)
-
-#### Frontend Setup
-- **TLS Termination**: Relayd listens on ports 443 (IPv4/IPv6) with Let's Encrypt certificates
-- **Header Forwarding**:
- - `X-Forwarded-For: $REMOTE_ADDR` (client IP)
- - `X-Forwarded-Proto: https` (protocol indication)
-- **Multiple Ports**: Added separate relay rules for ports 8096 and 8920 to support Android app discovery attempts
-
-#### Routing Rules
-- **Port 443**: Routes to Jellyfin NodePort 30096 via `f3s_jellyfin` backend table
-- **Ports 8096/8920**: Dual IPv4/IPv6 relays also forward to NodePort 30096
-- **Host Routing**: Explicit match for `jellyfin.f3s.buetow.org` hostname
-
-### 3. Jellyfin Network Configuration
-- **RequireHttps**: false (TLS handled by relayd)
-- **EnableHttps**: false (no self-signed certs)
-- **PublicPort**: 443 (external port users connect to)
-- **KnownProxies**:
- - 10.0.0.0/8 (Kubernetes cluster CIDR)
- - 192.168.0.0/16 (relayd/frontend subnet)
-- **EnablePublishedServerUriByRequest**: false
-
-### 4. Certificate Chain
-- **Full Chain**: Relayd presents complete certificate chain (leaf + R12 intermediate)
-- **Validation**: Confirmed with `openssl s_client` showing 2 certificates
-- **Auto-renewal**: Let's Encrypt certificates on relayd
-
-## Issues Encountered & Solutions
-
-### Issue 1: Database Migration Failures
-- **Problem**: Upgrading from 10.8.13 → 10.11.6 directly caused database corruption
-- **Solution**: Requires upgrade path 10.8.13 → 10.10.7 → 10.11.6
-- **Status**: Settled on `jellyfin:latest` (10.11.6) with clean database
-
-### Issue 2: ConfigMap Read-Only Mount
-- **Problem**: Network.xml mounted as read-only ConfigMap; newer Jellyfin versions need to write during migration
-- **Solution**: Removed ConfigMap mount, let Jellyfin manage network.xml from PVC
-- **Result**: Cleaner configuration, Jellyfin can self-manage settings
-
-### Issue 3: Android App "Unsupported version or product" Error
-- **Root Cause**:
- - Missing full certificate chain from relayd → Android app SSL validation failure
- - App attempting alternate ports (8096, 8920) that weren't exposed
-- **Solution**:
- - Added relayd relays for ports 8096 and 8920
- - Ensured full cert chain is presented
- - App should now connect to any of the three ports
-
-### Issue 4: NFS Storage Read-Only (CURRENT BLOCKER)
-- **Problem**: `/data/nfs/k3svolumes/jellyfin/*` directories mounted read-only
-- **Error**: `chown` and pod writes fail with "Read-only file system"
-- **Status**: PVCs remain Pending; pods cannot start
-- **Resolution Required**: NFS mount needs to be remounted as read-write on f0/f1/f2 hosts
-
-## Current Deployment Status
-
-✅ **Complete**
-- Kubernetes manifests fully configured
-- ArgoCD Application re-enabled with proper git URL
-- Relayd configuration updated and deployed
-- Certificate chain verified
-- All networking rules in place
-
-❌ **Blocked**
-- PersistentVolumes cannot bind to PVCs (read-only NFS)
-- Jellyfin pod remains in Pending state
-- Cannot proceed with testing until NFS is writable
-
-## Next Steps
-
-1. **Fix NFS Mount** (blocking issue)
- ```bash
- # On f0, f1, f2 - remount /data with write permissions
- doas mount -uw /data
- # Or check NFS export configuration
- ```
-
-2. **Deploy & Test**
- - Once NFS is writable, pods will automatically start via ArgoCD
- - Test connectivity: `curl https://jellyfin.f3s.buetow.org/System/Info/Public`
- - Test Android app with manual URL entry
-
-3. **Configure Jellyfin** (post-deployment)
- - Run setup wizard
- - Add media libraries
- - Configure transcoding if needed
- - Verify Android app can connect
-
-## Key Files
-
-- **Deployment**: `jellyfin/helm-chart/templates/deployment.yaml`
-- **Persistent Storage**: `jellyfin/helm-chart/templates/persistent-volume.yaml`
-- **Relayd Config**: `/home/paul/git/conf/frontends/etc/relayd.conf.tpl` (lines ~15-130)
-- **ArgoCD App**: Created via kubectl in services namespace
-
-## Testing Commands
-
-```bash
-# Check pod status
-kubectl get pods -n services -l app=jellyfin-server
-
-# View logs
-kubectl logs -n services -l app=jellyfin-server
-
-# Test API endpoint
-curl https://jellyfin.f3s.buetow.org/System/Info/Public
-
-# Verify certificate chain
-echo | openssl s_client -servername jellyfin.f3s.buetow.org -connect jellyfin.f3s.buetow.org:443 | grep "BEGIN CERTIFICATE" | wc -l
-# Should output: 2
-
-# Check PVC binding
-kubectl get pvc -n services | grep jellyfin
-```
-
-## Notes
-
-- Latest version (10.11.6) requires database >= 10.9.11
-- Android app compatibility improved in 10.10.7+
-- Relayd provides full TLS termination, reducing complexity vs. Traefik double-proxy
-- NodePort approach bypasses Traefik, avoiding header forwarding issues
diff --git a/f3s/jellyfin/helm-chart/Chart.yaml b/f3s/jellyfin/helm-chart/Chart.yaml
deleted file mode 100644
index 07982e5..0000000
--- a/f3s/jellyfin/helm-chart/Chart.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-apiVersion: v2
-name: jellyfin-resources
-description: Custom resources for Jellyfin deployment (PVs, PVCs, Ingress)
-version: 0.1.0
-appVersion: "10.11.6"
diff --git a/f3s/jellyfin/helm-chart/templates/.gitignore b/f3s/jellyfin/helm-chart/templates/.gitignore
deleted file mode 100644
index 8eeb559..0000000
--- a/f3s/jellyfin/helm-chart/templates/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Secrets should not be committed
-*-secret.yaml
diff --git a/f3s/jellyfin/helm-chart/templates/configmap.yaml b/f3s/jellyfin/helm-chart/templates/configmap.yaml
deleted file mode 100644
index 5ce6fe4..0000000
--- a/f3s/jellyfin/helm-chart/templates/configmap.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: jellyfin-network-config
- namespace: services
-data:
- network.xml: |
- <?xml version="1.0" encoding="utf-8"?>
- <NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <RequireHttps>false</RequireHttps>
- <CertificatePath />
- <CertificatePassword />
- <BaseUrl />
- <PublicHttpsPort>443</PublicHttpsPort>
- <HttpServerPortNumber>8096</HttpServerPortNumber>
- <HttpsPortNumber>8920</HttpsPortNumber>
- <EnableHttps>false</EnableHttps>
- <PublicPort>443</PublicPort>
- <UPnPCreateHttpPortMap>false</UPnPCreateHttpPortMap>
- <UDPPortRange />
- <EnableIPV6>false</EnableIPV6>
- <EnableIPV4>true</EnableIPV4>
- <EnableSSDPTracing>false</EnableSSDPTracing>
- <SSDPTracingFilter />
- <UDPSendCount>2</UDPSendCount>
- <UDPSendDelay>100</UDPSendDelay>
- <IgnoreVirtualInterfaces>true</IgnoreVirtualInterfaces>
- <VirtualInterfaceNames>vEthernet*</VirtualInterfaceNames>
- <GatewayMonitorPeriod>60</GatewayMonitorPeriod>
- <TrustAllIP6Interfaces>false</TrustAllIP6Interfaces>
- <HDHomerunPortRange />
- <PublishedServerUriBySubnet />
- <AutoDiscoveryTracing>false</AutoDiscoveryTracing>
- <AutoDiscovery>true</AutoDiscovery>
- <RemoteIPFilter />
- <IsRemoteIPFilterBlacklist>false</IsRemoteIPFilterBlacklist>
- <EnableUPnP>false</EnableUPnP>
- <EnableRemoteAccess>true</EnableRemoteAccess>
- <LocalNetworkSubnets />
- <LocalNetworkAddresses />
- <KnownProxies>
- <ProxyAddress>10.0.0.0/8</ProxyAddress>
- <ProxyAddress>192.168.0.0/16</ProxyAddress>
- </KnownProxies>
- <EnablePublishedServerUriByRequest>false</EnablePublishedServerUriByRequest>
- </NetworkConfiguration>
diff --git a/f3s/jellyfin/helm-chart/templates/deployment.yaml b/f3s/jellyfin/helm-chart/templates/deployment.yaml
deleted file mode 100644
index 0289dfe..0000000
--- a/f3s/jellyfin/helm-chart/templates/deployment.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: jellyfin-server
- namespace: services
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: jellyfin-server
- template:
- metadata:
- labels:
- app: jellyfin-server
- spec:
- containers:
- - name: jellyfin
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
- ports:
- - containerPort: 8096
- name: http
- resources:
- requests:
- cpu: 500m
- memory: 512Mi
- limits:
- cpu: 4000m
- memory: 4Gi
- volumeMounts:
- - name: jellyfin-config
- mountPath: /config
- - name: jellyfin-libraries
- mountPath: /media/libraries
- - name: jellyfin-data
- mountPath: /data
- volumes:
- - name: jellyfin-config
- persistentVolumeClaim:
- claimName: jellyfin-config-pvc
- - name: jellyfin-libraries
- persistentVolumeClaim:
- claimName: jellyfin-libraries-pvc
- - name: jellyfin-data
- persistentVolumeClaim:
- claimName: jellyfin-data-pvc
----
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: jellyfin-server
- name: jellyfin-server
- namespace: services
-spec:
- type: NodePort
- ports:
- - name: http
- port: 8096
- protocol: TCP
- targetPort: 8096
- nodePort: 30096
- - name: https
- port: 8920
- protocol: TCP
- targetPort: 8096
- nodePort: 30920
- selector:
- app: jellyfin-server
diff --git a/f3s/jellyfin/helm-chart/templates/ingress.yaml b/f3s/jellyfin/helm-chart/templates/ingress.yaml
deleted file mode 100644
index ed01eca..0000000
--- a/f3s/jellyfin/helm-chart/templates/ingress.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# Jellyfin is exposed via NodePorts 30096 and 30920
-# relayd on frontend proxies directly to these ports, bypassing Traefik
-# This avoids double reverse-proxy complexity and certificate chain issues
diff --git a/f3s/jellyfin/helm-chart/templates/persistent-volume.yaml b/f3s/jellyfin/helm-chart/templates/persistent-volume.yaml
deleted file mode 100644
index f32783e..0000000
--- a/f3s/jellyfin/helm-chart/templates/persistent-volume.yaml
+++ /dev/null
@@ -1,86 +0,0 @@
-# Jellyfin PersistentVolume - Configuration and metadata storage
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: jellyfin-config-pv
-spec:
- capacity:
- storage: 50Gi
- volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Retain
- hostPath:
- path: /data/nfs/k3svolumes/jellyfin/config
- type: Directory
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: jellyfin-config-pvc
- namespace: services
-spec:
- storageClassName: ""
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 50Gi
----
-# Jellyfin PersistentVolume - Libraries storage
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: jellyfin-libraries-pv
-spec:
- capacity:
- storage: 500Gi
- volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Retain
- hostPath:
- path: /data/nfs/k3svolumes/jellyfin/libraries
- type: Directory
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: jellyfin-libraries-pvc
- namespace: services
-spec:
- storageClassName: ""
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 500Gi
----
-# Jellyfin PersistentVolume - Data storage
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: jellyfin-data-pv
-spec:
- capacity:
- storage: 100Gi
- volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Retain
- hostPath:
- path: /data/nfs/k3svolumes/jellyfin/data
- type: Directory
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: jellyfin-data-pvc
- namespace: services
-spec:
- storageClassName: ""
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 100Gi
diff --git a/f3s/jellyfin/values.yaml b/f3s/jellyfin/values.yaml
deleted file mode 100644
index abcfc26..0000000
--- a/f3s/jellyfin/values.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-# Jellyfin Helm Chart Configuration
-# Deploy to services namespace with persistent storage
-
-# Image configuration
-image:
- repository: jellyfin/jellyfin
- tag: "10.11.6"
- pullPolicy: IfNotPresent
-
-# Persistence
-persistence:
- config:
- enabled: true
- type: pvc
- existingClaim: jellyfin-pvc
- mountPath: /config
- size: 50Gi
-
-# Service configuration
-service:
- type: ClusterIP
- port: 8096
-
-# Ingress configuration
-ingress:
- enabled: true
- ingressClassName: traefik
- annotations:
- traefik.ingress.kubernetes.io/router.entrypoints: web
- hosts:
- - host: jellyfin.f3s.buetow.org
- paths:
- - path: /
- pathType: Prefix
-
-# Resources
-resources:
- requests:
- cpu: 500m
- memory: 512Mi
- limits:
- cpu: 4000m
- memory: 4Gi
-
-# Node selector (if needed)
-nodeSelector: {}
-
-# Tolerations (if needed)
-tolerations: []
-
-# Affinity rules (if needed)
-affinity: {}
diff --git a/f3s/minvid/Justfile b/f3s/minvid/Justfile
deleted file mode 100644
index 6d19d3f..0000000
--- a/f3s/minvid/Justfile
+++ /dev/null
@@ -1,38 +0,0 @@
-NAMESPACE := "services"
-APP_NAME := "minvid"
-
-status:
- @echo "=== Pods ==="
- @kubectl get pods -n {{NAMESPACE}} | grep minvid
- @echo ""
- @echo "=== Service ==="
- @kubectl get svc -n {{NAMESPACE}} minvid-service
- @echo ""
- @echo "=== Ingress ==="
- @kubectl get ingress -n {{NAMESPACE}} minvid-ingress
- @echo ""
- @echo "=== PVCs ==="
- @kubectl get pvc -n {{NAMESPACE}} | grep minvid
- @echo ""
- @echo "=== ArgoCD Status ==="
- @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo ""
-
-logs lines="100":
- kubectl logs -n {{NAMESPACE}} -l app=minvid --tail={{lines}} -f
-
-port-forward port="8000":
- @echo "Forwarding minvid to localhost:{{port}}"
- kubectl port-forward -n {{NAMESPACE}} svc/minvid-service {{port}}:80
-
-sync:
- @echo "Triggering ArgoCD sync..."
- @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite
- @sleep 2
- @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo ""
-
-argocd-status:
- argocd app get {{APP_NAME}} --core
-
-restart:
- @echo "Restarting minvid..."
- kubectl rollout restart -n {{NAMESPACE}} deployment/minvid
diff --git a/f3s/minvid/docker-image/Dockerfile b/f3s/minvid/docker-image/Dockerfile
deleted file mode 100644
index f453435..0000000
--- a/f3s/minvid/docker-image/Dockerfile
+++ /dev/null
@@ -1,48 +0,0 @@
-# Build frontend
-FROM node:20-alpine AS frontend-builder
-WORKDIR /build
-RUN apk add --no-cache git
-RUN git clone https://github.com/Ludvigaman/MinVid.git .
-WORKDIR /build/MinVid
-RUN npm install && npm run build
-
-# Build API
-FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS api-builder
-WORKDIR /build
-RUN apk add --no-cache git
-RUN git clone https://github.com/Ludvigaman/MinVid.git .
-WORKDIR /build/MinVid-API
-RUN dotnet publish -c Release -o /app/publish
-
-# Final image
-FROM mcr.microsoft.com/dotnet/aspnet:9.0-alpine
-
-ENV PUID=1000
-ENV PGID=1000
-
-RUN apk add --no-cache bash su-exec ffmpeg
-
-WORKDIR /app
-
-# Copy API
-COPY --from=api-builder /app/publish .
-
-# Copy frontend dist
-COPY --from=frontend-builder /build/MinVid/dist ./wwwroot
-
-EXPOSE 80
-
-ENV ASPNETCORE_URLS=http://+:80
-
-COPY entrypoint.sh /entrypoint.sh
-RUN chmod +x /entrypoint.sh
-
-ENTRYPOINT ["/entrypoint.sh"]
-CMD ["dotnet", "MinVid.dll"]
-
-HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
- CMD wget -qO- http://127.0.0.1:80/health || exit 0
-
-VOLUME /app/data
-
-LABEL maintainer="MinVid Contributors"
diff --git a/f3s/minvid/docker-image/Justfile b/f3s/minvid/docker-image/Justfile
deleted file mode 100644
index 12fa1cb..0000000
--- a/f3s/minvid/docker-image/Justfile
+++ /dev/null
@@ -1,7 +0,0 @@
-all:
- docker build -t minvid:latest .
-
-f3s:
- docker build -t minvid:latest .
- docker tag minvid:latest r0.lan.buetow.org:30001/minvid:latest
- docker push r0.lan.buetow.org:30001/minvid:latest
diff --git a/f3s/minvid/docker-image/entrypoint.sh b/f3s/minvid/docker-image/entrypoint.sh
deleted file mode 100644
index 7865234..0000000
--- a/f3s/minvid/docker-image/entrypoint.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-# Create user and group if they don't exist
-if ! id -u minvid &>/dev/null; then
- addgroup -g ${PGID} minvid
- adduser -D -u ${PUID} -G minvid minvid
-fi
-
-# Ensure data directory exists and has correct permissions
-mkdir -p /app/data
-chown -R minvid:minvid /app/data
-
-# Execute the main command as minvid user
-exec su-exec minvid "$@"
diff --git a/f3s/minvid/helm-chart/Chart.yaml b/f3s/minvid/helm-chart/Chart.yaml
deleted file mode 100644
index 994b2f4..0000000
--- a/f3s/minvid/helm-chart/Chart.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-apiVersion: v2
-name: minvid
-description: A Helm chart for deploying MinVid.
-version: 0.1.0
-appVersion: "latest"
diff --git a/f3s/minvid/helm-chart/templates/deployment.yaml b/f3s/minvid/helm-chart/templates/deployment.yaml
deleted file mode 100644
index 6d04977..0000000
--- a/f3s/minvid/helm-chart/templates/deployment.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: minvid
- namespace: services
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: minvid
- template:
- metadata:
- labels:
- app: minvid
- spec:
- containers:
- - name: minvid
- image: registry.lan.buetow.org:30001/minvid:latest
- imagePullPolicy: Always
- ports:
- - containerPort: 80
- volumeMounts:
- - name: minvid-data
- mountPath: /app/data
- volumes:
- - name: minvid-data
- persistentVolumeClaim:
- claimName: minvid-data-pvc
----
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: minvid
- name: minvid-service
- namespace: services
-spec:
- ports:
- - name: web
- port: 80
- protocol: TCP
- targetPort: 80
- selector:
- app: minvid
diff --git a/f3s/minvid/helm-chart/templates/ingress.yaml b/f3s/minvid/helm-chart/templates/ingress.yaml
deleted file mode 100644
index 5c06880..0000000
--- a/f3s/minvid/helm-chart/templates/ingress.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
- name: minvid-ingress
- namespace: services
- annotations:
- spec.ingressClassName: traefik
- traefik.ingress.kubernetes.io/router.entrypoints: web
- traefik.ingress.kubernetes.io/router.middlewares: services-forwarded-headers@kubernetescrd
-spec:
- rules:
- - host: minvid.f3s.buetow.org
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: minvid-service
- port:
- number: 80
diff --git a/f3s/minvid/helm-chart/templates/persistent-volumes.yaml b/f3s/minvid/helm-chart/templates/persistent-volumes.yaml
deleted file mode 100644
index a6b40a0..0000000
--- a/f3s/minvid/helm-chart/templates/persistent-volumes.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: minvid-data-pv
-spec:
- capacity:
- storage: 1Ti
- volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Retain
- hostPath:
- path: /data/nfs/k3svolumes/minvid/data
- type: Directory
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: minvid-data-pvc
- namespace: services
-spec:
- storageClassName: ""
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 1Ti