diff --git a/README.md b/README.md index e69de29..5a1c4ac 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,139 @@ +touch README.md +git init +git checkout -b main +git add README.md +git commit -m "first commit" +git remote add origin http://10.100.20.13:3000/infra/xy-xy.git +git push -u origin main + + +und später dann nur noch mit git commit -m "" und git push... bzw. über das GUI + +# dev-int01 + +`dev-int01` ist die zentrale Dev-/Git-VM fuer die interne Infrastruktur. + +## Zweck der VM + +Auf `dev-int01` laufen die Werkzeuge, mit denen Infrastruktur, Container-Stacks und Konfigurationen gepflegt werden. + +Geplante bzw. genutzte Kernkomponenten: + +- Forgejo als Git-Server +- code-server als browserbasierte Entwicklungsumgebung +- Arbeitsverzeichnisse fuer Infrastruktur-, Compose- und Konfigurationsdateien +- optionale Build-, Deploy- und Hilfsskripte + +Damit ist `dev-int01` nicht die Laufzeitumgebung fuer produktive Dienste, sondern die zentrale Stelle fuer: + +- Erfassen und Bearbeiten von Konfigurationen +- Versionierung in Git +- Dokumentation von Infrastruktur +- Vorbereitung von Deployments auf andere VMs + +## Rolle im Gesamtbild + +Im Zielbild ist `dev-int01` die Dev-/Git-VM im internen Servernetz. Die Rollen sind bewusst getrennt [1]: + +- `dev-int01`: Entwicklung, Git, code-server, Forgejo +- `infra-int01`: interne Reverse-Proxy- und technische Infra-Dienste +- `mon01`: Monitoring und Logging +- weitere VMs: Apps, Media, Home Assistant, Mail + +Das bedeutet: + +- Auf `dev-int01` werden Compose-Dateien, Konfigurationen und Doku erstellt. +- Diese Inhalte werden in Forgejo versioniert. +- Andere VMs wie `infra-int01` oder `mon01` holen sich diese Inhalte spaeter per `git pull` und setzen sie lokal um. + +## Grundprinzip + +`dev-int01` ist die Quelle fuer deklarative Infrastrukturdateien. + +Der gewuenschte Ablauf ist: + +1. In `code-server` an einer lokalen Arbeitskopie arbeiten +2. Aenderungen in Git committen +3. Nach Forgejo pushen +4. Auf Ziel-VMs wie `infra-int01` oder `mon01` das Repository klonen oder aktualisieren +5. Dort mit `docker compose up -d` oder aehnlichen Befehlen ausrollen + +Damit gilt: + +- `code-server` = Editor und Arbeitsumgebung +- Forgejo = zentrales Git-Remote +- Ziel-VMs = Laufzeit- und Deployment-Ziele + +## Nutzen von `dev-int01` + +Die VM bringt mehrere Vorteile: + +- zentrale Pflege von Infrastrukturdateien +- nachvollziehbare Aenderungen ueber Git-Historie +- reproduzierbare Deployments +- Trennung zwischen Entwicklung und produktivem Betrieb +- einfache Zusammenarbeit zwischen Editor, Git und Zielsystemen + +Dadurch werden Aenderungen nicht "direkt auf Produktivsystemen zusammengeklickt", sondern zuerst sauber erfasst, versioniert und dann ausgerollt. + +## Zusammenspiel von Forgejo, code-server und Infrastruktur + +### Forgejo +Forgejo ist der interne Git-Server. + +Dort liegen die Repositories fuer: + +- VM-Konfigurationen +- Docker-Compose-Dateien +- nginx-/Proxy-Konfigurationen +- Monitoring-Konfigurationen +- Dokumentation +- Deploy-/Hilfsskripte + +### code-server +`code-server` ist die Entwicklungsumgebung im Browser. + +Dort werden lokale Arbeitskopien von Repositories geoeffnet und bearbeitet. `code-server` speichert selbst nicht "anstelle von Git", sondern arbeitet mit normalen lokalen Git-Repositories. + +### Infrastruktur-VMs +VMs wie `infra-int01` und `mon01` verwenden die in Forgejo versionierten Dateien als Quelle fuer ihre Konfiguration. + +Typischer Ablauf: + +- Repo auf `dev-int01` in code-server bearbeiten +- Aenderungen nach Forgejo pushen +- auf Ziel-VM Repo pullen +- lokal deployen + +## Empfohlener Workflow + +### Entwicklung auf `dev-int01` +- Repository in Forgejo anlegen +- Repository lokal in den Workspace klonen +- Repository in `code-server` oeffnen +- Dateien bearbeiten +- committen +- pushen + +### Deployment auf Ziel-VMs +- Repository auf Ziel-VM klonen +- bei Aenderungen `git pull` +- danach Dienste aktualisieren oder neu starten + +## Verzeichnisidee + +Beispielhaft getrennt nach Zweck: + +```text +/srv +├── data +│ ├── code-server +│ ├── forgejo +│ └── mariadb-forgejo +├── git +│ └── repos +└── workspace + ├── infra + ├── web-dev + ├── builds + └── scripts \ No newline at end of file diff --git a/compose/code-server/compose.yaml b/compose/code-server/compose.yaml new file mode 100644 index 0000000..e5fb8e8 --- /dev/null +++ b/compose/code-server/compose.yaml @@ -0,0 +1,33 @@ +services: + code-server: + image: lscr.io/linuxserver/code-server:latest + container_name: code-server + restart: unless-stopped + dns: + - 8.8.8.8 + - 1.1.1.1 + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Zurich + - PASSWORD=dasmussSafesein101 + - SUDO_PASSWORD=Burrito737 + - DEFAULT_WORKSPACE=/srv/workspace + - INSTALL_NODE=true + ports: + - "8443:8443" + volumes: + - /srv/data/code-server:/config + - /srv/workspace:/srv/workspace + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:8443/ || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s + networks: + - dev-nw + +networks: + dev-nw: + external: true \ No newline at end of file diff --git a/compose/forgejo/compose.yaml b/compose/forgejo/compose.yaml new file mode 100644 index 0000000..a9320f2 --- /dev/null +++ b/compose/forgejo/compose.yaml @@ -0,0 +1,50 @@ +services: + forgejo-db: + image: mariadb:11 + container_name: forgejo-db + restart: unless-stopped + environment: + - MARIADB_ROOT_PASSWORD=dasmussSafesein101 + - MARIADB_DATABASE=forgejo + - MARIADB_USER=forgejo + - MARIADB_PASSWORD=dasmussSafesein101 + - TZ=Europe/Zurich + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + volumes: + - /srv/data/mariadb-forgejo:/var/lib/mysql + networks: + - dev-nw + + forgejo: + image: codeberg.org/forgejo/forgejo:11 + container_name: forgejo + restart: unless-stopped + depends_on: + - forgejo-db + environment: + - USER_UID=1000 + - USER_GID=1000 + - TZ=Europe/Zurich + - FORGEJO__server__ROOT_URL=http://10.100.20.13:3000/ + - FORGEJO__server__DISABLE_SSH=true + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=forgejo-db:3306 + - FORGEJO__database__NAME=forgejo + - FORGEJO__database__USER=forgejo + - FORGEJO__database__PASSWD=dasmussSafesein101 + - FORGEJO__repository__ROOT=/git/repos + ports: + - "3000:3000" + volumes: + - /srv/data/forgejo:/data + - /srv/git/repos:/git/repos + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + networks: + - dev-nw + +networks: + dev-nw: + external: true \ No newline at end of file