This commit is contained in:
Bast 2026-10-31 17:58:02 -05:00
parent c5e06f402f
commit b18c14f143
25 changed files with 3 additions and 1503 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
forgejo_data

View file

@ -1,80 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (KORRIGIERT: Läuft als root, um Docker-Socket-Rechte zu bekommen)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0" # <--- WICHTIG: Behebt den "permission denied" Fehler am Docker-Socket
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bullseye,debian-stable:docker://debian:stable-slim
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
depends_on:
- forgejo
restart: always
# 3. KUBERNETES INITIALIZER (KORRIGIERT: Bombensicherer Download via wget)
kind-cluster:
image: alpine:latest
container_name: gitops-test-control-plane
networks:
- test-net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./kind_kubeconfig:/output_kubeconfig
entrypoint: >
sh -c "apk add --no-cache wget docker-cli;
wget -q --show-progress https://k8s.io -O /usr/local/bin/kind;
chmod +x /usr/local/bin/kind;
if ! /usr/local/bin/kind get clusters 2>/dev/null | grep -q gitops-test; then
/usr/local/bin/kind create cluster --name gitops-test --image kindest/node:v1.28.0;
fi;
/usr/local/bin/kind get kubeconfig --name gitops-test > /output_kubeconfig/config;
tail -f /dev/null"
restart: always

View file

@ -1,82 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (KORRIGIERT: Läuft als root, um Docker-Socket-Rechte zu bekommen)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0" # <--- WICHTIG: Behebt den "permission denied" Fehler am Docker-Socket
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bullseye,debian-stable:docker://debian:stable-slim
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
depends_on:
- forgejo
restart: always
# 3. KUBERNETES INITIALIZER (KORRIGIERT: Erzwingt den echten Binary-Download via GitHub Release)
kind-cluster:
image: alpine:latest
container_name: gitops-test-control-plane
networks:
- test-net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./kind_kubeconfig:/output_kubeconfig
entrypoint: >
sh -c "apk add --no-cache wget docker-cli ca-certificates;
update-ca-certificates;
wget --no-check-certificate https://github.com -O /usr/local/bin/kind;
chmod +x /usr/local/bin/kind;
if ! /usr/local/bin/kind get clusters 2>/dev/null | grep -q gitops-test; then
/usr/local/bin/kind create cluster --name gitops-test --image kindest/node:v1.28.0;
fi;
/usr/local/bin/kind get kubeconfig --name gitops-test > /output_kubeconfig/config;
tail -f /dev/null"
restart: always

View file

@ -1,88 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://debian:stable-slim,debian-stable:docker://debian:stable-slim
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
depends_on:
- forgejo
restart: always
# 3. KUBERNETES INITIALIZER (KORRIGIERT: Cgroup-Kompatibilität für Devuan/elogind)
kind-cluster:
image: alpine:latest
container_name: kind-initializer
networks:
- test-net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /sys/fs/cgroup:/sys/fs/cgroup:ro # Reicht die Host-Cgroups schreibgeschützt durch
- ./kind_kubeconfig:/output_kubeconfig
entrypoint: >
sh -c "apk add --no-cache wget docker-cli ca-certificates;
update-ca-certificates;
wget -q --show-progress https://github.com -O /usr/local/bin/kind;
chmod +x /usr/local/bin/kind;
if ! /usr/local/bin/kind get clusters 2>/dev/null | grep -q gitops-test; then
# HIER: Wir erzwingen die Host-Cgroup-Namespaces für systemd-freie Systeme
/usr/local/bin/kind create cluster --name gitops-test --image kindest/node:v1.28.0 --kubeadm-config=/dev/stdin <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
kubeProxyMode: "iptables"
EOF
fi;
/usr/local/bin/kind get kubeconfig --name gitops-test > /output_kubeconfig/config;
tail -f /dev/null"
restart: always

View file

