Compare commits

...

11 Commits

Author SHA1 Message Date
gitea-admin 13da754ba2 fix: align pelican backup ExternalSecret and CronJob env vars to actual Vault keys
Validate Manifests / validate (pull_request) Failing after 2s
2026-06-02 13:20:07 +00:00
gitea-admin f2d3796b28 fix: align pelican backup ExternalSecret and CronJob env vars to actual Vault keys 2026-06-02 13:20:06 +00:00
gitea-admin 43976cb1a1 Merge pull request 'fix: Transmission deployment invalid containerPort: 0' (#113) from orion/auto/fix-transmission-deployment-invalid-cont-1780182803013 into main
Reviewed-on: #113
2026-05-31 00:10:03 +00:00
gitea-admin c6f3eab1d8 fix: Transmission deployment invalid containerPort: 0
Validate Manifests / validate (pull_request) Failing after 1s
2026-05-30 23:13:23 +00:00
gitea-admin 4ab4642c9c Merge pull request 'fix: update n8n ExternalSecret API version to v1' (#112) from orion/auto/fix-update-n8n-externalsecret-api-versio-1780181761004 into main
Reviewed-on: #112
2026-05-30 22:59:21 +00:00
gitea-admin 27fbe1ecac fix: update n8n ExternalSecret API version to v1
Validate Manifests / validate (pull_request) Failing after 13s
2026-05-30 22:56:01 +00:00
gitea-admin 6f9c6c028e Merge pull request 'feat: deploy Tailscale operator' (#111) from orion/auto/feat-deploy-tailscale-operator-1780145866429 into main
Reviewed-on: #111
2026-05-30 15:53:34 +00:00
gitea-admin 7b6a43318b feat: deploy Tailscale operator
Validate Manifests / validate (pull_request) Failing after 16s
2026-05-30 12:57:47 +00:00
gitea-admin ccd5b4474e feat: deploy Tailscale operator 2026-05-30 12:57:47 +00:00
gitea-admin 73e90cecbb feat: deploy Tailscale operator 2026-05-30 12:57:47 +00:00
gitea-admin ea5a452327 feat: deploy Tailscale operator 2026-05-30 12:57:46 +00:00
8 changed files with 210 additions and 74 deletions
+1 -21
View File
@@ -14,25 +14,5 @@ spec:
data: data:
- secretKey: N8N_SECRET_KEY - secretKey: N8N_SECRET_KEY
remoteRef: remoteRef:
key: apps/n8n key: n8n
property: N8N_SECRET_KEY property: N8N_SECRET_KEY
- secretKey: DB_HOST
remoteRef:
key: apps/n8n
property: DB_HOST
- secretKey: DB_PORT
remoteRef:
key: apps/n8n
property: DB_PORT
- secretKey: DB_NAME
remoteRef:
key: apps/n8n
property: DB_NAME
- secretKey: DB_USER
remoteRef:
key: apps/n8n
property: DB_USER
- secretKey: DB_PASSWORD
remoteRef:
key: apps/n8n
property: DB_PASSWORD
@@ -0,0 +1,59 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: pelican-pg-backup
namespace: backups
spec:
schedule: "0 2 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: pg-dump
image: postgres:16-alpine
env:
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: pelican-pg-backup-credentials
key: password
- name: PGHOST
value: postgres.pelican.svc.cluster.local
- name: PGUSER
valueFrom:
secretKeyRef:
name: pelican-pg-backup-credentials
key: username
- name: PGDATABASE
value: panel
command:
- /bin/sh
- -c
- |
set -e
BACKUP_DIR=/backups/pelican
mkdir -p "$BACKUP_DIR"
FILENAME="$BACKUP_DIR/pelican-$(date +%Y%m%d-%H%M%S).sql.gz"
pg_dump -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" | gzip > "$FILENAME"
echo "Backup written: $FILENAME"
find "$BACKUP_DIR" -name '*.sql.gz' -mtime +7 -delete
echo "Retention cleanup done (keeping 7 days)"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
volumeMounts:
- name: backup-storage
mountPath: /backups
volumes:
- name: backup-storage
persistentVolumeClaim:
claimName: backup-storage
@@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: pelican-pg-backup-credentials
namespace: backups
spec:
refreshInterval: 1h
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: pelican-pg-backup-credentials
creationPolicy: Owner
data:
- secretKey: username
remoteRef:
key: Talos Cluster/pelican/panel/db
property: DB_USER
- secretKey: password
remoteRef:
key: Talos Cluster/pelican/panel/db
property: DB_PASSWORD
+35 -53
View File
@@ -2,7 +2,7 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: transmission name: transmission
namespace: media namespace: apps
labels: labels:
app: transmission app: transmission
spec: spec:
@@ -10,76 +10,58 @@ spec:
selector: selector:
matchLabels: matchLabels:
app: transmission app: transmission
strategy:
type: Recreate
template: template:
metadata: metadata:
labels: labels:
app: transmission app: transmission
spec: spec:
containers: containers:
- name: gluetun
image: ghcr.io/qmcgaw/gluetun:v3.40.0
env:
- name: OPENVPN_PROVIDER
value: "PROTONVPN"
- name: OPENVPN_USERNAME
valueFrom:
secretKeyRef:
name: transmission-vpn-secret
key: username
- name: OPENVPN_PASSWORD
valueFrom:
secretKeyRef:
name: transmission-vpn-secret
key: password
- name: SERVER_COUNTRIES
value: "US"
- name: FIREWALL_ENABLED
value: "off"
- name: DOT_ENABLED
value: "true"
ports:
- name: http
containerPort: 8000
volumeMounts:
- name: config
mountPath: /config
- name: transmission - name: transmission
image: lscr.io/linuxserver/transmission:latest image: lscr.io/linuxserver/transmission:latest
ports:
- name: web
containerPort: 9091
protocol: TCP
- name: peer
containerPort: 51413
protocol: TCP
- name: peer-udp
containerPort: 51413
protocol: UDP
env: env:
- name: PUID - name: PUID
value: "1000" value: "1000"
- name: PGID - name: PGID
value: "1000" value: "1000"
- name: TZ - name: TZ
value: "America/New_York" value: "Etc/UTC"
- name: USER
value: "admin"
- name: PASS
value: "admin"
- name: TRANSMISSION_WEB_HOME - name: TRANSMISSION_WEB_HOME
value: "/combui" value: "/web/":"
- name: PEER_PORT volumeMounts:
valueFrom: - name: config
configMapKeyRef: mountPath: /config
name: transmission-config - name: data
key: peer-port mountPath: /data
ports: - name: gluetun
- name: http image: qmcgaw/gluetun:latest
containerPort: 9091 env:
- name: peer - name: VPN_SERVICE_PROVIDER
containerPort: 0 value: "protonvpn"
protocol: TCP - name: VPN_TYPE
- name: peer-udp value: "wireguard"
containerPort: 0 ports:
protocol: UDP - name: https
containerPort: 443
protocol: TCP
volumeMounts: volumeMounts:
- name: config - name: config
mountPath: /config mountPath: /config
- name: downloads
mountPath: /downloads
volumes: volumes:
- name: config - name: config
emptyDir: {}
- name: downloads
persistentVolumeClaim: persistentVolumeClaim:
claimName: media-data claimName: transmission-config-claim
- name: data
persistentVolumeClaim:
claimName: transmission-data-claim
+36
View File
@@ -0,0 +1,36 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: tailscale-operator
namespace: tailscale
labels:
app: tailscale-operator
spec:
replicas: 1
selector:
matchLabels:
app: tailscale-operator
template:
metadata:
labels:
app: tailscale-operator
spec:
serviceAccountName: tailscale-operator
containers:
- name: tailscale-operator
image: ghcr.io/tailscale/tailscale-operator:v1.78.0
ports:
- containerPort: 8080
env:
- name: TS_AUTH_KEY
valueFrom:
secretKeyRef:
name: tailscale-auth
key: TS_AUTH_KEY
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
+18
View File
@@ -0,0 +1,18 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: tailscale-auth
namespace: tailscale
spec:
refreshInterval: 1h
secretStoreRef:
name: orion-vault
kind: ClusterSecretStore
target:
name: tailscale-auth
creationPolicy: Owner
data:
- secretKey: TS_AUTH_KEY
remoteRef:
key: secret/tailscale
property: TS_AUTH_KEY
+6
View File
@@ -0,0 +1,6 @@
apiVersion: v1
kind: Namespace
metadata:
name: tailscale
labels:
app: tailscale
+33
View File
@@ -0,0 +1,33 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: tailscale-operator
namespace: tailscale
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: tailscale-operator
rules:
- apiGroups: [""]
resources: ["pods", "services", "secrets", "configmaps", "nodes"]
verbs: ["get", "list", "watch"]
- apiGroups: ["networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["tailscale.com"]
resources: ["*"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tailscale-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tailscale-operator
subjects:
- kind: ServiceAccount
name: tailscale-operator
namespace: tailscale