---
apiVersion: v1
kind: Namespace
metadata:
    name: mastodon
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mastodon-web-pvc
  namespace: mastodon
  labels:
    app: mastodon
spec:
  storageClassName: ceph-block
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mastodon-sidekiq-pvc
  namespace: mastodon
  labels:
    app: mastodon
spec:
  storageClassName: ceph-block
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mastodon
  namespace: mastodon
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: mastodon
  replicas: 1
  template:
    metadata:
      labels:
        app: mastodon
    spec:
      containers:
      - name: web
        image: tootsuite/mastodon:v4.0.2
        command: ["bash", "-c", "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"]
        ports:
        - containerPort: 3000
          name: http-web-svc
        envFrom:
          - secretRef:
              name: mastodon-secret
        volumeMounts:
        - mountPath: "/mastodon/public/system"
          name: system
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          failureThreshold: 10
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 10
      - name: streaming
        image: tootsuite/mastodon:v4.0.2
        command: ["node", "./streaming"]
        ports:
        - containerPort: 4000
          name: http-stream-svc
        envFrom:
          - secretRef:
              name: mastodon-secret
        livenessProbe:
          httpGet:
            path: /api/v1/streaming/health
            port: 4000
          failureThreshold: 10
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 10
      - name: sidekiq
        image: tootsuite/mastodon:v4.0.2
        command: ["bundle", "exec", "sidekiq"]
        envFrom:
          - secretRef:
              name: mastodon-secret
        volumeMounts:
        - mountPath: "/mastodon/public/system"
          name: system
      volumes:
      - name: system
        persistentVolumeClaim:
          claimName: mastodon-web-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: mastodon-service
  namespace: mastodon
spec:
  selector:
    app: mastodon
  type: ClusterIP
  ports:
  - name: mast-web-port
    protocol: TCP
    port: 3000
    targetPort: http-web-svc
  - name: mast-stream-port
    protocol: TCP
    port: 4000
    targetPort: http-stream-svc
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: mastodon
  namespace: mastodon
spec:
  entryPoints:
  - websecure
  routes:
  - kind: Rule
    match: Host(`mastodon.jibby.org`)
    services:
    - kind: Service
      name: mastodon-service
      port: 3000
  - kind: Rule
    match: Host(`streaming.mastodon.jibby.org`)
    services:
    - kind: Service
      name: mastodon-service
      port: 4000