<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Installation on Ableger</title><link>https://ableger.bildungselemente.de/ableger/docs/installation/</link><description>Recent content in Installation on Ableger</description><generator>Hugo</generator><language>de-DE</language><atom:link href="https://ableger.bildungselemente.de/ableger/docs/installation/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting Started</title><link>https://ableger.bildungselemente.de/ableger/docs/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ableger.bildungselemente.de/ableger/docs/getting-started/</guid><description>&lt;h1 id="getting-started"&gt;Getting Started&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Technische Dokumentation.&lt;/em&gt; Eine eigene Ableger-Instanz von den Vorlagen-Repos bis zum ersten funktionierenden Deploy.&lt;/p&gt;
&lt;p&gt;Beispielwerte in diesem Text (&lt;code&gt;git.example.org&lt;/code&gt;, &lt;code&gt;ableger.example.org&lt;/code&gt;, &lt;code&gt;deine-org&lt;/code&gt;) stehen für die Werte, die bei einer eigenen Installation tatsächlich verwendet werden.&lt;/p&gt;
&lt;h2 id="ergebnis"&gt;Ergebnis&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Zwei Gitea-Repos: &lt;code&gt;deine-org/website&lt;/code&gt; (Website + CMS-Code, aus der Vorlage erzeugt) und &lt;code&gt;deine-org/methoden&lt;/code&gt; (Methoden-Inhalte, ebenfalls aus einer Vorlage erzeugt)&lt;/li&gt;
&lt;li&gt;Ein Server, der bei jedem Commit (spätestens per Cron) die Website neu baut und veröffentlicht&lt;/li&gt;
&lt;li&gt;Eine erreichbare Website unter der eigenen Domain, inklusive &lt;code&gt;/admin/&lt;/code&gt; (Decap CMS) mit funktionierendem Login gegen Gitea&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="voraussetzungen"&gt;Voraussetzungen&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Eine laufende Gitea- oder Forgejo-Instanz mit Owner-Rechten in einer Organisation (alternativ in einem persönlichen Account – &lt;strong&gt;außer&lt;/strong&gt; für den privaten Modus, der zwingend eine Organisation braucht, siehe &lt;a href="https://ableger.bildungselemente.de/ableger/docs/schnittstellen/#voraussetzung-organisation-statt-pers%C3%B6nliches-konto"&gt;Schnittstellen, „Voraussetzung: Organisation statt persönliches Konto“&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ein Server mit Shell-Zugang (SSH), auf dem sich ein eigenes Binary ablegen und ein Cron-Job einrichten lässt&lt;/li&gt;
&lt;li&gt;Eine eigene Domain, die auf diesen Server zeigt&lt;/li&gt;
&lt;li&gt;Ruby (für die Hilfsskripte) und &lt;code&gt;git&lt;/code&gt; auf dem Server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gitea muss nicht auf dem Deploy-Server liegen. Siehe hierzu weiter unten „Ein Server oder zwei“. Liegt beides auf einem Server, entfällt der SSH-Umweg für den Deploy-Hook.&lt;/p&gt;</description></item><item><title>Architektur</title><link>https://ableger.bildungselemente.de/ableger/docs/architektur/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ableger.bildungselemente.de/ableger/docs/architektur/</guid><description>&lt;h1 id="architektur"&gt;Architektur&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Technische Dokumentation.&lt;/em&gt; Wo liegen die Daten, wer schreibt worauf, was wann auf die Website kommt. Hintergründe und Begründungen sind hier zu finden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ableger.bildungselemente.de/ableger/docs/konzept-und-grundprinzipien/"&gt;Konzept und Grundprinzipien&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ableger.bildungselemente.de/ableger/docs/getting-started/"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ableger.bildungselemente.de/ableger/docs/schnittstellen/"&gt;Schnittstellen&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die Beispielnamen unten (&lt;code&gt;git.example.org&lt;/code&gt;, &lt;code&gt;ableger.example.org&lt;/code&gt;) stehen für die Werte, die bei einer eigenen Installation in &lt;code&gt;install.env&lt;/code&gt; eingetragen werden (vgl. &lt;a href="https://ableger.bildungselemente.de/ableger/docs/getting-started/"&gt;Getting Started&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="übersicht"&gt;Übersicht&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 Leser[&amp;#34;Leser*in&amp;#34;]
 Autor[&amp;#34;Autor*in&amp;#34;]
 Dev[&amp;#34;Entwickler*in (lokal)&amp;#34;]

 subgraph Gitea[&amp;#34;Gitea/Forgejo – git.example.org&amp;#34;]
 RepoWeb[(&amp;#34;website&amp;lt;br/&amp;gt;Website &amp;#43; CMS-Code&amp;#34;)]
 RepoContent[(&amp;#34;methoden&amp;lt;br/&amp;gt;Methoden-Inhalte&amp;#34;)]
 OAuth[&amp;#34;OAuth-Login&amp;lt;br/&amp;gt;Teams read/write/Owners&amp;#34;]
 end

 subgraph Server[&amp;#34;Hosting – ein oder zwei Server&amp;#34;]
 ProxyRead[&amp;#34;oauth2-proxy&amp;lt;br/&amp;gt;optional, privater Modus&amp;#34;]
 ProxyWrite[&amp;#34;oauth2-proxy&amp;lt;br/&amp;gt;optional, privater Modus&amp;#34;]
 Admin[&amp;#34;/admin/&amp;lt;br/&amp;gt;Decap CMS&amp;#34;]
 Hook[&amp;#34;post-receive Hook&amp;#34;]
 Cron[&amp;#34;Cron&amp;lt;br/&amp;gt;alle 10 Min.&amp;#34;]
 Sync[&amp;#34;sync-methoden.sh&amp;#34;]
 Build[&amp;#34;Hugo Build&amp;#34;]
 Website[&amp;#34;Website&amp;#34;]
 end

 Leser --&amp;gt;|&amp;#34;prüft Login gegen&amp;lt;br/&amp;gt;(nur privater Modus)&amp;#34;| OAuth
 Autor --&amp;gt;|&amp;#34;prüft Login gegen&amp;#34;| OAuth
 Leser --&amp;gt; ProxyRead --&amp;gt; Website
 Autor --&amp;gt; ProxyWrite --&amp;gt; Admin
 Admin --&amp;gt;|&amp;#34;commit direkt&amp;lt;br/&amp;gt;publish_mode: simple&amp;#34;| RepoContent

 Dev --&amp;gt;|git push origin| RepoWeb
 Dev --&amp;gt;|git push origin| RepoContent
 Dev -.-&amp;gt;|&amp;#34;git push deploy&amp;lt;br/&amp;gt;optional, löst sofort aus&amp;#34;| Hook
 Cron --&amp;gt;|ruft auf| Hook

 RepoWeb --&amp;gt;|klont/pullt| Hook
 RepoContent --&amp;gt;|klont/pullt| Sync
 Hook --&amp;gt; Sync
 Hook --&amp;gt; Build
 Sync --&amp;gt; Build
 Build --&amp;gt;|rsync| Website
 Build --&amp;gt;|rsync| Admin&lt;/pre&gt;
&lt;h3 id="erläuterungen"&gt;Erläuterungen&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Zwei Repos als Grundgerüst:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Schnittstellen</title><link>https://ableger.bildungselemente.de/ableger/docs/schnittstellen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ableger.bildungselemente.de/ableger/docs/schnittstellen/</guid><description>&lt;h1 id="schnittstellen"&gt;Schnittstellen&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Technische Dokumentation.&lt;/em&gt; Zwei getrennte Themen in einem Dokument, weil beide auf demselben Mechanismus (Gitea-OAuth2) aufbauen.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Decap CMS gegen Gitea anmelden (MUSS)&lt;/li&gt;
&lt;li&gt;Privater Modus (KANN) - stellt (einen Teil des Projekts) hinter eine Authentifizierung.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="teil-1-decap-cms-gegen-gitea-anmelden-muss"&gt;Teil 1: Decap CMS gegen Gitea anmelden (MUSS)&lt;/h2&gt;
&lt;p&gt;Diese Werte füllen &lt;code&gt;install.env&lt;/code&gt; (daraus generiert &lt;code&gt;scripts/generate-config.sh&lt;/code&gt; bei jedem Deploy &lt;code&gt;admin/config.yml&lt;/code&gt;, siehe &lt;a href="https://ableger.bildungselemente.de/ableger/docs/getting-started/"&gt;Getting Started&lt;/a&gt;) und richten zwei serverseitige Voraussetzungen ein, die Decap CMS gegen Gitea zusätzlich braucht. Jeder Fork braucht seine eigene OAuth-Anwendung.&lt;/p&gt;</description></item><item><title>Methoden-Set</title><link>https://ableger.bildungselemente.de/ableger/docs/methoden-set/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ableger.bildungselemente.de/ableger/docs/methoden-set/</guid><description>&lt;h1 id="methoden-set"&gt;Methoden-Set&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Technische Dokumentation.&lt;/em&gt; &lt;code&gt;methoden-set/&lt;/code&gt; (eigener Top-Level-Ordner im Website-Repo) ist ein eigenständiges, rein clientseitiges Werkzeug: Nutzer*innen fügen Links auf Methoden oder Varianten der Website ein, sortieren sie per Drag &amp;amp; Drop und laden das Ergebnis als Ordner (&lt;code&gt;.zip&lt;/code&gt;), als eine zusammenhängende Markdown-Datei oder als Word- oder OpenDocument-Dokument (&lt;code&gt;.docx&lt;/code&gt;/&lt;code&gt;.odt&lt;/code&gt;, per Pandoc, mit eigener Vorlagen-Auswahl inkl. Upload, optionalem Inhaltsverzeichnis und Kapitelnummerierung) herunter. Läuft vollständig im Browser, keine Serverkomponente und keine Datenübertragung nach außen.&lt;/p&gt;</description></item><item><title>Abhängigkeiten &amp; Updates</title><link>https://ableger.bildungselemente.de/ableger/docs/abhaengigkeiten/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ableger.bildungselemente.de/ableger/docs/abhaengigkeiten/</guid><description>&lt;h1 id="abhängigkeiten--updates"&gt;Abhängigkeiten &amp;amp; Updates&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Technische Dokumentation.&lt;/em&gt; Ableger bindet keine Paketmanager-Abhängigkeiten zur Laufzeit ein (keine &lt;code&gt;npm install&lt;/code&gt;, kein Bundler). Jede Drittsoftware ist entweder ein einzelnes, direkt vom Hersteller bezogenes Binary, oder eine Handvoll statischer Dateien, die einmalig gezogen und ins jeweilige Repo gelegt werden. Das hält die Installation einfach, bedeutet aber: Updates passieren nicht automatisch, sondern müssen hier bewusst nachgezogen werden.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Software&lt;/th&gt;
					&lt;th&gt;Aktuell verifizierte Version&lt;/th&gt;
					&lt;th&gt;Wo verankert&lt;/th&gt;
					&lt;th&gt;Update-Rezept&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hugo&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;0.164.0 (reguläre, nicht Extended-Variante)&lt;/td&gt;
					&lt;td&gt;Fest im Installationsbefehl in &lt;a href="https://ableger.bildungselemente.de/ableger/docs/getting-started/#4-hugo-installieren"&gt;Getting Started, Schritt 4&lt;/a&gt; – keine zentrale Versionsdatei&lt;/td&gt;
					&lt;td&gt;Neue Version bei den &lt;a href="https://github.com/gohugoio/hugo/releases"&gt;Hugo-Releases&lt;/a&gt; prüfen, Download-URL in Schritt 4 anpassen, auf dem Server neu ziehen (&lt;code&gt;~/bin/hugo&lt;/code&gt; ersetzen), danach &lt;code&gt;hugo version&lt;/code&gt; und einen lokalen Testbuild (&lt;code&gt;hugo server&lt;/code&gt;) gegen Breaking Changes prüfen (Hugos eigenes CHANGELOG konsultieren)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Pagefind&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;1.5.2 (musl-Variante, statisch gelinkt)&lt;/td&gt;
					&lt;td&gt;Fest im Installationsbefehl in &lt;a href="https://ableger.bildungselemente.de/ableger/docs/getting-started/#5-pagefind-installieren"&gt;Getting Started, Schritt 5&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Neue Version bei den &lt;a href="https://github.com/CloudCannon/pagefind/releases"&gt;Pagefind-Releases&lt;/a&gt; prüfen, Download-URL anpassen, &lt;code&gt;~/bin/pagefind&lt;/code&gt; ersetzen, danach &lt;code&gt;/suche/&lt;/code&gt; manuell testen (Suchindex wird bei jedem Deploy ohnehin neu gebaut, kein Datenmigrationsschritt nötig)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Decap CMS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;3.15.1 (exakt gepinnt, nicht &lt;code&gt;^3.0.0&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;-Tag in &lt;code&gt;admin/index.html&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bewusst &lt;strong&gt;exakt&lt;/strong&gt; gepinnt statt einer floatenden Version: Ein automatisches Nebenversions-Update könnte das CMS-Formular ändern, ohne dass das getestet wurde, bevor es live geht. Neue Version bei &lt;a href="https://unpkg.com/decap-cms"&gt;unpkg.com/decap-cms&lt;/a&gt; oder dem &lt;a href="https://github.com/decap-cms/decap-cms"&gt;Decap-CMS-Repo&lt;/a&gt; prüfen, Versionsnummer im Script-Tag anpassen, danach den kompletten Editier-/Speicher-Workflow (Methode und Variante anlegen/bearbeiten) manuell durchklicken&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;oauth2-proxy&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;7.15.3&lt;/td&gt;
					&lt;td&gt;Fest im Installationsbefehl in &lt;a href="https://ableger.bildungselemente.de/ableger/docs/schnittstellen/#teil-2-privater-modus-kann"&gt;Schnittstellen, Teil 2&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Nur relevant, falls der private Modus genutzt wird. Neue Version bei den &lt;a href="https://github.com/oauth2-proxy/oauth2-proxy/releases"&gt;oauth2-proxy-Releases&lt;/a&gt; prüfen, &lt;code&gt;~/bin/oauth2-proxy&lt;/code&gt; ersetzen, &lt;code&gt;supervisorctl restart oauth2-proxy-read oauth2-proxy-write&lt;/code&gt;, danach Login-Flow für beide Instanzen (Website und &lt;code&gt;/admin/&lt;/code&gt;) neu testen&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Pandoc (als WASM-Binary)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;pandoc-wasm 1.1.0 → Pandoc 3.10, &lt;code&gt;@bjorn3/browser_wasi_shim&lt;/code&gt; 0.4.2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;methoden-set/vendor/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Eigenes Update-Rezept mit einem manuellen Patch-Schritt, siehe &lt;a href="https://ableger.bildungselemente.de/ableger/docs/methoden-set/#pandoc-als-wasm-binary"&gt;Methoden-Set, „Pandoc als WASM-Binary“&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="grundsatz-für-neue-abhängigkeiten"&gt;Grundsatz für neue Abhängigkeiten&lt;/h2&gt;
&lt;p&gt;Drittsoftware wird direkt von der offiziellen Quelle bezogen (GitHub-Release, offizielles npm-Paket) statt aus einem anderen, verwandten Projekt vendort – auch wenn eine bereits gelöste, funktionierende Kopie anderswo verfügbar wäre. Das hält die Herkunft jeder Datei nachvollziehbar und macht spätere Updates gegen dieselbe Quelle wiederholbar.&lt;/p&gt;</description></item></channel></rss>