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