let appName = "pterodactyl-panel"; pterodactyl-panel-Image = "git.gmem.ca/arch/pterodactyl-panel:latest"; in { lib, config, kubenix, ... }: { kubernetes.resources.services.pterodactyl-panel = { spec = { selector.app = appName; ports.http = { port = 8080; targetPort = 8080; }; }; }; kubernetes.resources.statefulSets.pterodactyl-panel.spec = { selector.matchLabels.app = appName; serviceName = appName; template = { metadata.labels.app = appName; spec = { containers = { pterodactyl-panel = { image = pterodactyl-panel-Image; imagePullPolicy = "Always"; ports.http.containerPort = 8080; volumeMounts = [ { name = "data"; mountPath = "/var/www/pterodactyl/storage/app"; } ]; envFrom = [{secretRef.name = "pterodactyl";}]; }; }; }; }; volumeClaimTemplates = [ { metadata.name = "data"; spec = { storageClassName = "nfs-client"; accessModes = ["ReadWriteOnce"]; resources.requests.storage = "1Gi"; }; } ]; }; kubernetes.helm.releases.pterodactyl-redis = { chart = kubenix.lib.helm.fetch { repo = "https://charts.bitnami.com/bitnami"; chart = "redis"; version = "18.6.1"; sha256 = "CyvGHc1v1BtbzDx6hbbPah2uWpUhlNIUQowephT6hmM="; }; values = { auth.enabled = false; architecture = "standalone"; }; }; kubernetes.resources.ingresses.pterodactyl-panel = { metadata = { name = appName; annotations = { "cert-manager.io/issuer" = "le-issuer"; }; }; spec = { tls = [ { hosts = ["games.gmem.ca"]; secretName = "gmem-ca-wildcard"; } ]; rules = [ { host = "games.gmem.ca"; http.paths = [ { path = "/"; pathType = "Prefix"; backend.service = { name = appName; port.name = "http"; }; } ]; } ]; }; }; }