k8s/forgejo.yaml
2025-11-25 01:03:41 -05:00

205 lines
11 KiB
YAML

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: forgejo
name: forgejo
spec:
replicas: 1
selector:
matchLabels:
app: forgejo
template:
metadata:
labels:
app: forgejo
spec:
containers:
- image: codeberg.org/forgejo/forgejo:10
name: forgejo
env:
- name: GITEA__database__DB_TYPE
value: "mysql"
- name: GITEA__database__HOST
value: "192.168.1.146:31306"
- name: GITEA__database__NAME
value: "gitea"
- name: USER_UID
value: "1000"
- name: USER_GID
value: "1000"
- name: GITEA__database__USER
valueFrom:
configMapKeyRef:
key: MYSQL_USER
name: mariadb-secrets-env
- name: GITEA__database__PASSWD
valueFrom:
configMapKeyRef:
key: MYSQL_PASSWORD
name: mariadb-secrets-env
ports:
- containerPort: 3000
protocol: TCP
- containerPort: 22
protocol: TCP
volumeMounts:
- mountPath: /data
name: forgejo-config-volume
# - mountPath: /data/gitea/repo-archive
# name: forgejo-data-volume
- mountPath: /etc/timezone
name: forgejo-timezone-volume
readOnly: true
subPath: timezone
- mountPath: /etc/localtime
name: forgejo-localtime-volume
readOnly: true
subPath: localtime
restartPolicy: Always
volumes:
- name: forgejo-config-volume
persistentVolumeClaim:
claimName: forgejo-config-pvc
# - name: forgejo-data-volume
# persistentVolumeClaim:
# claimName: forgejo-data-pvc
- configMap:
items:
- key: timezone
path: timezone
name: forgejo-timezone-configmap
name: forgejo-timezone-volume
- configMap:
items:
- key: localtime
path: localtime
name: forgejo-localtime-configmap
name: forgejo-localtime-volume
---
apiVersion: v1
kind: Service
metadata:
labels:
app: forgejo
name: forgejo-svc
spec:
ports:
- name: "3000"
port: 3000
targetPort: 3000
- name: "2552"
port: 2552
targetPort: 22
selector:
app: forgejo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forgejo-http
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: git.reticulum.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: forgejo-svc
port:
number: 3000
- host: git.argentumcation.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: forgejo-svc
port:
number: 3000
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: forgejo-config-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: ""
nfs:
path: /mnt/raid/00_meta/02_services/forgejo/
server: 192.168.1.146
# ---
# apiVersion: v1
# kind: PersistentVolume
# metadata:
# name: forgejo-data-pv
# spec:
# capacity:
# storage: 100Gi
# accessModes:
# - ReadWriteOnce
# persistentVolumeReclaimPolicy: Retain
# storageClassName: ""
# nfs:
# path: /mnt/raid/00_meta/05_service_config/forgejo/
# server: 192.168.1.146
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: forgejo-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
volumeName: forgejo-config-pv
storageClassName: ""
# ---
# apiVersion: v1
# kind: PersistentVolumeClaim
# metadata:
# name: forgejo-data-pvc
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 100Gi
# volumeName: forgejo-data-pv
# storageClassName: ""
---
apiVersion: v1
data:
timezone: |
America/New_York
kind: ConfigMap
metadata:
annotations:
use-subpath: "true"
labels:
app: forgejo
name: forgejo-timezone-configmap
---
apiVersion: v1
binaryData:
localtime: VkZwcFpqSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdBQUFBQmdBQUFBQUFBQURzQUFBQUJnQUFBQlNBQUFBQW5xWWVjSis2NjJDZ2hnQndvWnJOWUtKbDRuQ2pnK25ncEdxdWNLVTFwMkNtVThyd3B4V0pZS2d6clBDby9xWGdxaE9POEtyZWgrQ3I4M0R3ckw1cDRLM1RVdkN1bmt2Z3I3TTA4TEIrTGVDeG5GRndzbWRLWUxOOE0zQzBSeXhndFZ3VmNMWW5EbUMzTy9kd3VBYndZTGtiMlhDNTV0Smd1d1QxOEx2R3RHQzg1TmZ3dmEvUTRMN0V1ZkMvajdMZ3dLU2I4TUZ2bE9EQ2hIM3d3MDkyNE1Sa1gvREZMMWpneGsxOGNNY1BPdURJTFY1d3lQaFhZTW9OUUhESzJEbGd5NGp3Y05JajlIRFNZUHZnMDNYazhOUkEzZURWVmNidzFpQy80TmMxcVBEWUFLSGcyUldLOE5uZ2crRGEvcWR3MjhCbDROemVpWERkcVlKZzNyNXJjTitKWkdEZ25rMXc0V2xHWU9KK0wzRGpTU2hnNUY0UmNPVlhMdURtUnkzdzV6Y1E0T2duRC9EcEZ2TGc2Z2J4OE9yMjFPRHI1dFB3N05hMjRPM0d0ZkR1djlOZzc2L1NjUENmdFdEeGo3Unc4bitYWVBOdmxuRDBYM2xnOVU5NGNQWS9XMkQzTDFwdytDaDM0UGtQUEhENkNGbmcrdmhZOFB2b08rRDgyRHJ3L2NnZDRQNjRIUEQvcC8vZ0FKZis4QUdINGVBQ2QrRHdBM0QrWUFSZy9YQUZVT0JnQmtEZmNBY3d3bUFIalJsd0NSQ2tZQW10bFBBSzhJWmdDK0NGY0F6Wm91QU53R2R3RHJtRTRBK3BnL0FRbVdiZ0VZbGw4Qko1U09BVGFVZndGRmtxNEJWSktmQVdPUXpnRnlrTDhCZ2lLV0FaQ08zd0dnSUxZQnJ5Q25BYjRlMWdITkhzY0IzQnoyQWVzYzV3SDZHeFlDQjJBUEFoZ1pOZ0lsWGk4Q05xcitBa05jVHdKVXFSNENZVnB2QW5LblBnSi83RGNDa0tWZUFwM3FWd0t1bzM0Q3UraDNBczAxUmdMWjVwY0M2ek5tQXZma3R3TUpNWVlERm5aL0F5Y3ZwZ00wZEo4RFJTM0dBMUp5dndOaksrWURjSERmQTRHOXJnT09idjhEbjd2T0E2eHRId085dWU0RHl2N25BOXU0RGdQby9RY0QrYll1QkFiN0p3UVlSL1lFSlBsSEJEWkdGZ1JDOTJjRVZFUTJCRjg2andSeTFmNEVmVGl2QkpEVUhnU2JOczhFcnRJK0JMbklsd1ROWkFZRTE4YTNCT3RpSmdUMXhOY0ZDV0JHQlJQQzl3VW5YbVlGTWNFWEJVVmNoZ1ZQdnpjRlkxcW1CVzVRL3dXQjdHNEZqRThmQlovcWpnV3FUVDhGdmVpdUJjaExYd1hiNXM0RjVrbC9CZm5rN2dZRTIwY0dHSGEyQmlMWlp3WTJkTllHUU5lSEJsUnk5Z1plMWFjR2NuRVdCbnpUeHdhUWJ6WUdtdEhuQnE1dFZnYTVZNjhHelA4ZUJ0ZGh6d2JxL1Q0RzlWL3ZCd2o3WGdjVFhnOEhKdmwrQnpGY0x3ZEU5NTRIVCszM0IyT0paZ2R0N0JjSGdZZUdCNHZxTndlZmhhWUhxZWhYQjcyRHhnZkg1bmNIMjRIbUIrWGtsd2Y1Z0FZQU1CQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJRUJRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDLy8rNm5nQUEvLy9Id0FFRS8vKzVzQUFJLy8rNXNBQUkvLy9Id0FFTS8vL0h3QUVRVEUxVUFFVkVWQUJGVTFRQVJWZFVBRVZRVkFBQUFBQUJBQUVBQUFBQkFBRlVXbWxtTWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZQUFBQUdBQUFBQUFBQUFPd0FBQUFHQUFBQUZQLy8vLzllQS9DUS8vLy8vNTZtSG5ELy8vLy9uN3JyWVAvLy8vK2doZ0J3Ly8vLy82R2F6V0QvLy8vL29tWGljUC8vLy8ramcrbmcvLy8vLzZScXJuRC8vLy8vcFRXbllQLy8vLyttVThydy8vLy8vNmNWaVdELy8vLy9xRE9zOFAvLy8vK28vcVhnLy8vLy82b1RqdkQvLy8vL3F0Nkg0UC8vLy8rcjgzRHcvLy8vLzZ5K2FlRC8vLy8vcmROUzhQLy8vLyt1bmt2Zy8vLy8vNit6TlBELy8vLy9zSDR0NFAvLy8vK3huRkZ3Ly8vLy83Sm5TbUQvLy8vL3Mzd3pjUC8vLy8rMFJ5eGcvLy8vLzdWY0ZYRC8vLy8vdGljT1lQLy8vLyszTy9kdy8vLy8vN2dHOEdELy8vLy91UnZaY1AvLy8vKzU1dEpnLy8vLy83c0U5ZkQvLy8vL3U4YTBZUC8vLy8rODVOZncvLy8vLzcydjBPRC8vLy8vdnNTNThQLy8vLysvajdMZy8vLy8vOENrbS9ELy8vLy93VytVNFAvLy8vL0NoSDN3Ly8vLy84TlBkdUQvLy8vL3hHUmY4UC8vLy8vRkwxamcvLy8vLzhaTmZIRC8vLy8veHc4NjRQLy8vLy9JTFY1dy8vLy8vOGo0VjJELy8vLy95ZzFBY1AvLy8vL0syRGxnLy8vLy84dUk4SEQvLy8vLzBpUDBjUC8vLy8vU1lQdmcvLy8vLzlOMTVQRC8vLy8vMUVEZDRQLy8vLy9WVmNidy8vLy8vOVlnditELy8vLy8xeldvOFAvLy8vL1lBS0hnLy8vLy85a1ZpdkQvLy8vLzJlQ0Q0UC8vLy8vYS9xZHcvLy8vLzl2QVplRC8vLy8vM042SmNQLy8vLy9kcVlKZy8vLy8vOTYrYTNELy8vLy8zNGxrWVAvLy8vL2duazF3Ly8vLy8rRnBSbUQvLy8vLzRuNHZjUC8vLy8valNTaGcvLy8vLytSZUVYRC8vLy8vNVZjdTRQLy8vLy9tUnkzdy8vLy8vK2MzRU9ELy8vLy82Q2NQOFAvLy8vL3BGdkxnLy8vLy8rb0c4ZkQvLy8vLzZ2YlU0UC8vLy8vcjV0UHcvLy8vLyt6V3R1RC8vLy8vN2NhMThQLy8vLy91djlOZy8vLy8vKyt2MG5ELy8vLy84SisxWVAvLy8vL3hqN1J3Ly8vLy8vSi9sMkQvLy8vLzgyK1djUC8vLy8vMFgzbGcvLy8vLy9WUGVIRC8vLy8vOWo5YllQLy8vLy8zTDFwdy8vLy8vL2dvZCtELy8vLy8rUTg4Y1AvLy8vLzZDRm5nLy8vLy8vcjRXUEQvLy8vLysrZzc0UC8vLy8vODJEcncvLy8vLy8zSUhlRC8vLy8vL3JnYzhQLy8vLy8vcC8vZ0FBQUFBQUNYL3ZBQUFBQUFBWWZoNEFBQUFBQUNkK0R3QUFBQUFBTncvbUFBQUFBQUJHRDljQUFBQUFBRlVPQmdBQUFBQUFaQTMzQUFBQUFBQnpEQ1lBQUFBQUFIalJsd0FBQUFBQWtRcEdBQUFBQUFDYTJVOEFBQUFBQUs4SVpnQUFBQUFBdmdoWEFBQUFBQURObWk0QUFBQUFBTndHZHdBQUFBQUE2NWhPQUFBQUFBRDZtRDhBQUFBQUFRbVdiZ0FBQUFBQkdKWmZBQUFBQUFFbmxJNEFBQUFBQVRhVWZ3QUFBQUFCUlpLdUFBQUFBQUZVa3A4QUFBQUFBV09RemdBQUFBQUJjcEMvQUFBQUFBR0NJcFlBQUFBQUFaQ08zd0FBQUFBQm9DQzJBQUFBQUFHdklLY0FBQUFBQWI0ZTFnQUFBQUFCelI3SEFBQUFBQUhjSFBZQUFBQUFBZXNjNXdBQUFBQUIraHNXQUFBQUFBSUhZQThBQUFBQUFoZ1pOZ0FBQUFBQ0pWNHZBQUFBQUFJMnF2NEFBQUFBQWtOY1R3QUFBQUFDVktrZUFBQUFBQUpoV204QUFBQUFBbktuUGdBQUFBQUNmK3czQUFBQUFBS1FwVjRBQUFBQUFwM3FWd0FBQUFBQ3JxTitBQUFBQUFLNzZIY0FBQUFBQXMwMVJnQUFBQUFDMmVhWEFBQUFBQUxyTTJZQUFBQUFBdmZrdHdBQUFBQURDVEdHQUFBQUFBTVdkbjhBQUFBQUF5Y3ZwZ0FBQUFBRE5IU2ZBQUFBQUFORkxjWUFBQUFBQTFKeXZ3QUFBQUFEWXl2bUFBQUFBQU53Y044QUFBQUFBNEc5cmdBQUFBQURqbTcvQUFBQUFBT2Z1ODRBQUFBQUE2eHRId0FBQUFBRHZibnVBQUFBQUFQSy91Y0FBQUFBQTl1NERnQUFBQUFENlAwSEFBQUFBQVA1dGk0QUFBQUFCQWI3SndBQUFBQUVHRWYyQUFBQUFBUWsrVWNBQUFBQUJEWkdGZ0FBQUFBRVF2ZG5BQUFBQUFSVVJEWUFBQUFBQkY4Nmp3QUFBQUFFY3RYK0FBQUFBQVI5T0s4QUFBQUFCSkRVSGdBQUFBQUVtemJQQUFBQUFBU3UwajRBQUFBQUJMbklsd0FBQUFBRXpXUUdBQUFBQUFUWHhyY0FBQUFBQk90aUpnQUFBQUFFOWNUWEFBQUFBQVVKWUVZQUFBQUFCUlBDOXdBQUFBQUZKMTVtQUFBQUFBVXh3UmNBQUFBQUJVVmNoZ0FBQUFBRlQ3ODNBQUFBQUFWaldxWUFBQUFBQlc1US93QUFBQUFGZ2V4dUFBQUFBQVdNVHg4QUFBQUFCWi9xamdBQUFBQUZxazAvQUFBQUFBVzk2SzRBQUFBQUJjaExYd0FBQUFBRjIrYk9BQUFBQUFYbVNYOEFBQUFBQmZuazdnQUFBQUFHQk50SEFBQUFBQVlZZHJZQUFBQUFCaUxaWndBQUFBQUdOblRXQUFBQUFBWkExNGNBQUFBQUJsUnk5Z0FBQUFBR1h0V25BQUFBQUFaeWNSWUFBQUFBQm56VHh3QUFBQUFHa0c4MkFBQUFBQWFhMGVjQUFBQUFCcTV0VmdBQUFBQUd1V092QUFBQUFBYk0veDRBQUFBQUJ0ZGh6d0FBQUFBRzZ2MCtBQUFBQUFiMVgrOEFBQUFBQndqN1hnQUFBQUFIRTE0UEFBQUFBQWNtK1g0QUFBQUFCekZjTHdBQUFBQUhSUGVlQUFBQUFBZFA3ZmNBQUFBQUIyT0paZ0FBQUFBSGJld1hBQUFBQUFlQmg0WUFBQUFBQjR2cU53QUFBQUFIbjRXbUFBQUFBQWVwNkZjQUFBQUFCNzJEeGdBQUFBQUh4K1ozQUFBQUFBZmJnZVlBQUFBQUIrWGtsd0FBQUFBSCtZQUdBREFRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNCQVVDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkFnRUNBUUlCQWdFQ0FRSUJBZ0VDQVFJQkF2Ly91cDRBQVAvL3g4QUJCUC8vdWJBQUNQLy91YkFBQ1AvL3g4QUJEUC8veDhBQkVFeE5WQUJGUkZRQVJWTlVBRVZYVkFCRlVGUUFBQUFBQVFBQkFBQUFBUUFCQ2tWVFZEVkZSRlFzVFRNdU1pNHdMRTB4TVM0eExqQUs=
kind: ConfigMap
metadata:
annotations:
use-subpath: "true"
labels:
app: forgejo
name: forgejo-localtime-configmap