Skip to content

xtreamui

Nginx Ingress GPLv3 license

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm -n ingress-nginx install ingress-nginx ingress-nginx/ingress-nginx --create-namespace
kubectl get svc -n ingress-nginx

LetsEncrypt GPLv3 license

export CERTRELEASE=$(curl -s https://api.github.com/repos/cert-manager/cert-manager/releases/latest|grep tag_name|cut -d '"' -f 4|sed 's/v//')
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v${CERTRELEASE}/cert-manager.yaml

prodissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: cert-manager
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: dropbasket1@gmail.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx
kubectl apply -f prodissuer.yaml

Longhorn GPLv3 license

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: install-packages
spec:
  selector:
    matchLabels:
      name: install-packages
  template:
    metadata:
      labels:
        name: install-packages
    spec:
      containers:
      - name: install-packages
        image: ubuntu
        securityContext:
          privileged: true
        command: ["/bin/sh", "-c"]
        args: ["apt update && apt install -y open-iscsi nfs-common jq"]
kubectl apply -f provisioning-longhorn.yaml

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml
USER=longhorn; PASSWORD=sOFsqilmu2; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
kubectl -n longhorn-system create secret generic basic-auth --from-file=auth

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: longhorn-ingress
  namespace: longhorn-system
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required '
    nginx.ingress.kubernetes.io/proxy-body-size: 10000m
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - long.trastero.org
    secretName: ssl-cert-longhorn
  rules:
  - host: long.trastero.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: longhorn-frontend
            port:
              number: 80
kubectl apply -f longhorn-ingress.yaml

kubectl delete -f provisioning-longhorn.yaml

xtreamui GPLv3 license

apiVersion: v1
kind: Namespace
metadata:
  name: xtreamui
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: xtreamui
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: xtreamcodes-data-pvc
  namespace: xtreamui
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: tmp-pvc
  namespace: xtreamui
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
apiVersion: apps/v1
kind: Deployment
metadata:
  name: xui-deployment
  namespace: xtreamui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: xui
  template:
    metadata:
      labels:
        app: xui
    spec:
      affinity:  
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - xui
            topologyKey: "kubernetes.io/hostname"
      initContainers:
      - name: init-xui
        image: theraw/xtreamui-on-docker:xtream-ui-beta2
        command: ["/bin/sh", "-c"]
        args:
          - >
            if [ "$(ls -A /mnt/mysql | grep -v lost+found)" ]; then
              echo "MySQL directory is not empty, skipping copy.";
            else
              echo "Copying MySQL data...";
              cp -a /var/lib/mysql/. /mnt/mysql/;
            fi;
            if [ "$(ls -A /mnt/xtreamcodes | grep -v lost+found)" ]; then
              echo "Xtream Codes directory is not empty, skipping copy.";
            else
              echo "Copying Xtream Codes data...";
              cp -a /home/xtreamcodes/. /mnt/xtreamcodes/;
            fi;
        volumeMounts:
        - name: mysql-volume
          mountPath: /mnt/mysql
        - name: xtreamcodes-data-volume
          mountPath: /mnt/xtreamcodes
      containers:
      - name: xui
        image: theraw/xtreamui-on-docker:xtream-ui-beta2
        command: ["supervisord", "--nodaemon", "--configuration", "/etc/supervisor/supervisord.conf"]
        ports:
        - containerPort: 25462
        - containerPort: 25461
        - containerPort: 25463
        - containerPort: 25464
        - containerPort: 25465
        - containerPort: 25500
        securityContext:
          privileged: true
        resources:
          limits:
            memory: "1Gi"
          requests:
            memory: "1Gi"
        volumeMounts:
        - name: mysql-volume
          mountPath: /var/lib/mysql
        - name: xtreamcodes-data-volume
          mountPath: /home/xtreamcodes
        - name: tmp-volume
          mountPath: /tmp
      securityContext:
        runAsUser: 0
      hostIPC: true
      volumes:
      - name: mysql-volume
        persistentVolumeClaim:
          claimName: mysql-pvc
      - name: xtreamcodes-data-volume
        persistentVolumeClaim:
          claimName: xtreamcodes-data-pvc
      - name: tmp-volume
        persistentVolumeClaim:
          claimName: tmp-pvc
apiVersion: v1
kind: Service
metadata:
  name: xui-service
  namespace: xtreamui
spec:
  type: ClusterIP
  selector:
    app: xui
  ports:
    - name: port25500
      port: 25500
      targetPort: 25500
      protocol: TCP
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: xui-ingress
  namespace: xtreamui
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - xtreamui.trastero.org
    secretName: ssl-cert-xtreamui
  rules:
  - host: xtreamui.trastero.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: xui-service
            port:
              number: 25500