stack.basicstack.de/apps/pangolin/pangolin-deployment.yaml
CTO Agent 2f1fe3dd6b Fix Pangolin TLS certificate by switching to HTTP-01 challenge
The DNS-01 challenge has been stuck for 5+ days due to Hetzner DNS
webhook issues. Switched to the more reliable HTTP-01 challenge method
by using the new letsencrypt-http01 ClusterIssuer.

This resolves the missing certificate issue for pangolin.basicstack.de.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-01 10:36:43 +00:00

149 lines
3.4 KiB
YAML

---
# Pangolin Data PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pangolin-data
namespace: pangolin
annotations:
argocd.argoproj.io/sync-options: Delete=false
spec:
accessModes:
- ReadWriteOnce
storageClassName: hcloud-volumes-encrypted
resources:
requests:
storage: 10Gi
---
# Pangolin Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: pangolin
namespace: pangolin
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: pangolin
template:
metadata:
labels:
app: pangolin
spec:
containers:
- name: pangolin
image: fosrl/pangolin:1.21.0
ports:
- containerPort: 3002
name: http
env:
- name: PANGOLIN_URL
value: "https://pangolin.basicstack.de"
- name: DATABASE_PATH
value: "/data/pangolin.db"
# OIDC Configuration
- name: OIDC_ENABLED
value: "true"
- name: OIDC_ISSUER
value: "https://auth.basicstack.de"
- name: OIDC_CLIENT_ID
valueFrom:
secretKeyRef:
name: pangolin-secrets
key: oidc-client-id
- name: OIDC_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: pangolin-secrets
key: oidc-client-secret
- name: OIDC_CALLBACK_URL
value: "https://pangolin.basicstack.de/auth/callback"
- name: OIDC_SCOPES
value: "openid profile email groups"
# Admin Credentials
- name: ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: pangolin-secrets
key: admin-password
volumeMounts:
- name: pangolin-data
mountPath: /data
- name: config
mountPath: /app/config/config.yml
subPath: config.yml
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 3002
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /
port: 3002
initialDelaySeconds: 30
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
volumes:
- name: pangolin-data
persistentVolumeClaim:
claimName: pangolin-data
- name: config
configMap:
name: pangolin-config
---
# Pangolin Service
apiVersion: v1
kind: Service
metadata:
name: pangolin
namespace: pangolin
spec:
type: ClusterIP
selector:
app: pangolin
ports:
- port: 3002
targetPort: 3002
protocol: TCP
---
# Pangolin Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pangolin
namespace: pangolin
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-http01"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
ingressClassName: traefik
tls:
- hosts:
- pangolin.basicstack.de
secretName: pangolin-tls
rules:
- host: pangolin.basicstack.de
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: pangolin
port:
number: 3002