diff --git a/k8s/gitea.yaml b/k8s/gitea.yaml new file mode 100644 index 0000000..a1cbf04 --- /dev/null +++ b/k8s/gitea.yaml @@ -0,0 +1,169 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: gitea +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: gitea-data + namespace: gitea +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: gitea + namespace: gitea +spec: + replicas: 1 + selector: + matchLabels: + app: gitea + template: + metadata: + labels: + app: gitea + spec: + containers: + - name: gitea + image: gitea/gitea:1.22 + ports: + - containerPort: 3000 # HTTP + - containerPort: 22 # SSH + env: + - name: USER_UID + value: "1000" + - name: USER_GID + value: "1000" + - name: GITEA__database__DB_TYPE + value: "sqlite3" + volumeMounts: + - name: gitea-data + mountPath: /data + volumes: + - name: gitea-data + persistentVolumeClaim: + claimName: gitea-data +--- +apiVersion: v1 +kind: Service +metadata: + name: gitea-ssh + namespace: gitea +spec: + selector: + app: gitea + ports: + - name: http + port: 80 + targetPort: 3000 + nodePort: 30300 + - name: ssh + protocol: TCP + port: 30022 + targetPort: 22 + nodePort: 30022 + type: LoadBalancer +--- +kind: Ingress +apiVersion: networking.k8s.io/v1 +metadata: + name: gitea + namespace: gitea + annotations: + cert-manager.io/cluster-issuer: letsencrypt + nginx.ingress.kubernetes.io/proxy-body-size: "0" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + nginx.ingress.kubernetes.io/server-snippet: | + if ($http_user_agent ~* "ClaudeBot") { + return 403; + } +spec: + ingressClassName: public + tls: + - hosts: + - git.spiritofweb.ru + secretName: git-tls-cert + rules: + - host: git.spiritofweb.ru + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: gitea-ssh + port: + number: 80 + - path: /robots.txt + pathType: Exact + backend: + service: + name: robots-static-svc + port: + number: 80 +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: gitearobotscm + namespace: gitea +data: + robots.txt: | + User-agent: * + Disallow: / +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: robots-static + namespace: gitea +spec: + replicas: 1 + selector: + matchLabels: + app: robots-static + template: + metadata: + labels: + app: robots-static + spec: + containers: + - name: nginx + image: nginx:alpine + ports: + - containerPort: 80 + volumeMounts: + - name: robots + mountPath: /usr/share/nginx/html + volumes: + - name: robots + configMap: + name: gitearobotscm +--- +apiVersion: v1 +kind: Service +metadata: + name: robots-static-svc + namespace: gitea +spec: + selector: + app: robots-static + ports: + - port: 80 + targetPort: 80 +--- +apiVersion: v1 +kind: Secret +metadata: + name: ssh-creds +type: Opaque +stringData: + username: "root" + password: "$ROOT_PASS"