Initial Commit

This commit is contained in:
Fishandchips321 2025-12-29 16:20:27 +00:00
commit fe844b9d04
20 changed files with 661 additions and 0 deletions

12
.editorconfig Normal file
View file

@ -0,0 +1,12 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false

View file

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaresolverr
spec:
selector:
matchLabels:
app: flaresolverr
template:
metadata:
labels:
app: flaresolverr
spec:
containers:
- name: flaresolverr
image: ghcr.io/flaresolverr/flaresolverr:latest
resources:
limits:
memory: "512Mi"
cpu: "500m"
ports:
- containerPort: 8191

10
FlareSolverr/service.yml Normal file
View file

@ -0,0 +1,10 @@
apiVersion: v1
kind: Service
metadata:
name: flaresolverr
spec:
selector:
app: flaresolverr
ports:
- port: 8191
targetPort: 8191

50
Jellyfin/Deployment.yml Normal file
View file

@ -0,0 +1,50 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: jellyfin
template:
metadata:
labels:
app: jellyfin
spec:
containers:
- name: jellyfin
image: jellyfin/jellyfin:latest
ports:
- containerPort: 8096
resources:
requests:
cpu: "500m"
memory: "256Mi"
limits:
cpu: "2"
memory: "2Gi"
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /media
volumes:
- name: config
persistentVolumeClaim:
claimName: jellyfin-config-pvc
- name: media
hostPath:
path: </Path/To/Jellyfin/Library>
type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 128Mi

22
Jellyfin/Ingress.yml Normal file
View file

@ -0,0 +1,22 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jellyfin-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-production"
spec:
tls:
- hosts:
- <Jellyfin URL>
secretName: jellyfin-tls
rules:
- host: <Jellyfin URL>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jellyfin
port:
number: 80

11
Jellyfin/Service.yml Normal file
View file

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: jellyfin
spec:
selector:
app: jellyfin
ports:
- protocol: TCP
port: 80
targetPort: 8096

96
PrivoxyVPN/Deployment.yml Normal file
View file

@ -0,0 +1,96 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: privoxyvpn
spec:
replicas: 1
selector:
matchLabels:
app: privoxyvpn
template:
metadata:
labels:
app: privoxyvpn
spec:
containers:
- name: privoxyvpn
image: binhex/arch-privoxyvpn:latest
securityContext:
privileged: true
ports:
- containerPort: 8118
- containerPort: 9118
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "2Gi"
volumeMounts:
- name: config
mountPath: /config
- name: logs
mountPath: /logs
- name: ovpn
mountPath: /config/openvpn/<ovpn file>
subPath: <ovpn file name>
# - name: ovpn-creds # Only needed if your VPN requires a login with it's ovpn file
# mountPath: /config/openvpn/credentials.conf
# subPath: credentials.conf
env:
- name: VPN_ENABLED
value: "yes"
- name: VPN_PROV
value: <vpn provider>
- name: ENABLE_SOCKS
value: "yes"
- name: ENABLE_PRIVOXY
value: "yes"
- name: STRICT_PORT_FORWARD
value: "no"
- name: LAN_NETWORK
value: <LAN network address. e.g. "192.168.1.0/24"> # If using in minikube, set to the minikube network
- name: NAME_SERVERS
value: "8.8.8.8,8.8.4.4"
volumes:
- name: config
persistentVolumeClaim:
claimName: privoxyvpn-config-pvc
- name: logs
persistentVolumeClaim:
claimName: privoxyvpn-logs-pvc
- name: ovpn #create with `kubectl create configmap ovpn-creds --from-file=<ovpn file name>=<ovpn file name>`
configMap:
name: protonvpn-ovpn-config
items:
- key: <ovpn file name>
path: <ovpn file name>
# - name: ovpn-creds
# configMap:
# name: ovpn-creds
# items:
# - key: credentials.conf
# path: credentials.conf
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: privoxyvpn-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: privoxyvpn-logs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 512Mi

19
PrivoxyVPN/Service.yml Normal file
View file

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
name: privoxyvpn
spec:
selector:
app: privoxyvpn
ports:
- protocol: TCP
port: 8118
targetPort: 8118
nodePort: 30818
name: http-proxy
- protocol: TCP
port: 9118
targetPort: 9118
nodePort: 30819
name: socks-proxy
type: NodePort

53
Prowlarr/Deployment.yml Normal file
View file

@ -0,0 +1,53 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: prowlarr
spec:
replicas: 1
selector:
matchLabels:
app: prowlarr
template:
metadata:
labels:
app: prowlarr
spec:
containers:
- name: prowlarr
image: linuxserver/prowlarr:latest
ports:
- containerPort: 9696
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "UTC"
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
volumeMounts:
- name: config
mountPath: /config
volumes:
- name: config
persistentVolumeClaim:
claimName: prowlarr-config-pvc
- name: privoxyvpn-config
emptyDir: {}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prowlarr-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 512Mi

22
Prowlarr/Ingress.yml Normal file
View file

@ -0,0 +1,22 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prowlarr
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-production"
spec:
tls:
- hosts:
- <Prowlarr URL>
secretName: prowlarr-tls
rules:
- host: <Prowlarr URL>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prowlarr
port:
number: 80