@ -1,82 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO (Git Server + Registry)
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (Pipeline-Ausführung)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://debian:stable-slim,debian-stable:docker://debian:stable-slim
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./kind_kubeconfig:/root/.kube # Reicht die K3s-Config an Terraform weiter
depends_on:
- forgejo
restart: always
# 3. KUBERNETES PLATTFORM (K3s: Voll kompatibel mit Devuan/elogind)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443" # Kubernetes-API für dein lokales Terraform
- "8080:80" # Hierüber erreichst du deine Webapp-Updates von aussen
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output # Schreibt die Zugangsdaten direkt in dein Projektverzeichnis
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,85 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (KORRIGIERT: Zwingt Pipeline-Container in das richtige Netzwerk)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://debian:stable-slim,debian-stable:docker://debian:stable-slim
# --- HIER IST DIE RETTUNG ---
# Erzwingt, dass alle vom Runner gestarteten Job-Container das Netzwerk teilen
- AM_CONTAINER_NETWORK=gitops-test-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
restart: always
# 3. KUBERNETES PLATTFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,84 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (KORRIGIERT: Lädt die Netzwerkkonfiguration beim Start)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
# HIER: Wir hängen das --config Flag an den Daemon-Befehl an!
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=http://localhost:3000 # Wechseln auf localhost, da network: host genutzt wird
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml # <--- Reicht die Config-Datei hinein
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
restart: always
# 3. KUBERNETES PLATTFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,85 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (KORRIGIERT: Schlafmodus aktiv für die manuelle Registrierung)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
#command: ["tail -f /dev/null"] # <--- Zwingt den Container aktiv zu bleiben ohne Absturz!
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=http://localhost:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=juwV1ORFDdKzsazRavmsQ6BTdR0MRSDJJ6R1Maik
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
- /usr/local/bin/terraform:/usr/local/bin/terraform
depends_on:
- forgejo
restart: always
# 3. KUBERNETES PLATTFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,84 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://forgejo:3000 # <--- Einheitlich im Docker-Netzwerk
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data
restart: always
# 2. FORGEJO RUNNER (KORRIGIERT: Vollautomatische Registrierung beim Booten)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
# Der Trick: Er prüft, ob eine Config existiert. Wenn nicht, registriert er sich vollautomatisch selbst!
entrypoint: >
sh -c "if [ ! -f /data/.runner ]; then
forgejo-runner register --instance http://forgejo:3000 --token mysecrettoken123 --name debian-local-runner --labels ubuntu-latest:docker://ghcr.io/devops-infra/docker-terraform:latest --no-interactive;
fi;
exec forgejo-runner daemon"
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=mysecrettoken123 # <--- Wir fixieren das Token einfach!
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
restart: always
# 3. KUBERNETES PLATTFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,96 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
# WICHTIG: Die Root-URL zeigt nun auf das sichere HTTPS-Eingangstor von Caddy
- FORGEJO__SERVER__ROOT_URL=https://forgejo
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY (KORRIGIERT: Garantiert echtes, lokales SSL für Docker)
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
- test-net
ports:
- "3000:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
# Greift nun verschlüsselt und absolut regelkonform über Caddy auf Forgejo zu
- GITEA_INSTANCE_URL=https://caddy
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- caddy
restart: always
# 4. KUBERNETES PLATTFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,93 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=https://localhost:3000 # Zeigt nun auf das sichere Nginx-Tor
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY (Behebt die Docker SSL-Probleme)
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
- test-net
ports:
- "3000:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER (KORRIGIERT: Verweist nun sauber auf nginx statt caddy)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=https://nginx # Geht verschlüsselt über Nginx zu Forgejo
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- nginx # <--- KORRIGIERT: Hier stand vorher caddy!
restart: always
# 4. KUBERNETES PLATTFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,95 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO (Git Server, Container Registry & Pipeline-Zentrale)
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://forgejo:3000 # Wichtig für internen, fehlerfreien Pipeline-Checkout
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY (Bedient den HTTPS-Zwang des Docker-Logins/Pushs)
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
- test-net
ports:
- "3000:443" # Der verschlüsselte HTTPS-Port für deine Pipeline ('docker login localhost:3000')
- "3005:80" # Der unverschlüsselte Fallback-Port für deinen bequemen Browser-SSH-Tunnel
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER (Der lokale Pipeline-Arbeiter im Schlafmodus für Registrierung)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
#command: ["tail -f /dev/null"] # <--- Schlafmodus aktiv für deine manuelle Registrierung via Host
command: ["forgejo-runner daemon"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=juwV1ORFDdKzsazRavmsQ6BTdR0MRSDJJ6R1Maik
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- nginx
restart: always
# 4. KUBERNETES PLATFORM (K3s: Voll kompatibel mit Devuan/elogind Cgroups)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443" # Für dein lokales Host-Terraform
- "8080:80" # Hierüber rufst du deine Webapp-Änderungen auf
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,93 +0,0 @@
networks:
test-net:
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO (Git Server, Container Registry & Pipeline-Zentrale)
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://forgejo:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY (Bedient den HTTPS-Zwang des Docker-Logins/Pushs via Port 3000)
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
- test-net
ports:
- "3005:443" # Verschlüsseltes SSL-Tor für Docker (nginx:443 intern)
- "3000:80" # Unverschlüsselter Port für deinen SSH-Tunnel-Browser
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER (Der lokale Pipeline-Arbeiter im Testnetzwerk)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- nginx
restart: always
# 4. KUBERNETES PLATFORM (K3s: Isoliert im selben Netzwerk)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443" # Für Host-Terraform
- "8080:80" # Hierüber rufst du deine Webapp auf
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,96 +0,0 @@
networks:
test-net:
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO (Git Server, Container Registry & Pipeline-Zentrale)
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://forgejo:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY (Bedient den HTTPS-Zwang des Docker-Logins/Pushs via Port 3000)
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
- test-net
aliases:
- registry.local
ports:
- "3005:443" # Verschlüsseltes SSL-Tor für Docker (nginx:443 intern)
- "3000:80" # Unverschlüsselter Port für deinen SSH-Tunnel-Browser
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER (Der lokale Pipeline-Arbeiter im Testnetzwerk)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- nginx
restart: always
# 4. KUBERNETES PLATFORM (K3s: Vertraut jetzt deiner lokalen Nginx-CA über HTTPS)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
- ./nginx_ssl/nginx.crt:/etc/containerd/certs.d/registry.local/ca.crt:ro
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,96 +0,0 @@
networks:
test-net:
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://forgejo:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
test-net:
aliases:
- registry.local
ports:
- "3005:443"
- "3000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- nginx
restart: always
# 4. KUBERNETES PLATFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
- ./nginx_ssl/nginx.crt:/etc/containerd/certs.d/registry.local/ca.crt:ro
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,99 +0,0 @@
networks:
test-net:
name: gitops-test-network
volumes:
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://forgejo:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
volumes:
- forgejo-data:/data
restart: always
# 2. NGINX REVERSE PROXY
nginx:
image: nginx:alpine
container_name: nginx-proxy
networks:
test-net:
aliases:
- registry.local
ports:
- "3005:443"
- "3000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx_ssl:/etc/nginx/ssl:ro
restart: always
# 3. FORGEJO RUNNER
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
user: "0:0"
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon --config /data/runner-config.yml"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
- ./runner-config.yaml:/data/runner-config.yml
- ./kind_kubeconfig:/root/.kube
depends_on:
- forgejo
- nginx
restart: always
# 4. KUBERNETES PLATFORM (K3s)
k3s-cluster:
image: rancher/k3s:v1.28.2-k3s1
container_name: local-k3s-platform
networks:
- test-net
privileged: true
tmpfs:
- /run
- /var/run
ports:
- "8443:6443"
- "8080:80"
environment:
- K3S_KUBECONFIG_OUTPUT=/output/config
- K3S_KUBECONFIG_MODE=666
volumes:
- ./kind_kubeconfig:/output
# 1. Für die containerd-Runtime spezifisch
- ./nginx_ssl/nginx.crt:/etc/containerd/certs.d/registry.local/ca.crt:ro
# 2. DIE SYSTEMWEITE RETTUNG: Verankert die CA direkt im Linux-Zertifikatsspeicher des K3s-Betriebssystems!
- ./nginx_ssl/nginx.crt:/usr/local/share/ca-certificates/registry-ca.crt:ro
command: server --disable traefik --egress-selector-mode=disabled
restart: always

View file

@ -1,81 +0,0 @@
networks:
test-net:
driver: bridge
name: gitops-test-network
volumes:
# Erzeugt die Ordner lokal und korrigiert automatisch die Docker-Berechtigungen
forgejo-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/forgejo_data
runner-data:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/runner_data
services:
# 1. FORGEJO (Git Server + Registry)
forgejo:
image: data.forgejo.org/forgejo/forgejo:9
container_name: forgejo
networks:
- test-net
environment:
- FORGEJO__SERVER__HTTP_PORT=3000
- FORGEJO__SERVER__ROOT_URL=http://localhost:3000
- FORGEJO__ACTIONS__ENABLED=true
- FORGEJO__PACKAGES__ENABLED=true
- FORGEJO__PACKAGES__CONTAINER_ENABLED=true
ports:
- "3000:3000"
- "3005:3000"
- "2222:22"
volumes:
- forgejo-data:/data # Nutzt das sichere Named-Volume
restart: always
# 2. FORGEJO RUNNER (Pipeline-Ausführung)
forgejo-runner:
image: data.forgejo.org/forgejo/runner:9
container_name: forgejo-runner
networks:
- test-net
entrypoint: ["/bin/sh", "-c"]
command: ["forgejo-runner daemon"]
#command: ["tail -f /dev/null"]
environment:
- GITEA_INSTANCE_URL=http://forgejo:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS
- GITEA_RUNNER_NAME=debian-local-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bullseye,debian-stable:docker://debian:stable-slim
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- runner-data:/data
depends_on:
- forgejo
restart: always
# 3. KUBERNETES INITIALIZER (Flüchtiger Test-Cluster)
kind-cluster:
image: alpine:latest
container_name: gitops-test-control-plane
networks:
- test-net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./kind_kubeconfig:/output_kubeconfig
entrypoint: >
sh -c "apk add --no-cache curl docker-cli;
curl -sfL https://k8s.io -o /usr/local/bin/kind;
chmod +x /usr/local/bin/kind;
if ! /usr/local/bin/kind get clusters 2>/dev/null | grep -q gitops-test; then
/usr/local/bin/kind create cluster --name gitops-test --image kindest/node:v1.28.0;
fi;
/usr/local/bin/kind get kubeconfig --name gitops-test > /output_kubeconfig/config;
tail -f /dev/null"
restart: always

View file

@ -0,0 +1 @@
c5e06f402f19e600aa57d63f824d556ef73f4b03 refs/heads/main

View file

@ -1 +1,2 @@
P pack-fe40805e21f1a034d4fb9912dd66a58bfe0334f9.pack

Binary file not shown.

View file

@ -1,37 +0,0 @@
events { worker_connections 1024; }
http {
# Erlaubt das Hochladen großer Docker-Images ohne Limits
client_max_body_size 0;
# BLOCK 1: HTTPS (Port 443) - Für den verschlüsselten Docker-Login deiner Pipeline
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass http://forgejo:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# BLOCK 2: HTTP (Port 80) - Für deinen bequemen SSH-Tunnel auf Port 3005
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://forgejo:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}

View file

@ -1,41 +0,0 @@
events { worker_connections 1024; }
http {
client_max_body_size 0;
# Aktiviert den internen Docker-DNS-Server für dynamische IP-Updates
resolver 127.0.0.11 valid=5s;
# BLOCK 1: HTTPS (Port 443)
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
set $upstream_forgejo http://forgejo:3000;
proxy_pass $upstream_forgejo;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# BLOCK 2: HTTP (Port 80) - Für deinen SSH-Tunnel
server {
listen 80;
server_name localhost;
location / {
set $upstream_forgejo http://forgejo:3000;
proxy_pass $upstream_forgejo;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}

View file

@ -1,6 +0,0 @@
docker compose exec forgejo-runner forgejo-runner register \
--instance http://forgejo:3000 \
--token z6xlwg3dSRYZ59zUxfrztDJasG6VkvulFyTwtJQS \
--name debian-local-runner \
--labels ubuntu-latest:docker://docker:24-cli,debian-stable:docker://docker:24-cli \
--no-interactive