apiVersion: v1
kind: Namespace
metadata:
  name: gitea
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitea
  namespace: gitea
  labels:
    app: gitea
spec:
  replicas: 1
  template:
    metadata:
      name: gitea
      labels:
        app: gitea
    spec:
      containers:
      - name: gitea
        image: gitea/gitea:latest
        imagePullPolicy: Always
        volumeMounts:
          - mountPath: "/var/lib/gitea"
            name: "root"
          - mountPath: "/data"
            name: "data"
        ports:
          - containerPort: 22
            name: ssh
            protocol: TCP
          - containerPort: 3000
            name: http
            protocol: TCP
      restartPolicy: Always
      volumes:
        # Set up a data directory for gitea
        # For production usage, you should consider using PV/PVC instead(or simply using storage like NAS)
        # For more details, please see https://kubernetes.io/docs/concepts/storage/volumes/
      - name: "root"
        hostPath:
          # directory location on host
          path: "/var/lib/gitea"
          # this field is optional
          type: Directory
      - name: "data"
        hostPath:
          path: "/data/gitea"
          type: Directory
  selector:
    matchLabels:
      app: gitea
---
# Using cluster mode
apiVersion: v1
kind: Service
metadata:
  name: gitea-web
  namespace: gitea
  labels:
    app: gitea-web
spec:
  ports:
  - port: 80
    targetPort: 3000
    name: http
  selector:
    app: gitea
---
# Using node-port mode
# This mainly open a specific TCP port for SSH usage on each host,
# so you can use a proxy layer to handle it(e.g. slb, nginx)
apiVersion: v1
kind: Service
metadata:
  name: gitea-ssh
  namespace: gitea
  labels:
    app: gitea-ssh
spec:
  ports:
  - port: 22
    targetPort: 22
    nodePort: 30022
    name: ssh
  selector:
    app: gitea
  type: NodePort
---
# Ingress is always suitable for HTTP usage,
# we suggest using an proxy layer such as slb to send traffic to different ports.
# Usually 80/443 for web and 22 directly for SSH.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gitea
  namespace: gitea
spec:
  rules:
  - host: your-gitea-host.com
    http:
      paths:
      - backend:
          serviceName: gitea-web
          servicePort: 80