11
Prowlarr/Service.yml Normal file
View file

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: prowlarr
spec:
selector:
app: prowlarr
ports:
- name: http
port: 80
targetPort: 9696

108
QBitTorrent/Deployment.yml Normal file
View file

@ -0,0 +1,108 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: qbittorrent-vpn
spec:
replicas: 1
selector:
matchLabels:
app: qbittorrent-vpn
template:
metadata:
labels:
app: qbittorrent-vpn
spec:
dnsPolicy: "None"
dnsConfig:
nameservers:
- 1.1.1.1
- 8.8.8.8
containers:
- name: openvpn
image: dperson/openvpn-client
resources:
requests:
cpu: "128m"
memory: "128Mi"
limits:
cpu: "256m"
memory: "512Mi"
command: [
"openvpn",
"--config",
"/vpn/<ovpn file name>",
# "--auth-user-pass",
# "/vpn/credentials.conf",
]
volumeMounts:
- name: ovpn
mountPath: /vpn/<ovpn file name>
subPath: <ovpn file name>
# - name: ovpn-creds # Only needed if your ovpn file requires a login
# mountPath: /vpn/credentials.conf
# subPath: credentials.conf
- name: tun
mountPath: /dev/net/tun
securityContext:
privileged: true
capabilities:
add: ["NET_ADMIN"]
- name: qbittorrent
image: linuxserver/qbittorrent
resources:
requests:
cpu: "256m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "1Gi"
env:
- name: PUID
value: "997"
- name: PGID
value: "997"
- name: TZ
value: "Europe/London"
ports:
- containerPort: 8080 # Web UI
#- containerPort: 6881 # Torrent
volumeMounts:
- name: config
mountPath: /config
- name: downloads
mountPath: /downloads
volumes:
- name: config
persistentVolumeClaim:
claimName: qbittorrent-vpn-config-pvc
- name: downloads
hostPath:
path: </Path/To/Downloads>
type: Directory
- name: ovpn #create with `kubectl create configmap ovpn-creds --from-file=<ovpn file name>=<ovpn file name>`
configMap:
name: protonvpn-ovpn-config
items:
- key: <ovpn file name>
path: <ovpn file name>
# - name: ovpn-creds
# configMap:
# name: ovpn-creds
# items:
# - key: credentials.conf
# path: credentials.conf
- name: tun
hostPath:
path: /dev/net/tun
type: ""
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: qbittorrent-vpn-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi

22
QBitTorrent/Ingress.yml Normal file
View file

@ -0,0 +1,22 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: qbittorrent-vpn-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-production"
spec:
tls:
- hosts:
- <qbittorrent URL>
secretName: qbittorrent-vpn-tls
rules:
- host: <qbittorrent URL>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: qbittorrent-vpn
port:
number: 8080

11
QBitTorrent/Service.yml Normal file
View file

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: qbittorrent-vpn
spec:
selector:
app: qbittorrent-vpn
ports:
- protocol: TCP
port: 8080
targetPort: 8080

63
Radarr/Deployment.yml Normal file
View file

@ -0,0 +1,63 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: radarr
spec:
replicas: 1
selector:
matchLabels:
app: radarr
template:
metadata:
labels:
app: radarr
spec:
containers:
- name: radarr
image: linuxserver/radarr:latest
ports:
- containerPort: 7878
env:
- name: PUID
value: "997"
- name: PGID
value: "997"
- name: TZ
value: "UTC"
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /media
- name: downloads
mountPath: /downloads
volumes:
- name: config
persistentVolumeClaim:
claimName: radarr-config-pvc
- name: media
hostPath:
path: </Path/To/Media>
type: Directory
- name: downloads
hostPath:
path: </Path/To/Downloads>
type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 512Mi

22
Radarr/Ingress.yml Normal file
View file

@ -0,0 +1,22 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: radarr
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-production"
spec:
tls:
- hosts:
- <Radarr URL>
secretName: radarr-tls
rules:
- host: <Radarr URL>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: radarr
port:
number: 80

11
Radarr/Service.yml Normal file
View file

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: radarr
spec:
selector:
app: radarr
ports:
- name: http
port: 80
targetPort: 7878

63
Sonarr/Deployment.yml Normal file
View file

@ -0,0 +1,63 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarr
spec:
replicas: 1
selector:
matchLabels:
app: sonarr
template:
metadata:
labels:
app: sonarr
spec:
containers:
- name: sonarr
image: linuxserver/sonarr:latest
ports:
- containerPort: 8989
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "1Gi"
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /media
- name: downloads
mountPath: /downloads
env:
- name: PUID
value: "997"
- name: PGID
value: "997"
- name: TZ
value: "UTC"
volumes:
- name: config
persistentVolumeClaim:
claimName: sonarr-config-pvc
- name: media
hostPath:
path: </Path/To/Media>
type: Directory
- name: downloads
hostPath:
path: <Path/To/Downloads>
type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi

22
Sonarr/Ingress.yml Normal file
View file

@ -0,0 +1,22 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarr-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-production"
spec:
tls:
- hosts:
- <Sonarr URL>
secretName: sonarr-tls
rules:
- host: <Sonarr URL>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarr
port:
number: 80

11
Sonarr/Service.yml Normal file
View file

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: sonarr
spec:
selector:
app: sonarr
ports:
- protocol: TCP
port: 80
targetPort: 8989