From d0d52800210ede9e07f72e02ebd866803502bae8 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 23 May 2025 19:14:58 +0200 Subject: [PATCH] docs: Dateien zum Forgejo-Artikel in Ausgabe 25/03 --- 2503-forgejo/README.md | 45 +++++++++++++++++ 2503-forgejo/docker-compose.yml | 89 +++++++++++++++++++++++++++++++++ 2503-forgejo/traefik.yml | 21 ++++++++ README.md | 5 ++ 4 files changed, 160 insertions(+) create mode 100644 2503-forgejo/README.md create mode 100644 2503-forgejo/docker-compose.yml create mode 100644 2503-forgejo/traefik.yml diff --git a/2503-forgejo/README.md b/2503-forgejo/README.md new file mode 100644 index 0000000..cba55cb --- /dev/null +++ b/2503-forgejo/README.md @@ -0,0 +1,45 @@ +# Softwareprojekte selbst hosten mit Forgejo + +Dieses Verzeichnis enthält die begleitenden Konfigurationsdateien und Befehle zum Artikel in der Ausgabe 03/25. + +## Dateien + +- [docker-compose.yml](docker-compose.yml) + vollständige Container-Konfiguration mit Forgejo, MariaDB, Traefik und Runner +- [traefik.yml](traefik.yml) + zentrale Traefik-Konfigurationsdatei für TLS und Routing + +## Befehle + +```bash +# Verzeichnisse vorbereiten +mkdir -p /data/docker/mariadb +mkdir -p /data/docker/traefik +mkdir -p /data/docker/forgejo +mkdir -p /data/docker/forgejo-runner/data + +# acme.json vorbereiten (für Let's Encrypt) +touch /data/docker/traefik/acme.json +chmod 600 /data/docker/traefik/acme.json + +# Traefik starten und testen +docker compose up traefik + +# MariaDB initialisieren +docker compose up mariadb + +# Forgejo starten +docker compose up -d + +# Runner Konfigurationsdatei erzeugen +docker compose run --rm \ + forgejo-runner forgejo-runner generate-config \ + > /data/docker/forgejo-runner/data/config.yaml + +# Runner registrieren +docker compose run --rm -it \ + forgejo-runner forgejo-runner register + +# Runner starten +docker compose up -d forgejo-runner +``` diff --git a/2503-forgejo/docker-compose.yml b/2503-forgejo/docker-compose.yml new file mode 100644 index 0000000..278bde7 --- /dev/null +++ b/2503-forgejo/docker-compose.yml @@ -0,0 +1,89 @@ +networks: + forgejo: + driver: bridge + enable_ipv6: true + +services: + mariadb: + image: mariadb:11 + container_name: mariadb + restart: unless-stopped + networks: + - forgejo + ports: + - "127.0.0.1:3306:3306" + environment: + - MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=0 + - MARIADB_DATABASE=forgejo + - MARIADB_USER=forgejo + - MARIADB_PASSWORD=forgejo-db-passwort + volumes: + - /data/docker/mariadb:/var/lib/mysql + + traefik: + image: traefik:latest + container_name: traefik + restart: unless-stopped + networks: + - forgejo + ports: + - "80:80" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /data/docker/traefik/traefik.yml:/traefik.yml:ro + - /data/docker/traefik/acme.json:/acme.json + labels: + - "traefik.enable=true" + - "traefik.http.routers.dashboard.rule=Host(`traefik.example.eu`)" + - "traefik.http.routers.dashboard.entrypoints=https" + - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt" + - "traefik.http.routers.dashboard.service=api@internal" + - "traefik.http.routers.dashboard.middlewares=auth" + - "traefik.http.middlewares.auth.basicauth.users=benutzername:passworthash" + + forgejo: + image: codeberg.org/forgejo/forgejo:11 + container_name: forgejo + restart: unless-stopped + networks: + - forgejo + ports: + - "23:22" + environment: + - USER_UID=1000 + - USER_GID=1000 + - FORGEJO__server__DOMAIN=git.example.eu + - FORGEJO__server__ROOT_URL=https://git.example.eu + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=mariadb:3306 + - FORGEJO__database__NAME=forgejo + - FORGEJO__database__USER=forgejo + - FORGEJO__database__PASSWD=forgejo-db-passwort + volumes: + - /data/docker/forgejo:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + depends_on: + - mariadb + labels: + - "traefik.enable=true" + - "traefik.http.routers.forgejo.rule=Host(`git.example.eu`)" + - "traefik.http.routers.forgejo.entrypoints=https" + - "traefik.http.routers.forgejo.tls.certresolver=letsencrypt" + - "traefik.http.routers.forgejo.service=forgejo" + - "traefik.http.services.forgejo.loadbalancer.server.port=3000" + + forgejo-runner: + image: code.forgejo.org/forgejo/runner:6 + container_name: forgejo-runner + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /data/docker/forgejo-runner/data:/data + environment: + - DOCKER_HOST=unix:///var/run/docker.sock + networks: + - forgejo + user: 0:0 + command: forgejo-runner -c /data/config.yaml daemon \ No newline at end of file diff --git a/2503-forgejo/traefik.yml b/2503-forgejo/traefik.yml new file mode 100644 index 0000000..f89e5dc --- /dev/null +++ b/2503-forgejo/traefik.yml @@ -0,0 +1,21 @@ +entryPoints: + http: + address: ":80" + https: + address: ":443" + +api: + dashboard: true + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + +certificatesResolvers: + letsencrypt: + acme: + email: admin@example.eu + storage: /acme.json + httpChallenge: + entryPoint: http \ No newline at end of file diff --git a/README.md b/README.md index 545d443..8e0371e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ In diesem Repository findest du die Quelltexte und Konfigurationsbeispiele zu Artikeln, die von mir in der Zeitschrift *Java aktuell* veröffentlicht wurden. Da in einer gedruckten Zeitschrift kein direktes Kopieren von Quelltexten möglich ist (und selbst bei PDF-Versionen oft Formatierungsprobleme auftreten), stelle ich hier alle relevanten Dateien in strukturierter Form zur Verfügung. +## Artikel + +- [Softwareprojekte selbst hosten mit Forgejo](2503-forgejo) + *Java aktuell 03/25* + ## Struktur Für jeden Artikel gibt es ein eigenes Unterverzeichnis. Der Verzeichnisname besteht aus der Ausgabennummer und einem thematischen Stichwort.