Compare commits

..
Author SHA1 Message Date
Ultradesu e90efbd016 Added proxy
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 6s
Check with kubeconform / lint (push) Successful in 6s
Auto-update README / Generate README and Create MR (push) Successful in 7s
2026-08-14 10:55:52 +01:00
Ultradesu b0378ffb40 Added macos exporter
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 8s
Check with kubeconform / lint (push) Successful in 8s
Auto-update README / Generate README and Create MR (push) Successful in 9s
2026-08-11 11:30:32 +01:00
Ultradesu 5c2e7d0e33 Removed nodeselector for web-petting
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 11s
Check with kubeconform / lint (push) Successful in 11s
Auto-update README / Generate README and Create MR (push) Successful in 30s
2026-08-08 11:59:07 +01:00
Ultradesu b9052a99f1 Fixed matrix secrets
Check with kubeconform / lint (push) Successful in 6s
Auto-update README / Generate README and Create MR (push) Successful in 7s
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 5s
2026-08-07 11:17:50 +01:00
Ultradesu d41171955b Moved traefik-ai to kube-system-custom, fixed lan-play ingress
Check with kubeconform / lint (push) Successful in 7s
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 7s
Auto-update README / Generate README and Create MR (push) Successful in 9s
2026-08-05 13:44:30 +01:00
Ultradesu f038016d46 Added UK lan-play instance
Keycloak Terraform / Terraform (push) Successful in 26s
Update Kubernetes Services Wiki / Generate and Update K8s Wiki (push) Successful in 15s
Check with kubeconform / lint (push) Successful in 11s
Auto-update README / Generate README and Create MR (push) Successful in 18s
2026-08-05 12:56:42 +01:00
15 changed files with 350 additions and 12 deletions
-4
View File
@@ -42,10 +42,7 @@ ArgoCD homelab project
| Application | Status | | Application | Status |
| :--- | :---: | | :--- | :---: |
| **amnezia** | [![amnezia](https://ag.hexor.cy/api/badge?name=amnezia&revision=true)](https://ag.hexor.cy/applications/argocd/amnezia) |
| **comfyui** | [![comfyui](https://ag.hexor.cy/api/badge?name=comfyui&revision=true)](https://ag.hexor.cy/applications/argocd/comfyui) | | **comfyui** | [![comfyui](https://ag.hexor.cy/api/badge?name=comfyui&revision=true)](https://ag.hexor.cy/applications/argocd/comfyui) |
| **doka2-lobby-list** | [![doka2-lobby-list](https://ag.hexor.cy/api/badge?name=doka2-lobby-list&revision=true)](https://ag.hexor.cy/applications/argocd/doka2-lobby-list) |
| **firefly-iii** | [![firefly-iii](https://ag.hexor.cy/api/badge?name=firefly-iii&revision=true)](https://ag.hexor.cy/applications/argocd/firefly-iii) |
| **furumi** | [![furumi](https://ag.hexor.cy/api/badge?name=furumi&revision=true)](https://ag.hexor.cy/applications/argocd/furumi) | | **furumi** | [![furumi](https://ag.hexor.cy/api/badge?name=furumi&revision=true)](https://ag.hexor.cy/applications/argocd/furumi) |
| **gitea** | [![gitea](https://ag.hexor.cy/api/badge?name=gitea&revision=true)](https://ag.hexor.cy/applications/argocd/gitea) | | **gitea** | [![gitea](https://ag.hexor.cy/api/badge?name=gitea&revision=true)](https://ag.hexor.cy/applications/argocd/gitea) |
| **greece-notifier** | [![greece-notifier](https://ag.hexor.cy/api/badge?name=greece-notifier&revision=true)](https://ag.hexor.cy/applications/argocd/greece-notifier) | | **greece-notifier** | [![greece-notifier](https://ag.hexor.cy/api/badge?name=greece-notifier&revision=true)](https://ag.hexor.cy/applications/argocd/greece-notifier) |
@@ -56,7 +53,6 @@ ArgoCD homelab project
| **k8s-secrets** | [![k8s-secrets](https://ag.hexor.cy/api/badge?name=k8s-secrets&revision=true)](https://ag.hexor.cy/applications/argocd/k8s-secrets) | | **k8s-secrets** | [![k8s-secrets](https://ag.hexor.cy/api/badge?name=k8s-secrets&revision=true)](https://ag.hexor.cy/applications/argocd/k8s-secrets) |
| **khm** | [![khm](https://ag.hexor.cy/api/badge?name=khm&revision=true)](https://ag.hexor.cy/applications/argocd/khm) | | **khm** | [![khm](https://ag.hexor.cy/api/badge?name=khm&revision=true)](https://ag.hexor.cy/applications/argocd/khm) |
| **lidarr** | [![lidarr](https://ag.hexor.cy/api/badge?name=lidarr&revision=true)](https://ag.hexor.cy/applications/argocd/lidarr) | | **lidarr** | [![lidarr](https://ag.hexor.cy/api/badge?name=lidarr&revision=true)](https://ag.hexor.cy/applications/argocd/lidarr) |
| **llamacpp** | [![llamacpp](https://ag.hexor.cy/api/badge?name=llamacpp&revision=true)](https://ag.hexor.cy/applications/argocd/llamacpp) |
| **matrix** | [![matrix](https://ag.hexor.cy/api/badge?name=matrix&revision=true)](https://ag.hexor.cy/applications/argocd/matrix) | | **matrix** | [![matrix](https://ag.hexor.cy/api/badge?name=matrix&revision=true)](https://ag.hexor.cy/applications/argocd/matrix) |
| **mtproxy** | [![mtproxy](https://ag.hexor.cy/api/badge?name=mtproxy&revision=true)](https://ag.hexor.cy/applications/argocd/mtproxy) | | **mtproxy** | [![mtproxy](https://ag.hexor.cy/api/badge?name=mtproxy&revision=true)](https://ag.hexor.cy/applications/argocd/mtproxy) |
| **n8n** | [![n8n](https://ag.hexor.cy/api/badge?name=n8n&revision=true)](https://ag.hexor.cy/applications/argocd/n8n) | | **n8n** | [![n8n](https://ag.hexor.cy/api/badge?name=n8n&revision=true)](https://ag.hexor.cy/applications/argocd/n8n) |
-1
View File
@@ -10,7 +10,6 @@ resources:
- postgres.yaml - postgres.yaml
- storage.yaml - storage.yaml
- storage-prep.yaml - storage-prep.yaml
- traefik-ai.yaml
- network-policy.yaml - network-policy.yaml
helmCharts: helmCharts:
+1
View File
@@ -8,3 +8,4 @@ resources:
- ingress.yaml - ingress.yaml
- deployment.yaml - deployment.yaml
- servicemonitor.yaml - servicemonitor.yaml
- socks-proxy.yaml
+106
View File
@@ -0,0 +1,106 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: furumi-socks-proxy
labels:
app: furumi-socks-proxy
spec:
replicas: 1
selector:
matchLabels:
app: furumi-socks-proxy
template:
metadata:
labels:
app: furumi-socks-proxy
spec:
nodeSelector:
kubernetes.io/hostname: ai.tail2fe2d.ts.net
tolerations:
- key: workload
operator: Equal
value: ai
effect: NoSchedule
containers:
- name: socks-proxy
image: serjs/go-socks5-proxy:v0.0.4
imagePullPolicy: IfNotPresent
env:
- name: REQUIRE_AUTH
value: "true"
- name: PROXY_USER
value: furumi
- name: PROXY_PASSWORD
value: furumi
- name: PROXY_PORT
value: "1080"
ports:
- name: socks5
containerPort: 1080
protocol: TCP
readinessProbe:
tcpSocket:
port: socks5
initialDelaySeconds: 2
periodSeconds: 10
timeoutSeconds: 2
failureThreshold: 3
livenessProbe:
tcpSocket:
port: socks5
initialDelaySeconds: 10
periodSeconds: 30
timeoutSeconds: 2
failureThreshold: 3
resources:
requests:
cpu: 10m
memory: 16Mi
limits:
cpu: 200m
memory: 64Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
securityContext:
seccompProfile:
type: RuntimeDefault
---
apiVersion: v1
kind: Service
metadata:
name: furumi-socks-proxy
labels:
app: furumi-socks-proxy
spec:
type: ClusterIP
selector:
app: furumi-socks-proxy
ports:
- name: socks5
protocol: TCP
port: 1080
targetPort: socks5
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: furumi-socks-proxy-ingress
spec:
podSelector:
matchLabels:
app: furumi-socks-proxy
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: furumi-player
ports:
- protocol: TCP
port: 1080
+20
View File
@@ -0,0 +1,20 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: lan-play
namespace: argocd
spec:
project: apps
destination:
namespace: lan-play
server: https://kubernetes.default.svc
source:
repoURL: ssh://git@gt.hexor.cy:30022/ab/homelab.git
targetRevision: HEAD
path: k8s/apps/lan-play
syncPolicy:
automated:
selfHeal: true
prune: true
syncOptions:
- CreateNamespace=true
+63
View File
@@ -0,0 +1,63 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: lan-play
labels:
app.kubernetes.io/name: lan-play
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: lan-play
template:
metadata:
labels:
app.kubernetes.io/name: lan-play
spec:
nodeSelector:
kubernetes.io/hostname: ai.tail2fe2d.ts.net
tolerations:
- key: workload
operator: Equal
value: ai
effect: NoSchedule
containers:
- name: lan-play
image: ultradesu/lan-play:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
protocol: TCP
volumeMounts:
- name: media
mountPath: /media
readinessProbe:
tcpSocket:
port: http
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: http
initialDelaySeconds: 20
periodSeconds: 30
resources:
requests:
cpu: "2"
memory: 2Gi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
volumes:
- name: media
hostPath:
path: /k8s/lan-play
type: DirectoryOrCreate
securityContext:
seccompProfile:
type: RuntimeDefault
+63
View File
@@ -0,0 +1,63 @@
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: lan-play-auth
spec:
forwardAuth:
address: http://auth-proxy.auth-proxy.svc:80/auth
trustForwardHeader: true
authResponseHeaders:
- X-Auth-Request-User
- X-Auth-Request-Email
- X-Auth-Request-Groups
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: lan-play-public
spec:
entryPoints:
- websecure
routes:
- match: Host(`lp.hexor.cy`)
kind: Rule
middlewares:
- name: lan-play-auth
services:
- name: lan-play
port: 80
tls:
secretName: lan-play-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: lan-play-tls
spec:
secretName: lan-play-tls
issuerRef:
name: letsencrypt
kind: ClusterIssuer
dnsNames:
- lp.hexor.cy
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: lan-play-local
labels:
firefly.hexor.cy/private-ai: "true"
annotations:
kubernetes.io/ingress.class: traefik-ai
spec:
rules:
- host: video.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: lan-play
port:
number: 80
+8
View File
@@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app.yaml
- deployment.yaml
- service.yaml
- ingress.yaml
+15
View File
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: lan-play
labels:
app.kubernetes.io/name: lan-play
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: lan-play
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
+1 -1
View File
@@ -70,6 +70,7 @@ spec:
action: suggest action: suggest
template: "{{ `{{ user.email }}` }}" template: "{{ `{{ user.email }}` }}"
set_email_verification: always set_email_verification: always
on_conflict: replace
data: data:
- secretKey: oauth_client_id - secretKey: oauth_client_id
sourceRef: sourceRef:
@@ -93,4 +94,3 @@ spec:
metadataPolicy: None metadataPolicy: None
key: ca76867f-49f3-4a30-9ef3-b05af35ee49a key: ca76867f-49f3-4a30-9ef3-b05af35ee49a
property: fields[1].value property: fields[1].value
on_conflict: replace
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
spec: spec:
nodeSelector: nodeSelector:
kubernetes.io/os: linux kubernetes.io/os: linux
kubernetes.io/hostname: master.tail2fe2d.ts.net # kubernetes.io/hostname: master.tail2fe2d.ts.net
volumes: volumes:
- name: data - name: data
persistentVolumeClaim: persistentVolumeClaim:
@@ -7,6 +7,7 @@ resources:
- coredns-internal-resolve.yaml - coredns-internal-resolve.yaml
- https-middleware.yaml - https-middleware.yaml
- node-external-ip-labeler.yaml - node-external-ip-labeler.yaml
- traefik-ai.yaml
helmCharts: helmCharts:
- name: csi-driver-nfs - name: csi-driver-nfs
@@ -9,11 +9,13 @@ apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: traefik-ai name: traefik-ai
namespace: kube-system
--- ---
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: Role kind: Role
metadata: metadata:
name: traefik-ai name: traefik-ai
namespace: firefly-iii
rules: rules:
- apiGroups: - apiGroups:
- "" - ""
@@ -52,6 +54,7 @@ apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding kind: RoleBinding
metadata: metadata:
name: traefik-ai name: traefik-ai
namespace: firefly-iii
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
kind: Role kind: Role
@@ -59,11 +62,65 @@ roleRef:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: traefik-ai name: traefik-ai
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: traefik-ai
namespace: lan-play
rules:
- apiGroups:
- ""
resources:
- services
- secrets
- endpoints
verbs:
- get
- list
- watch
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses/status
verbs:
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: traefik-ai
namespace: lan-play
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: traefik-ai
subjects:
- kind: ServiceAccount
name: traefik-ai
namespace: kube-system
--- ---
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole kind: ClusterRole
metadata: metadata:
name: firefly-traefik-ai name: traefik-ai
rules: rules:
- apiGroups: - apiGroups:
- "" - ""
@@ -85,20 +142,21 @@ rules:
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding kind: ClusterRoleBinding
metadata: metadata:
name: firefly-traefik-ai name: traefik-ai
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
kind: ClusterRole kind: ClusterRole
name: firefly-traefik-ai name: traefik-ai
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: traefik-ai name: traefik-ai
namespace: firefly-iii namespace: kube-system
--- ---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: traefik-ai name: traefik-ai
namespace: kube-system
labels: labels:
app.kubernetes.io/name: traefik-ai app.kubernetes.io/name: traefik-ai
spec: spec:
@@ -130,7 +188,7 @@ spec:
args: args:
- --entrypoints.web.address=192.168.1.117:80 - --entrypoints.web.address=192.168.1.117:80
- --providers.kubernetesingress=true - --providers.kubernetesingress=true
- --providers.kubernetesingress.namespaces=firefly-iii - --providers.kubernetesingress.namespaces=firefly-iii,lan-play
- --providers.kubernetesingress.ingressclass=traefik-ai - --providers.kubernetesingress.ingressclass=traefik-ai
- --providers.kubernetesingress.labelselector=firefly.hexor.cy/private-ai=true - --providers.kubernetesingress.labelselector=firefly.hexor.cy/private-ai=true
- --providers.kubernetescrd=false - --providers.kubernetescrd=false
+4
View File
@@ -75,6 +75,10 @@ prometheus:
static_configs: static_configs:
- targets: ['prom-a2s-exporter.counter-strike.svc:9841'] - targets: ['prom-a2s-exporter.counter-strike.svc:9841']
labels: {instance: master} labels: {instance: master}
- job_name: macos_prom_exporter
static_configs:
- targets: ['macbook-pro.tail2fe2d.ts.net:9100']
labels: {instance: ultrabook-pro}
retention: "380d" retention: "380d"
retentionSize: "0" retentionSize: "0"
+4
View File
@@ -24,6 +24,10 @@ proxy_applications = {
domain = "import.hexor.cy" domain = "import.hexor.cy"
allowed_groups = ["hexor-admin"] allowed_groups = ["hexor-admin"]
} }
LanPlay = {
domain = "lp.hexor.cy"
allowed_groups = ["hexor-admin"]
}
} }
oauth2_applications = { oauth2_applications = {