[{"authors":[],"categories":[{"title":"Technology","url":"/de/categories/technology/"},{"title":"Digital-Radar","url":"/de/categories/digital-radar/"}],"content":" Digital Radar Zusammenfassung Die globale Technologielandschaft befindet sich an einem kritischen Wendepunkt, an dem die anfängliche Euphorie über generative künstliche Intelligenz einer pragmatischen Konsolidierung weicht. Am heutigen Tag zeichnen sich fünf zentrale Trends ab: In der künstlichen Intelligenz verschiebt sich der Fokus von gigantischen Cloud-Modellen hin zu hocheffizienten, lokalen \u0026ldquo;Small Language Models\u0026rdquo; (SLMs) und der praktischen Umsetzung des EU AI Acts. Die Cybersicherheit steht im Zeichen post-quantenkryptografischer Migrationen und der Abwehr hochkomplexer Supply-Chain-Angriffe. Im Cloud-Sektor dominiert das Streben nach digitaler Souveränität in Europa, während die DevOps-Community den Übergang von klassischem DevOps zu strukturiertem Platform Engineering vollzieht. Gleichzeitig zwingt die anhaltende Lizenzdebatte im Open-Source-Bereich Unternehmen dazu, ihre Software-Lieferketten grundlegend zu überdenken. Der heutige Bericht analysiert diese Entwicklungen, ordnet sie technologisch ein und beleuchtet ihre strategische Relevanz für Entscheider.\nKünstliche Intelligenz Der Aufstieg der Small Language Models (SLMs) und On-Device-KI Die Ära, in der die Leistungsfähigkeit von KI-Systemen ausschließlich über die Anzahl der Parameter definiert wurde, neigt sich dem Ende zu. Führende Forschungslabore und Technologiekonzerne konzentrieren sich zunehmend auf die Entwicklung kompakter, hocheffizienter Sprachmodelle (Small Language Models, SLMs). Modelle wie Microsofts Phi-3-Familie, Apples OpenELM oder die kompakteren Varianten von Mistral AI demonstrieren, dass hochgradig optimierte Modelle mit weniger als 10 Milliarden Parametern in spezifischen Aufgabenstellungen mit den Schwergewichten der GPT-4-Klasse konkurrieren können.\nDiese Entwicklung basiert auf Fortschritten bei der Datenfilterung und dem sogenannten \u0026ldquo;Knowledge Distillation\u0026rdquo;-Verfahren, bei dem kleinere Modelle systematisch von größeren Modellen trainiert werden. Dadurch wird die benötigte Rechenleistung drastisch reduziert, was die Ausführung direkt auf Endgeräten (On-Device AI) wie Smartphones, Laptops und Edge-Geräten ohne permanente Cloud-Anbindung ermöglicht.\nWarum das wichtig ist Die Verschiebung hin zu SLMs löst drei der drängendsten Probleme moderner KI-Infrastrukturen: Kosten, Latenz und Datenschutz.\nWirtschaftlichkeit: Der Betrieb gigantischer Modelle in der Cloud verursacht immense Betriebskosten (OpEx). SLMs senken die Inferenzkosten um bis zu 90 Prozent. Datenschutz und Compliance: Da Daten das Endgerät oder das lokale Unternehmensnetzwerk nicht mehr verlassen müssen, können strengste Datenschutzrichtlinien (wie die DSGVO) mühelos eingehalten werden. Dies öffnet die Tür für KI-Anwendungen in hochsensiblen Bereichen wie dem Gesundheitswesen, dem Finanzsektor und der öffentlichen Verwaltung. Unabhängigkeit: On-Device-KI funktioniert offline, was die Resilienz von Anwendungen in kritischen Infrastrukturen oder abgelegenen Gebieten drastisch erhöht. Die regulatorische Realität des EU AI Acts Mit dem fortschreitenden Inkrafttreten des EU-KI-Gesetzes (EU AI Act) stehen Unternehmen vor der Herausforderung, ihre KI-Systeme rechtssicher zu auditieren. Die Verordnung klassifiziert KI-Anwendungen nach einem risikobasierten Ansatz – von \u0026ldquo;unannehmbarem Risiko\u0026rdquo; (die verboten sind) bis hin zu \u0026ldquo;geringem Risiko\u0026rdquo;. Besonders im Fokus stehen \u0026ldquo;High-Risk\u0026rdquo;-Systeme, die in kritischen Infrastrukturen, bei der Personalrekrutierung oder in der Strafverfolgung eingesetzt werden.\nWarum das wichtig ist Der EU AI Act ist kein reines Compliance-Thema, sondern ein fundamentaler Produktentwicklungsfaktor. Unternehmen, die jetzt nicht dokumentieren, wie ihre Modelle trainiert wurden, welche Daten verwendet wurden und wie die menschliche Aufsicht (Human-in-the-Loop) gewährleistet ist, riskieren drakonische Strafen von bis zu 35 Millionen Euro oder 7 Prozent des weltweiten Jahresumsatzes. Zudem zwingt das Gesetz Entwickler zu einer \u0026ldquo;Compliance-by-Design\u0026rdquo;-Philosophie, was die Qualität und Nachvollziehbarkeit von KI-Entscheidungen langfristig verbessern wird, kurzfristig jedoch erhebliche Ressourcen bindet.\nCybersicherheit Die Ära der Post-Quanten-Kryptografie (PQC) beginnt Die Bedrohung durch den \u0026ldquo;Q-Day\u0026rdquo; – den Tag, an dem ein Quantencomputer in der Lage sein wird, heute gängige Verschlüsselungsverfahren wie RSA oder ECC zu brechen – wirft ihre Schatten voraus. Als Reaktion darauf hat das US-amerikanische National Institute of Standards and Technology (NIST) die ersten standardisierten Algorithmen für die Post-Quanten-Kryptografie (PQC) finalisiert, darunter ML-KEM (für den Schlüsselaustausch) und ML-DSA (für digitale Signaturen).\nSicherheitsbehörden weltweit, darunter das deutsche Bundesamt für Sicherheit in der Informationstechnik (BSI), drängen Unternehmen und Behörden nun zur sofortigen Migration.\nWarum das wichtig ist Auch wenn voll funktionsfähige, kryptografisch relevante Quantencomputer schätzungsweise noch fünf bis zehn Jahre entfernt sind, besteht eine unmittelbare Gefahr durch das Szenario \u0026ldquo;SNDL\u0026rdquo; (Store Now, Decrypt Later). Angreifer fangen bereits heute verschlüsselte, sensible Datenströme ab, um sie in Zukunft zu entschlüsseln. Organisationen, die geistiges Eigentum, Staatsgeheimnisse oder langfristig sensible Patientendaten verwalten, müssen ihre kryptografische Infrastruktur agil gestalten (Crypto-Agility), um bestehende Protokolle zügig durch PQC-Algorithmen zu ersetzen. Wer diesen Übergang verschläft, gefährdet die langfristige Integrität seiner Daten.\nSubtile Supply-Chain-Angriffe auf Open-Source-Repositories Der spektakuläre, im letzten Moment vereitelte Hintertür-Angriff auf das Linux-Kompressionswerkzeug xz-utils hat die Verwundbarkeit moderner Software-Lieferketten offengelegt. Aktuelle Sicherheitsberichte zeigen eine besorgniserregende Professionalisierung von Akteuren, die über Monate oder gar Jahre hinweg Vertrauen in Open-Source-Communities aufbauen (Social Engineering), um dann Schadcode in weit verbreitete Bibliotheken einzuschleusen. Betroffen sind zunehmend Paketmanager wie npm, PyPI und Cargo.\nWarum das wichtig ist Moderne Software besteht zu über 80 Prozent aus Open-Source-Komponenten. Ein erfolgreicher Angriff auf eine fundamentale Bibliothek kann Millionen von Systemen weltweit gleichzeitig kompromittieren. Dies zwingt Unternehmen dazu, von einem blinden Vertrauen in Open Source zu einem \u0026ldquo;Zero-Trust-Software-Supply-Chain\u0026rdquo;-Modell überzugehen. Werkzeuge zur Erstellung von Software Bills of Materials (SBOMs) und automatisierte Schwachstellen-Scanner sind keine optionalen Werkzeuge mehr, sondern überlebenswichtige Kernkomponenten der IT-Sicherheit.\nCloud Computing Souveräne Clouds als europäischer Standard Die Debatte um digitale Souveränität hat die Cloud-Strategien europäischer Unternehmen und Behörden fundamental verändert. Als Reaktion auf den US Cloud Act und die Dominanz der US-Hyperscaler etablieren sich zunehmend \u0026ldquo;Sovereign Cloud\u0026rdquo;-Angebote. Partnerschaften wie die zwischen der Deutschen Telekom (T-Systems) und Google Cloud oder Oracle und verschiedenen europäischen Partnern zeigen den Weg: Sie bieten die technologische Skalierbarkeit der US-Plattformen, garantieren jedoch, dass Datenhaltung, Betrieb und Support ausschließlich durch europäische Unternehmen auf europäischem Boden und unabhängig von US-Jurisdiktion erfolgen.\nWarum das wichtig ist Für stark regulierte Branchen wie das Finanzwesen, die Energieversorgung und den öffentlichen Sektor war der Weg in die Public Cloud bisher oft durch rechtliche Hürden versperrt. Souveräne Cloud-Infrastrukturen lösen dieses Dilemma. Sie ermöglichen es diesen Sektoren, moderne Cloud-Native-Technologien wie Kubernetes und Serverless-Datenbanken zu nutzen, ohne die strengen Vorgaben der DSGVO und nationaler Sicherheitsgesetze zu verletzen. Dies beschleunigt die digitale Transformation des Staates und kritischer Industrien erheblich.\nFinOps: Von der Cloud-Migration zur Kosten-Optimierung Nach Jahren des unkontrollierten Wachstums und der überhasteten Cloud-Migrationen (\u0026ldquo;Lift and Shift\u0026rdquo;) erleben wir eine Phase der Konsolidierung. FinOps (Financial Operations) – die disziplinübergreifende Praxis zur Maximierung des geschäftlichen Nutzens der Cloud durch kollaborative, datengesteuerte Entscheidungen – hat sich als Standard etabliert. Unternehmen nutzen zunehmend KI-gestützte Analysetools, um ungenutzte Instanzen zu identifizieren, Speicherklassen zu optimieren und Workloads dynamisch dorthin zu verschieben, wo Strom und Rechenleistung am günstigsten sind.\nWarum das wichtig ist In einem makroökonomisch herausfordernden Umfeld mit hohen Zinsen können es sich Unternehmen nicht mehr leisten, schätzungsweise 30 Prozent ihrer Cloud-Ausgaben für ungenutzte Ressourcen zu verschwenden. FinOps überführt die Cloud-Nutzung von einem unvorhersehbaren Kostenrisiko in eine präzise steuerbare Betriebsausgabe. Es zwingt Entwickler- und Finanzteams zu einer engeren Zusammenarbeit und sorgt dafür, dass Cloud-Ausgaben direkt mit dem geschäftlichen Erfolg korrelieren.\nDevOps Der Siegeszug des Platform Engineering Das klassische DevOps-Paradigma \u0026ldquo;You build it, you run it\u0026rdquo; stößt an seine Grenzen. Die schiere Komplexität moderner Cloud-Native-Infrastrukturen – bestehend aus Kubernetes, Service Meshes, CI/CD-Pipelines, Sicherheits-Scannern und Multi-Cloud-Umgebungen – überfordert viele Entwicklerteams. Die Folge ist kognitiver Overload und sinkende Produktivität.\nAls Antwort darauf etabliert sich Platform Engineering. Spezialisierte Plattform-Teams erstellen und warten eine \u0026ldquo;Internal Developer Platform\u0026rdquo; (IDP). Über standardisierte Portale (wie das Open-Source-Projekt Spotify Backstage) können Entwickler per Knopfdruck vorkonfigurierte, sichere und richtlinienkonforme Entwicklungsumgebungen anfordern (\u0026ldquo;Golden Paths\u0026rdquo;).\n1+--------------------------------------------------+ 2| Internal Developer Platform | 3| (Self-Service Portal / API / Golden Paths) | 4+--------------------------------------------------+ 5 | | | 6 v v v 7+--------------+ +--------------+ +--------------+ 8| Infrastructure| | CI/CD | | Security \u0026amp; | 9| (IaC / Cloud)| | Pipelines | | Monitoring | 10+--------------+ +--------------+ +--------------+ Warum das wichtig ist Platform Engineering löst den inhärenten Konflikt zwischen Entwicklungsgeschwindigkeit und IT-Governance. Entwickler werden von Infrastruktur-Details entlastet und können sich wieder auf das Schreiben von Business-Logik konzentrieren. Gleichzeitig stellt das Plattform-Team sicher, dass alle Sicherheits-, Compliance- und Budgetvorgaben standardmäßig im Hintergrund eingehalten werden. Dies führt zu schnelleren Release-Zyklen bei gleichzeitig höherer Systemstabilität.\nWebAssembly (Wasm) erobert das Backend WebAssembly (Wasm), ursprünglich entwickelt, um performanten Code im Webbrowser auszuführen, revolutioniert zunehmend das Cloud-Native-Backend. Mit der Standardisierung des WebAssembly System Interface (WASI) können Wasm-Binärdateien direkt auf Servern, in Kubernetes-Clustern oder auf Edge-Knoten ausgeführt werden. Werkzeuge wie Fermyon Spin oder das CNCF-Projekt WasmEdge ermöglichen es, extrem leichtgewichtige Microservices zu bauen.\nWarum das wichtig es Wasm-Container bieten signifikante Vorteile gegenüber klassischen Docker-Containern: Sie sind bis zu 100-mal kleiner, starten in Millisekunden (statt Sekunden) und verbrauchen im Leerlauf praktisch keine Ressourcen. Zudem sind sie durch ein striktes Sandbox-Modell standardmäßig hochgradig isoliert und sicher. Für Serverless-Architekturen und Edge-Computing-Szenarien stellt Wasm die nächste Evolutionsstufe dar, da es eine extrem dichte Ressourcenausnutzung und damit drastische Kosteneinsparungen ermöglicht.\nOpen Source Die Lizenzkrise und die Fragmentierung des Ökosystems Die Open-Source-Welt durchlebt eine Identitätskrise. Namhafte Unternehmen hinter populären Open-Source-Projekten – jüngst Redis, davor HashiCorp (Terraform) und Elastic (Elasticsearch) – haben ihre Lizenzen von permissiven Open-Source-Lizenzen (wie BSD oder Apache 2.0) auf restriktivere Lizenzen (wie die Business Source License - BSL, oder die Server Side Public License - SSPL) umgestellt. Ziel dieser Schritte ist es, die Monetarisierung ihrer Software durch große Cloud-Anbieter (insbesondere AWS) zu unterbinden, die diese Dienste als Managed Services anbieten, ohne sich angemessen an der Entwicklung zu beteiligen.\nDie Reaktion der Community folgt meist prompt in Form von Forks. So entstand als Reaktion auf die Redis-Lizenzänderung das Linux-Foundation-Projekt \u0026ldquo;Valkey\u0026rdquo;, während Terraform-Entwickler zu \u0026ldquo;OpenTofu\u0026rdquo; abwanderten.\nWarum das wichtig ist Diese Entwicklung gefährdet das jahrzehntelange Vertrauensverhältnis zwischen Unternehmen und dem Open-Source-Ökosystem. IT-Entscheider müssen die Lizenzmodelle der von ihnen eingesetzten Software genauer denn je prüfen. Ein plötzlicher Lizenzwechsel kann erhebliche rechtliche Risiken und ungeplante Migrationskosten nach sich ziehen. Die Fragmentierung führt zudem dazu, dass wertvolle Entwicklungsressourcen für die Pflege von Forks aufgewendet werden müssen, anstatt in echte Innovationen zu fließen.\nRust im Linux-Kernel: Ein Paradigmenwechsel für Systemsicherheit Die Integration von Rust als zweite offizielle Programmiersprache im Linux-Kernel (neben C) schreitet unaufhaltsam voran. Mit jedem neuen Kernel-Release werden mehr Treiber und Subsysteme in Rust neu geschrieben oder neu implementiert. Dieser Schritt, der anfangs in der traditionellen Kernel-Community auf heftigen Widerstand stieß, wird mittlerweile von den wichtigsten Distributoren und Cloud-Anbietern aktiv unterstützt.\nWarum das wichtig ist Historische Analysen zeigen, dass rund 70 Prozent aller kritischen Sicherheitslücken in Betriebssystemen auf Speicherverwaltungsfehler (Memory Safety Bugs wie Buffer Overflows oder Use-After-Free) zurückzuführen sind. Rust eliminiert diese gesamte Klasse von Programmierfehlern bereits zur Kompilierzeit durch sein striktes \u0026ldquo;Ownership\u0026rdquo;-Modell, ohne dabei die Performance-Vorteile von C einzubüßen. Die langfristige Folge ist ein fundamental stabilerer und sichererer Linux-Kernel, der das Fundament fast der gesamten weltweiten IT-Infrastruktur bildet.\nLeseempfehlungen NIST SP 800-219 (Draft): Guidelines for Migrating to Post-Quantum Cryptography. Ein unverzichtbarer Leitfaden für Sicherheitsarchitekten zur Planung der kryptografischen Transition. The State of Platform Engineering Report (Puppet): Eine empirische Untersuchung über den Reifegrad von IDPs in globalen Unternehmen und deren messbaren Einfluss auf die Entwicklerproduktivität. EU AI Act Compliance Guide (Rat der Europäischen Union): Die offizielle, detaillierte Aufschlüsselung der Pflichten für Entwickler und Betreiber von KI-Systemen je nach Risikoklasse. Valkey vs. Redis: A Technical and Architectural Deep Dive (Linux Foundation): Eine detaillierte Analyse der Performance-Unterschiede und der zukünftigen Roadmap des populären In-Memory-Datenbank-Forks. WASI 0.2: The Dawn of the Component Model (Bytecode Alliance): Ein technischer Fachartikel darüber, wie das neue Komponentenmodell von WebAssembly die Erstellung modularer, sprachübergreifender Software revolutioniert. Fazit Der heutige Blick auf das technologische Radar zeigt ein klares Bild: Die Phase des ungestümen, rein wachstumsorientierten Experimentierens ist vorbei. Effizienz, Sicherheit und regulatorische Compliance sind die neuen Leitplanken der digitalen Evolution.\nUnternehmen investieren nicht mehr blind in die größten KI-Modelle, sondern suchen nach maßgeschneiderten, kosteneffizienten und datenschutzkonformen Lösungen (SLMs). In der Infrastruktur weicht die Komplexität von DevOps strukturierten Plattformen (Platform Engineering), während WebAssembly neue Maßstäbe für Effizienz setzt. Gleichzeitig zwingen geopolitische Spannungen, die Bedrohung durch Quantencomputer und die Fragmentierung der Open-Source-Landschaft Organisationen dazu, ihre Resilienz – sei es durch Post-Quanten-Kryptografie, souveräne Clouds oder ein proaktives Lizenzmanagement – radikal zu erhöhen. Wer in dieser neuen Ära der technologischen Reife erfolgreich sein will, muss technologische Exzellenz mit strategischer Weitsicht und regulatorischer Agilität verbinden.\n","date":"20. Juli 2026","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/2026-07-20-digital-radar/","series":[{"title":"Digital-Radar","url":"/de/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/de/tags/ai/"},{"title":"Cybersecurity","url":"/de/tags/cybersecurity/"},{"title":"Cloud","url":"/de/tags/cloud/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"Open-Source","url":"/de/tags/open-source/"}],"timestamp":1784521815,"title":"Digital Radar 2026-07-20"},{"authors":[],"categories":[{"title":"Technology","url":"/de/categories/technology/"},{"title":"Quantum-Computing","url":"/de/categories/quantum-computing/"}],"content":" Quantencomputing-Status Zusammenfassung Quantencomputing ist heute eine Cloud- und Forschungsdisziplin und kein Verbraucherprodukt. IBM gibt an, dass seine Systeme in Rechenzentren mit kryogener Infrastruktur und Zugriff über die IBM Quantum Platform laufen und dass seine öffentliche Roadmap bis 2029 weiterhin auf fehlertolerante Systeme ausgerichtet ist (IBM-Hardware, IBM-Roadmap). Microsoft positioniert Azure Quantum außerdem als Cloud-Dienst für Quanten-Plus-HPC/KI-Workloads und nicht als Heimhardware (Azure Quantum).\nWo das Feld jetzt steht Der aktuelle Stand ist: Quantenprozessoren existieren, aber sie unterliegen immer noch Einschränkungen durch Rauschen, Fehlerkorrektur und Infrastruktur. Laut IBM funktionieren seine Systeme bereits in produktionsähnlichen Rechenzentrumsumgebungen und der nächste Schritt sei eine skalierbare kryogene Infrastruktur und logische Qubits (IBM-Hardware). Seine öffentliche Roadmap zielt auf kurzfristige Quantenvorteile bis Ende 2026 und den ersten großen fehlertoleranten Quantencomputer bis 2029 (IBM-Roadmap).\nWann kommen Quantencomputer bei den Verbrauchern zu Hause an? Kurze Antwort: Nicht bald. Aktuelle Maschinen erfordern kryogene Systeme, spezialisierte Rechenzentren und hybride klassische Steuerungsebenen (IBM-Hardware). Das macht einen Consumer-Quantencomputer im Laptop- oder Desktop-Stil derzeit unrealistisch. Der wahrscheinliche Weg ist zunächst mehr Cloud-Zugriff und spezialisierte Unternehmensinstallationen, nicht ein Quantencomputer im Wohnzimmer (IBM Quantum-Plattform, Azure Quantum).\nMeiner Ansicht nach ist der Heimgebrauch keine Realität der 2020er Jahre und wird wahrscheinlich erst dann plausibel, wenn sich Fehlertoleranz, Kühlung, Kosten und Zuverlässigkeit dramatisch verbessern. Kein großer Anbieter veröffentlicht heute eine Verbraucher-Roadmap.\nNeueste Durchbrüche Bei den wichtigsten jüngsten Durchbrüchen handelt es sich hauptsächlich um Meilensteine in den Bereichen Technik und Skalierung, nicht um Verbraucherhardware. IBM legt Wert auf größere Prozessorfamilien, kryogene Skalierbarkeit und den Weg zur Fehlertoleranz (IBM-Hardware). Microsoft hebt Majorana 1 auf Azure Quantum und einen Topoleiter-basierten Ansatz für Quantenchips hervor (Azure Quantum). Quantinuum gibt an, bereits mehrere Generationen von Quantensystemen kommerziell eingesetzt zu haben und verknüpft nun Quanten, HPC und KI für Unternehmens-Workloads (Quantinuum HPE-Zusammenarbeit).\nWerden Quantencomputer bereits in Produktionsumgebungen eingesetzt? Ja, aber in Nischenanwendungsfällen und meist als Hybrid-Cloud-Dienste. D-Wave beschreibt explizit „Quantum in der Produktion“ für Kunden wie Pattison Food Group und NTT DOCOMO und beschreibt auch einen Produktionspfad von der Problemerkennung bis zur Bereitstellung (Erfolgsgeschichten von D-Wave-Kunden, D-Wave-Produktionsplanung). Quantinuum gibt außerdem an, Quantensysteme kommerziell eingesetzt zu haben und mit Kunden aus den Bereichen Pharma, Materialwissenschaft, Finanzdienstleistungen, Regierung und Industrie zusammenzuarbeiten (Quantinuum HPE-Zusammenarbeit).\nDie wichtige Nuance besteht darin, dass es sich bei dieser Produktionsnutzung hauptsächlich um Optimierung, Simulation und hybride Arbeitsabläufe handelt. Es ist noch kein allgemeiner Ersatz für klassische Server.\nWerden sie für Cloud-Mainframe-Computing verwendet? Wahrscheinlich ja als Beschleuniger, nicht als Ersatz. Quanten werden wahrscheinlich neben Mainframes, HPC-Clustern und Cloud-Plattformen für bestimmte Arbeitslasten wie Optimierung und Simulation eine Rolle spielen. IBM spricht über quantenzentriertes Supercomputing und Systeme, die mehrere QPUs in einer Rechenzentrumsumgebung verbinden (IBM-Hardware). Quantinuum sagt dasselbe mit der expliziten Quanten-HPC-Integration für Unternehmens- und Industrieanwendungsfälle (Quantinuum HPE-Zusammenarbeit).\nMeine Erwartung: Quantum wird ein an die Cloud angeschlossener Co-Prozessor für sehr spezifische Probleme sein, kein eigenständiger „Quanten-Mainframe“.\nWerden sie für KI-Mainframe-Computing verwendet? Auch ja, aber als Ergänzung und nicht als Ersatz. Microsoft verknüpft Quanten direkt mit Cloud-Supercomputing und KI-Lösungen auf Azure Quantum (Azure Quantum). Das deutet auf eine Zukunft hin, in der Quantentechnologie einige KI-bezogene Optimierungs-, Simulations- und Forschungsprobleme beschleunigen kann, aber keinen direkten Ersatz für GPUs, TPUs oder klassische KI-Mainframes darstellt.\nFür die breite KI-Ausbildung bleibt vorerst klassische Hardware dominant. Quantum könnte letztendlich eine Nischenbeschleunigung bieten, aber die öffentlichen Quellen deuten noch nicht auf eine breite Produktionsrolle hin.\nFazit Quantencomputing ist real, nützlich und bereits im Einsatz, aber für den Heimgebrauch ist es noch nicht ausgereift genug. Der aktuelle Status ist Cloud-Zugriff, Unternehmenspiloten, Nischenproduktion und ein klarer Weg zur Fehlertoleranz in den nächsten Jahren (IBM-Roadmap, D-Wave-Produktionsplanung, Quantennachrichten). In einem Satz: Quantencomputer sind derzeit spezialisierte Rechenzentrums- und Cloud-Maschinen, keine Unterhaltungselektronik, und ihr größter Wert liegt derzeit in hybriden Arbeitsabläufen mit HPC und KI.\n","date":"14. Juli 2026","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/2026-07-14-quantum-computing-status/","series":[],"smallImg":"","tags":[{"title":"Quantum-Computing","url":"/de/tags/quantum-computing/"},{"title":"Cloud","url":"/de/tags/cloud/"},{"title":"Ai","url":"/de/tags/ai/"},{"title":"Hpc","url":"/de/tags/hpc/"},{"title":"Research","url":"/de/tags/research/"}],"timestamp":1784012400,"title":"Quantencomputing-Status"},{"authors":[],"categories":[{"title":"Technology","url":"/de/categories/technology/"},{"title":"Digital-Radar","url":"/de/categories/digital-radar/"}],"content":" Digitales Radar Zusammenfassung Die heutige Technologielandschaft ist durch einen Übergang von experimentellen Implementierungen zu strukturellen, architektonischen Veränderungen geprägt. Im Bereich der künstlichen Intelligenz bewegt sich die Branche schnell über passive Chat-Schnittstellen hinaus hin zu „agentischen“ Systemen, die in der Lage sind, autonom auszuführen und zu argumentieren. Dieser Wandel stellt neue Anforderungen an die Cloud-Infrastruktur und veranlasst Cloud-Anbieter dazu, kundenspezifische Siliziumbereitstellungen zu erweitern und lokalisierte, souveräne Cloud-Umgebungen einzurichten, um strenge globale Compliance-Standards zu erfüllen.\nGleichzeitig ist die Cybersicherheitslandschaft mit systemischen Bedrohungen konfrontiert, die auf die Edge-Netzwerkinfrastruktur abzielen, was Bundesbehörden dazu veranlasst, auf einen grundlegenden Übergang zu speichersicheren Programmiersprachen zu drängen. Im Infrastrukturbereich reift DevOps zu hochstrukturierten Plattform-Engineering-Frameworks heran, die durch fortschrittliche Observability-Standards wie OpenTelemetry unterstützt werden. Schließlich beweist das Open-Source-Ökosystem seine Widerstandsfähigkeit, da Community-Projekte wie Valkey im Zuge der Verschiebungen bei der Unternehmenslizenzierung die Unterstützung der Industrie festigen. Dieser Bericht analysiert diese entscheidenden Entwicklungen und untersucht ihre technischen Grundlagen und langfristigen Auswirkungen auf das Unternehmen.\nKünstliche Intelligenz Der Wandel zu agentischer KI und Argumentationsmodellen Das Paradigma der generativen künstlichen Intelligenz befindet sich in einer grundlegenden Weiterentwicklung. Während sich die anfängliche Welle der Einführung von KI in Unternehmen auf Retrieval-Augmented Generation (RAG) und Konversationsassistenten konzentrierte, hat sich die aktuelle Grenze hin zu „agentischen“ Arbeitsabläufen und begründungsorientierten Modellen verschoben. Dieser Übergang wird durch zwei wichtige technische Entwicklungen hervorgehoben: die Veröffentlichung von Argumentationsmodellen, die Reinforcement Learning nutzen, um vor der Reaktion eine Gedankenkettenverarbeitung durchzuführen, und die Einführung von Entwickler-APIs, die es Modellen ermöglichen, direkt mit Computerbetriebssystemen zu interagieren.\nHerkömmliche Large-Language-Modelle (LLMs) arbeiten mit der Vorhersage des nächsten Tokens und erzeugen fast augenblicklich Antworten, haben jedoch Probleme mit der komplexen, mehrstufigen Logik. Neuere Argumentationsmodelle wie die o1-Serie von OpenAI weisen Rechenzeit am Punkt der Schlussfolgerung zu, um interne Gedankenkettenprozesse auszuführen. Dies ermöglicht es dem Modell, sich selbst zu korrigieren, Hypothesen zu testen und komplexe mathematische, wissenschaftliche oder Programmierprobleme aufzuschlüsseln, bevor es eine Antwort präsentiert.\nGleichzeitig haben Anbieter wie Anthropic die Möglichkeit zur „Computernutzung“ in ihre Modelle eingeführt (z. B. Claude 3.5 Sonnet). Diese Technologie ermöglicht es einem KI-Agenten, eine Standard-Desktop-Umgebung wahrzunehmen, einen Cursor zu bewegen, auf Schaltflächen zu klicken und Text einzugeben und so die menschliche Interaktion mit Softwareschnittstellen effektiv nachzuahmen.\n1[User Goal] 2 │ 3 ▼ 4[Reasoning Engine] ──(Internal Chain-of-Thought / Self-Correction) 5 │ 6 ▼ 7[Agentic Executor] ──(Interacts with APIs, Databases, \u0026amp; UI Elements) 8 │ 9 ▼ 10[Completed Workflow] Warum es wichtig ist Dieser Wandel vom passiven Informationsabruf zur aktiven Aufgabenausführung verändert die wirtschaftlichen und betrieblichen Berechnungen der Unternehmensautomatisierung grundlegend.\nErstens reduzieren Argumentationsmodelle die Fehlerraten in hochkomplexen Bereichen wie Softwareentwicklung, Finanzmodellierung und Rechtsanalyse drastisch. Durch systematisches Durchdenken von Problemen können diese Modelle Code generieren und Dokumente mit einer Präzision analysieren, die zuvor mit Standard-LLMs nicht erreichbar war.\nZweitens ermöglichen Agentenfunktionen Unternehmen die Automatisierung von End-to-End-Workflows statt isolierter Aufgaben. Ein KI-Agent kann jetzt damit beauftragt werden, Daten aus einer alten Datenbank abzurufen, sie in einer Tabelle zu formatieren, sie mit einer externen API zu vergleichen und eine Zusammenfassung per E-Mail an einen Beteiligten zu senden – alles ohne menschliches Eingreifen.\nDiese Autonomie bringt jedoch erhebliche Herausforderungen in Bezug auf Sicherheit und Zuverlässigkeit mit sich. Unternehmen müssen nun robuste Schutzmaßnahmen entwickeln, um zu verhindern, dass autonome Agenten unbefugte Aktionen ausführen, Opfer von Prompt-Injection-Angriffen werden oder kaskadierende Fehler in Produktionsumgebungen erzeugen.\nCybersicherheit Edge-Infrastruktur-Targeting und das Speichersicherheitsmandat Die Perimetersicherheit von Unternehmen steht unter anhaltendem Druck. Hochentwickelte Bedrohungsakteure, darunter staatlich geförderte Advanced Persistent Threats (APTs), umgehen zunehmend traditionelle Endpoint Detection and Response (EDR)-Systeme, indem sie auf Edge-Netzwerkgeräte abzielen. Schwachstellen in virtuellen privaten Netzwerken (VPNs), Firewalls und Application Delivery Controllern großer Anbieter wurden aktiv ausgenutzt, um ersten Zugriff auf Unternehmensnetzwerke zu erhalten.\nAls Reaktion auf diese anhaltenden Schwachstellen hat die Cybersecurity and Infrastructure Security Agency (CISA) gemeinsam mit internationalen Partnern ihre „Secure by Design“-Kampagne intensiviert. Eine zentrale Säule dieser Initiative ist die Beseitigung von Sicherheitslücken im Speicher – wie Pufferüberläufe, Use-after-Free-Fehler und Speicherlecks –, die in der Vergangenheit für über 70 % der Zero-Day-Exploits in Low-Level-Software verantwortlich waren. CISA fordert Softwarehersteller dazu auf, ihre Codebasen von speicherunsicheren Sprachen wie C und C++ auf speichersichere Alternativen wie Rust, Go und Java umzustellen.\nWarum es wichtig ist Die gezielte Bekämpfung von Edge-Geräten stellt einen strategischen Wandel in der Cyberspionage und Cyberkriminalität dar. Da sich Firewalls und VPN-Gateways am Rand des Netzwerks befinden, können sie häufig keine Sicherheitsagenten oder Endpunktüberwachungstools von Drittanbietern ausführen. Dies macht sie zu idealen toten Winkeln für Angreifer, um dort Persistenz aufzubauen. Wenn eine Schwachstelle in einem Edge-Gerät ausgenutzt wird, können sich Angreifer unbemerkt über das interne Netzwerk ausbreiten. Der aggressive Vorstoß der CISA zur Speichersicherheit ist von Bedeutung, da sie die Grundursache dieser Schwachstellen angeht, anstatt die Symptome zu behandeln. Seit Jahrzehnten verlässt sich die Softwareindustrie auf einen reaktiven Zyklus von Patches und der Offenlegung von Schwachstellen. Durch die Umstellung kritischer Infrastruktur-Codebasen auf speichersichere Sprachen wie Rust werden ganze Klassen von Schwachstellen zur Kompilierungszeit beseitigt.\nFür Unternehmenseinkäufer wird dieser Wandel zunehmend Einfluss auf die Beschaffungsstrategien haben. Unternehmen werden anfangen, Software-Stücklisten (SBOMs) zu fordern, die nicht nur Open-Source-Abhängigkeiten, sondern auch die Programmiersprachen, die zum Aufbau kritischer Netzwerkgeräte verwendet werden, detailliert beschreiben, und dabei Anbietern den Vorzug geben, die sich für speichersichere Architekturen engagieren.\nCloud Computing Sovereign Clouds und die Verbreitung von kundenspezifischem Silizium Die Cloud-Computing-Landschaft fragmentiert nach geopolitischen und architektonischen Gesichtspunkten. Hyperscaler – insbesondere Amazon Web Services (AWS), Microsoft Azure und Google Cloud Platform (GCP) – müssen sich gleichzeitig zwei Herausforderungen stellen: der Nachfrage nach lokaler Datensouveränität und den steigenden Kosten der Infrastruktur für künstliche Intelligenz.\nUm regulatorischen Anforderungen gerecht zu werden, insbesondere innerhalb der Europäischen Union im Rahmen der NIS2-Richtlinie und der DSGVO, erweitern Cloud-Anbieter ihre „Sovereign Cloud“-Angebote rasch. Diese Umgebungen sind physisch, betrieblich und logisch von globalen Cloud-Regionen isoliert. Sie werden ausschließlich von einheimischen Bürgern betrieben, die sich strengen Sicherheitsüberprüfungen unterziehen, um sicherzustellen, dass ausländische Gerichtsbarkeiten nicht auf hoheitliche Daten zugreifen oder deren Offenlegung erzwingen können.\nGleichzeitig erlebt die Hardwareschicht der Cloud eine Revolution. Um die hohen Kosten und Lieferengpässe zu mildern, die mit der dominanten GPU-Architektur von Nvidia einhergehen, investieren Hyperscaler stark in kundenspezifisches Silizium. AWS setzt seine Trainium2- und Graviton4-Prozessoren ein, Google erweitert seine Tensor Processing Unit (TPU) v5p-Cluster und Microsoft skaliert seine Maia 100 KI-Beschleuniger.\n1┌───────────────────────────────────────────────────────────┐ 2│ Enterprise Cloud Strategy │ 3└─────────────────────────────┬─────────────────────────────┘ 4 │ 5 ┌───────────────┴───────────────┐ 6 ▼ ▼ 7┌───────────────────────────┐ ┌───────────────────────────┐ 8│ Sovereign Cloud │ │ Custom Silicon │ 9├───────────────────────────┤ ├───────────────────────────┤ 10│ • Localized Operations │ │ • Lower Compute TCO │ 11│ • NIS2 \u0026amp; GDPR Compliance │ │ • Reduced GPU Dependency │ 12│ • Data Residency Isolation│ │ • Optimized AI Workloads │ 13└───────────────────────────┘ └───────────────────────────┘ Warum es wichtig ist Der Aufstieg souveräner Wolken stellt das Ende des grenzenlosen Internetideals dar. Für multinationale Konzerne ist die Datenverwaltung keine rein technische, sondern eine komplexe geopolitische Herausforderung mehr. Unternehmen müssen multiregionale Architekturen entwerfen, die Daten auf der Grundlage lokaler Aufenthaltsgesetze dynamisch weiterleiten und speichern, andernfalls riskieren sie schwere behördliche Strafen.\nUnterdessen demokratisiert der Einsatz von kundenspezifischem Silizium den Zugang zum Hochleistungsrechnen. Durch die Entwicklung eigener Chips können Hyperscaler die Hardware für bestimmte Cloud-Workloads optimieren und so Unternehmen ein besseres Preis-Leistungs-Verhältnis bieten.\nFür KI-Workloads stellt kundenspezifischer Silizium eine entscheidende Alternative zum Hardware-Monopol von Nvidia dar und senkt die Gesamtbetriebskosten (TCO) für das Training und die Bereitstellung groß angelegter Modelle. Unternehmen, die ihre Software-Stacks so anpassen, dass sie auf alternativen Architekturen (wie AWS Trainium oder Google TPUs) laufen, können sich einen erheblichen Wettbewerbsvorteil beim Infrastrukturkostenmanagement verschaffen.\nDevOps Plattform-Engineering-Reife und OpenTelemetry-Standardisierung Die DevOps-Bewegung erfährt eine strukturelle Verfeinerung. Die traditionelle Philosophie „Sie erstellen es, Sie führen es aus“ überforderte Softwareentwickler häufig mit der Komplexität der Infrastruktur, was zu kognitiver Überlastung und Bereitstellungsengpässen führte. Um dieses Problem zu lösen, stellen Unternehmen auf Plattform-Engineering um und richten spezielle Teams für den Aufbau interner Entwicklerplattformen (IDPs) ein.\nDiese IDPs bieten Self-Service-Funktionen, die es Entwicklern ermöglichen, Infrastruktur bereitzustellen, Code bereitzustellen und Datenbanken über standardisierte Vorlagen und APIs zu verwalten. Dieser Trend steht in engem Zusammenhang mit der Reife von Kubernetes, das sich von einem komplexen Orchestrierungstool zur unsichtbaren Steuerungsebene moderner Unternehmensinfrastruktur entwickelt hat.\nParallel dazu hat sich OpenTelemetry (OTel) zum unbestrittenen Industriestandard für Cloud-native Observability entwickelt. Das von der Cloud Native Computing Foundation (CNCF) gehostete Projekt hat sich über verteiltes Tracing und Metriken hinaus auf standardisierte Profilerstellung ausgeweitet. Dies ermöglicht es Unternehmen, umfassende Laufzeitleistungsdaten in heterogenen Umgebungen zu sammeln, ohne den Quellcode der Anwendung zu ändern.\nWarum es wichtig ist Plattform-Engineering ist wichtig, weil es sich direkt mit der Entwicklergeschwindigkeit und dem Betriebsrisiko befasst. Durch die Abstraktion der Komplexität von Kubernetes, Cloud-APIs und Sicherheitskonfigurationen in einem zentralen IDP können Unternehmen die Onboarding-Zeiten drastisch verkürzen und die Softwarebereitstellung beschleunigen. Entscheidend ist, dass diese Abstraktion die Sicherheit nicht umgeht; Stattdessen werden Sicherheits-, Compliance- und Kostenkontrollleitlinien direkt in die Plattformvorlagen integriert, um sicherzustellen, dass Entwickler standardmäßig sichere Konfigurationen verwenden. Die Standardisierung von OpenTelemetry ist ebenso transformativ. In der Vergangenheit waren Unternehmen an proprietäre Überwachungsagenten gebunden, was den Wechsel des Observability-Anbieters unerschwinglich teuer machte.\nMit OpenTelemetry ist die Datenerfassung von der Datenanalyse entkoppelt. Unternehmen können ihre Anwendungen einmal instrumentieren und Telemetriedaten an jedes analytische Backend weiterleiten. Durch die Hinzufügung von Profiling zum OTel-Standard können Ingenieurteams präzise CPU- und Speicherengpässe in der Produktion identifizieren, was sich direkt in optimierten Cloud-Ausgaben und einer verbesserten Anwendungsleistung niederschlägt.\nOpen Source Die Valkey-Konsolidierung und die Entwicklung von Rust unter Linux Das Open-Source-Ökosystem durchlebt eine Zeit der Lizenzvolatilität und der Modernisierung der Architektur. Die bedeutendste jüngste Entwicklung ist die schnelle Konsolidierung von Valkey, einem Open-Source-Hochleistungs-Schlüsselwert-Datenspeicher. Valkey wurde unter der Schirmherrschaft der Linux Foundation als direkte Reaktion auf die Umstellung der Kernsoftware von Redis von der Open-Source-BSD-Lizenz auf restriktive, nicht-Open-Source-Lizenzen (RSALv2 und SSPLv1) erstellt.\nMit der Unterstützung von Branchenriesen wie AWS, Google, Oracle, Ericsson und Heroku hat Valkey schnell die Funktionsgleichheit mit Redis erreicht und in Version 8.0 wichtige Leistungsverbesserungen veröffentlicht. Diese schnelle Mobilisierung zeigt die kollektive Kraft des Cloud-Ökosystems, Open-Source-Alternativen aufrechtzuerhalten, wenn proprietäre Veränderungen nachgelagerte Projekte gefährden.\nGleichzeitig schreitet die Integration von Rust in den Linux-Kernel weiter voran, wenn auch inmitten kultureller und technischer Debatten. Kernel-Version 6.12 und kommende Versionen bieten erweiterte Unterstützung für Rust-basierte Gerätetreiber und Kernsubsysteme. Diese Initiative zielt darauf ab, die Speichersicherheit auf die untersten Ebenen des Betriebssystems zu bringen und so das Risiko von Exploits auf Kernel-Ebene zu verringern.\n1[Redis License Shift (RSALv2/SSPLv1)] 2 │ 3 ▼ 4[Linux Foundation Intervenes] 5 │ 6 ▼ 7[Valkey Project Established] ──(Backed by AWS, GCP, Oracle, etc.) 8 │ 9 ▼ 10[Valkey 8.0 Released] ──(Production-Ready, Open-Source BSD License) Warum es wichtig ist Das Valkey-Phänomen ist ein Wendepunkt für die Open-Source-Governance. Dies beweist, dass die Branche schnell koordinieren kann, um eine Open-Source-Alternative abzuspalten, zu warten und zu optimieren, wenn die Lizenz einer kritischen Infrastruktursoftware geändert wird, um die kommerzielle Nutzung einzuschränken. Für IT-Führungskräfte in Unternehmen bietet Valkey einen nahtlosen Migrationspfad, der eine Anbieterbindung und unerwartete Lizenzgebühren vermeidet und die Rentabilität von Community-verwalteter Software stärkt.\nDie fortlaufende Integration von Rust in den Linux-Kernel ist eine langfristige Herausforderung für die Stabilität und Sicherheit des Betriebssystems. Während der Übergang auf den Widerstand traditioneller C-Entwickler stößt, die sich Sorgen um die Komplexität der Toolchain und die Kompilierungsgeschwindigkeit machen, sind die Sicherheitsvorteile unbestreitbar.\nMit zunehmender Verbreitung von Rust-Treibern wird die Häufigkeit kritischer Kernel-Panics und Sicherheitslücken bei der Rechteausweitung abnehmen. Dadurch wird sichergestellt, dass das grundlegende Betriebssystem, das die weltweite Cloud-Infrastruktur, Edge-Geräte und Supercomputer antreibt, von Natur aus widerstandsfähiger wird.\nEmpfohlene Lektüre Agentische KI-Sicherheits- und Governance-Frameworks: Eine Untersuchung der neuen Sicherheitsstandards, die für die Verwaltung autonomer KI-Agenten in Unternehmensnetzwerken erforderlich sind. CISAs Memory-Safe Roadmap-Fortschrittsbericht: Ein detaillierter Blick darauf, wie Bundesbehörden und Softwareanbieter ihren Übergang weg von C/C++-Codebasen verfolgen. Die Auswirkungen der NIS2-Richtlinie auf Cloud-Architekturen: Ein umfassender Leitfaden zu Compliance-Anforderungen für Organisationen, die kritische Infrastrukturen innerhalb der Europäischen Union betreiben. Entkopplung der Beobachtbarkeit mit OpenTelemetry: Ein technischer tiefer Einblick in die Implementierung von OTel-Collector-Pipelines, um eine Anbieterbindung zu vermeiden und die Datenspeicherkosten zu optimieren. Migration von Redis zu Valkey: Ein praktischer Migrationsleitfaden mit detaillierten Leistungsbenchmarks, API-Kompatibilität und Bereitstellungsstrategien für Unternehmensumgebungen. Fazit Die in diesem Bericht analysierten Entwicklungen verdeutlichen einen klaren Trend: Die Technologiebranche priorisiert Stabilität, Sicherheit und strukturelle Reife gegenüber rohem, uneingeschränktem Wachstum. Der Übergang zur agentischen KI erfordert robuste Governance-Frameworks, um autonome Arbeitsabläufe sicher zu verwalten. Die Cybersicherheit verlagert sich vom reaktiven Patchen zum proaktiven Architekturdesign durch speichersichere Programmierung.\nIn der Cloud erzwingen geopolitische Realitäten eine Verlagerung hin zu einer lokalisierten, souveränen Infrastruktur, während der wirtschaftliche Druck die Einführung kundenspezifischer Silizium vorantreibt. Schließlich zeigen Plattform-Engineering und Open-Source-Initiativen wie Valkey, dass die Branche aktiv nachhaltige, skalierbare Systeme aufbaut, die sowohl der technischen Komplexität als auch der Marktvolatilität standhalten. Unternehmen, die ihre Strategien an diesen grundlegenden Veränderungen ausrichten, sind gut aufgestellt, um die Komplexität der modernen digitalen Landschaft zu meistern.\n","date":"14. Juli 2026","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/2026-07-14-digital-radar/","series":[{"title":"Digital-Radar","url":"/de/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/de/tags/ai/"},{"title":"Cybersecurity","url":"/de/tags/cybersecurity/"},{"title":"Cloud","url":"/de/tags/cloud/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"Open-Source","url":"/de/tags/open-source/"}],"timestamp":1784005042,"title":"Digitales Radar 14.07.2026"},{"authors":[],"categories":[{"title":"Technology","url":"/de/categories/technology/"},{"title":"Digital-Radar","url":"/de/categories/digital-radar/"}],"content":" Digitales Radar Zusammenfassung Die heutige Technologielandschaft ist durch einen Übergang von der experimentellen Umsetzung zur Strukturoptimierung geprägt. Im Bereich der künstlichen Intelligenz verlagert sich die Branche weg von einfachen, auf Eingabeaufforderungen basierenden Interaktionen hin zu autonomen Arbeitsabläufen mit mehreren Agenten und hocheffizienten Small Language Models (SLMs), die für den Edge-Einsatz konzipiert sind. Diese architektonische Entwicklung spiegelt sich in den Cloud- und DevOps-Sektoren wider, wo kundenspezifisches Silizium- und Plattform-Engineering die kognitive Belastung der Entwickler reduziert und gleichzeitig die steigenden Infrastrukturkosten optimiert.\nGleichzeitig steht die Cybersicherheitslandschaft vor einer doppelten Herausforderung: Sie muss sich durch die Einführung neu festgelegter kryptografischer Standards auf die langfristige Bedrohung durch Quantencomputing vorbereiten und sich gleichzeitig gegen unmittelbare, sehr gezielte Ransomware-Kampagnen verteidigen, die auf die Virtualisierungsinfrastruktur abzielen. Unterdessen durchläuft die Open-Source-Community eine strukturelle Neuausrichtung, die durch eine Gegenreaktion der Unternehmen gegen Lizenzänderungen und eine konzertierte Anstrengung gekennzeichnet ist, speichersichere Sprachen in den Kern moderner Betriebssysteme zu integrieren. Dieser Bericht analysiert diese entscheidenden Entwicklungen und erläutert ihre technischen Grundlagen und umfassenderen geschäftlichen Auswirkungen.\nKünstliche Intelligenz Der Wandel hin zu agentenbasierten KI-Workflows Das Paradigma der generativen künstlichen Intelligenz befindet sich in einem grundlegenden Wandel. Während sich die anfängliche Welle der KI-Einführung in Unternehmen auf Einzelprompt-Interaktionen mit Large Language Models (LLMs) – wie Chatbots und einfachen Dokumentenzusammenfassungen – konzentrierte, bewegt sich die Branche schnell in Richtung „agentischer“ Arbeitsabläufe. Diese Systeme nutzen mehrere spezialisierte KI-Agenten, die zusammenarbeiten, externe Tools verwenden, mehrstufige Argumentationsketten ausführen und sich ohne kontinuierliches menschliches Eingreifen selbst korrigieren.\nIm Gegensatz zu statischen Prompt-and-Response-Modellen ermöglichen Agenten-Frameworks (wie LangGraph, CrewAI und Microsoft AutoGen), dass Modelle komplexe Ziele in diskrete Aufgaben zerlegen. Beispielsweise kann ein mit der Marktforschung beauftragtes Agentensystem autonom eine Suchabfrage schreiben, die abgerufenen Dokumente analysieren, Informationslücken identifizieren, Folgeabfragen durchführen, die Ergebnisse in einem Bericht zusammenfassen und die Ausgabe gemäß einer bestimmten Vorlage formatieren.\nWarum es wichtig ist Agentische KI stellt den Übergang von KI als Assistent zu KI als autonomem Kollaborateur dar. Für Unternehmen erhöht dies den ROI von KI-Investitionen dramatisch. Anstatt nur Texte zu verfassen, können Agentensysteme komplexe, durchgängige Geschäftsprozesse automatisieren, wie etwa automatisiertes Software-Debugging, Eskalationsbearbeitung beim Kundensupport und Finanzprüfungen. Diese Verschiebung bringt jedoch neue Herausforderungen in Bezug auf Beobachtbarkeit, Vorhersagbarkeit und Sicherheit mit sich, da autonome Agenten auftauchende Verhaltensweisen zeigen oder in Endlosschleifen geraten können, wenn sie nicht ordnungsgemäß durch strenge Leitplanken eingeschränkt werden.\nDer Aufstieg leistungsstarker kleiner Sprachmodelle (SLMs) Während Spitzenmodelle wie GPT-4 und Claude 3.5 Sonnet weiterhin die Grenzen der Leistungsfähigkeit verschieben, findet am anderen Ende des Spektrums eine parallele Revolution statt. Hochoptimierte Small Language Models (SLMs), die typischerweise zwischen 1 und 9 Milliarden Parametern umfassen, erreichen Leistungsniveaus, die mit viel größeren Modellen von noch vor einem Jahr mithalten können. Aktuelle Veröffentlichungen wie Phi-3 von Microsoft, NeMo von Mistral und Llama 3 8B von Meta zeigen, dass architektonische Verfeinerungen und hochwertige Trainingsdaten wichtiger sind als die bloße Anzahl von Parametern.\nDiese Modelle sind für den effizienten Betrieb auf Consumer-Hardware, Mobilgeräten und Edge-Servern konzipiert. Durch den Einsatz von Techniken wie Quantisierung (Reduzierung der Präzision von Modellgewichten) und spekulativer Dekodierung können Entwickler diese Modelle mit minimalem Speicherbedarf und extrem geringer Latenz bereitstellen.\nWarum es wichtig ist Die Verbreitung leistungsfähiger SLMs demokratisiert die KI, indem sie die finanziellen und infrastrukturellen Eintrittsbarrieren senkt. Unternehmen können diese Modelle lokal ausführen, wodurch die hohen API-Kosten und Latenzzeiten entfallen, die mit in der Cloud gehosteten LLMs verbunden sind. Darüber hinaus berücksichtigt die lokale Bereitstellung kritische Datenschutz- und Compliance-Bedenken, da sensible Kunden- oder proprietäre Daten niemals das lokale Netzwerk verlassen. Dies macht SLMs äußerst attraktiv für Branchen wie das Gesundheitswesen, das Finanzwesen und die Verteidigung, in denen die Datensouveränität von größter Bedeutung ist.\nCybersicherheit NIST finalisiert Post-Quantum-Kryptographie-Standards Das National Institute of Standards and Technology (NIST) hat seine ersten Verschlüsselungsalgorithmen offiziell fertiggestellt, die Angriffen künftiger Quantencomputer standhalten sollen. Zu den veröffentlichten Standards gehören ML-KEM (ehemals Kyber) für allgemeine Verschlüsselung sowie ML-DSA (ehemals Dilithium) und FN-DSA (ehemals Falcon) für digitale Signaturen.\nQuantencomputer nutzen die Prinzipien der Superposition und Verschränkung, um komplexe mathematische Probleme – wie die Faktorisierung ganzer Zahlen und diskrete Logarithmen – exponentiell schneller als klassische Supercomputer zu lösen. Diese Fähigkeit droht weit verbreitete kryptografische Systeme, einschließlich RSA und Elliptic Curve Cryptography (ECC), völlig überflüssig zu machen.\n1+-----------------------------------------------------------------+ 2| NIST Post-Quantum Cryptography Standards | 3+---------------------------------+-------------------------------+ 4| Algorithm Name | Primary Use Case | 5+---------------------------------+-------------------------------+ 6| ML-KEM (formerly Kyber) | General Encryption / Key Exch.| 7| ML-DSA (formerly Dilithium) | Digital Signatures | 8| FN-DSA (formerly Falcon) | Digital Signatures (Compact) | 9+---------------------------------+-------------------------------+ Warum es wichtig ist Während ein kryptografisch relevanter Quantencomputer (CRQC) möglicherweise noch Jahre entfernt ist, ist die Bedrohung aufgrund der Strategien „Jetzt ernten, später entschlüsseln“ unmittelbar. Adversaries are actively intercepting and storing encrypted high-value data today, intending to decrypt it once quantum technology matures. Unternehmen müssen sofort mit der Prüfung ihrer kryptografischen Ressourcen beginnen und ihre Migration zur Post-Quantenkryptografie (PQC) planen. Die Umstellung von Altsystemen auf diese neuen Algorithmen wird ein mehrjähriger Aufwand sein, der erhebliche Änderungen an Softwarearchitekturen, Netzwerkprotokollen und Hardware-Sicherheitsmodulen (HSMs) erfordert.\nHypervisor-gezielte Ransomware-Kampagnen Cyberkriminelle umgehen zunehmend die Abwehrmaßnahmen einzelner Endpunkte, um die Virtualisierungsinfrastruktur direkt anzugreifen. Ransomware-Gruppen, beispielsweise diejenigen, die LockBit-, Akira- und BlackBasta-Varianten einsetzen, zielen speziell auf VMware ESXi und andere Linux-basierte Hypervisoren ab.\nDurch die Ausnutzung von Schwachstellen in Hypervisor-Verwaltungsschnittstellen oder die Verwendung kompromittierter Administratoranmeldeinformationen erhalten Angreifer Zugriff auf die zugrunde liegenden Bare-Metal-Server. Sobald sie drinnen sind, setzen sie spezielle Ransomware-Payloads ein, die darauf ausgelegt sind, die Festplattendateien der virtuellen Maschine (VMDKs) direkt zu verschlüsseln und so Dutzende oder Hunderte von virtualisierten Servern in einer einzigen Aktion effektiv zu deaktivieren.\nWarum es wichtig ist Die gezielte Ausrichtung auf den Hypervisor maximiert den Einfluss von Ransomware-Betreibern. Anstatt sich die Zeit zu nehmen, einzelne Betriebssysteme einzeln zu kompromittieren und zu verschlüsseln, können Angreifer innerhalb von Minuten eine gesamte Unternehmensinfrastruktur lahmlegen. Dieser Ansatz umgeht auch herkömmliche EDR-Agenten (Endpoint Detection and Response), die normalerweise innerhalb der Gastbetriebssysteme und nicht auf dem Hypervisor selbst ausgeführt werden. Unternehmen müssen ihre Virtualisierungsverwaltungsebenen sichern, eine strikte Netzwerksegmentierung durchsetzen, Multi-Faktor-Authentifizierung (MFA) für den Hypervisor-Zugriff implementieren und sicherstellen, dass Backups in unveränderlichen Umgebungen mit Luftspalten gespeichert werden.\nCloud Computing Das maßgeschneiderte Silicon-Wettrüsten Die großen Hyperscale-Cloud-Anbieter – Amazon Web Services (AWS), Microsoft Azure und Google Cloud Platform (GCP) – erweitern ihre maßgeschneiderten Silizium-Portfolios rasch. AWS hat seine Graviton4-Prozessoren auf den Markt gebracht, Google erweitert die Verfügbarkeit seiner Arm-basierten Axion-Prozessoren und Microsoft stellt seine Cobalt 100-CPUs bereit.\nIn der Vergangenheit setzten Cloud-Anbieter fast ausschließlich auf x86-Prozessoren von Intel und AMD. Durch die Entwicklung eigener benutzerdefinierter Chips auf Basis der Arm-Architektur können Hyperscaler Silizium für bestimmte Cloud-Workloads wie Microservices, Datenbanken und Inferenzen für maschinelles Lernen optimieren.\n1+-----------------------------------------------------------------+ 2| Hyperscaler Custom Arm-Based Silicon | 3+-------------------+---------------------------------------------+ 4| Cloud Provider | Custom Silicon Family | 5+-------------------+---------------------------------------------+ 6| AWS | Graviton4 | 7| Google Cloud | Axion | 8| Microsoft Azure | Cobalt 100 | 9+-------------------+---------------------------------------------+ Warum es wichtig ist Mit maßgeschneidertem Silizium können Cloud-Anbieter ihre Abhängigkeit von traditionellen Chipherstellern überwinden und erhalten so eine bessere Kontrolle über ihre Lieferketten und Gewinnmargen. Für Kunden bieten diese maßgeschneiderten Chips ein deutlich besseres Preis-Leistungs-Verhältnis – oft liefern sie bis zu 30 % bis 40 % mehr Leistung pro Watt im Vergleich zu entsprechenden x86-Instanzen. Darüber hinaus ist die überlegene Energieeffizienz von Arm-basierten Prozessoren von entscheidender Bedeutung für Cloud-Anbieter, die angesichts des energiehungrigen KI-Booms ehrgeizige Nachhaltigkeits- und CO2-Reduktionsziele erreichen möchten.\nSouveräne Cloud-Infrastruktur gewinnt an Dynamik Aufgrund geopolitischer Spannungen, strenger Datenschutzbestimmungen (wie DSGVO und Schrems II) und nationaler Sicherheitsbedenken steigt die Nachfrage nach souveräner Cloud-Infrastruktur. Regierungen und stark regulierte Branchen lehnen standardmäßige öffentliche Cloud-Bereitstellungen zunehmend ab und setzen stattdessen auf lokalisierte, souveräne Cloud-Lösungen.\nAls Reaktion darauf schließen sich Hyperscaler mit lokalen Telekommunikationsunternehmen und inländischen IT-Anbietern zusammen, um isolierte Cloud-Regionen aufzubauen. Diese „souveränen Clouds“ garantieren, dass alle Daten, Metadaten und Betriebssysteme innerhalb einer bestimmten Landesgrenze bleiben und ausschließlich von lokalem Personal verwaltet werden, das über die entsprechenden Sicherheitsfreigaben verfügt.\nWarum es wichtig ist Souveräne Clouds lösen das Spannungsverhältnis zwischen den betrieblichen Vorteilen des Public Cloud Computing und den rechtlichen Anforderungen der nationalen Datensouveränität. Sie verhindern den Zugriff ausländischer Regierungen auf sensible Daten durch extraterritoriale Rechtsmechanismen (wie den US CLOUD Act). Da sich die Gesetze zur digitalen Souveränität weltweit verschärfen, müssen Unternehmen, die über mehrere Gerichtsbarkeiten hinweg tätig sind, multiregionale, souverän konforme Cloud-Architekturen einführen, um schwere rechtliche Strafen und Betriebsunterbrechungen zu vermeiden.\nDevOps Plattform-Engineering und der Aufstieg interner Entwicklerplattformen (IDPs) Das traditionelle DevOps-Modell „Sie bauen es, Sie führen es aus“ entwickelt sich weiter. Obwohl es dazu gedacht ist, Entwicklern mehr Möglichkeiten zu bieten, hat es oft zu einer kognitiven Überlastung geführt, sodass Softwareentwickler neben ihren Kernaufgaben im Bereich Codierung auch komplexe Infrastrukturkonzepte, Kubernetes-Konfigurationen und CI/CD-Pipelines beherrschen müssen. Um dieses Problem anzugehen, setzen Unternehmen auf Platform Engineering.\nPlattform-Engineering-Teams erstellen und warten interne Entwicklerplattformen (IDPs). Diese Plattformen bieten Self-Service-Funktionen und ermöglichen Entwicklern die Bereitstellung von Datenbanken, die Konfiguration von Umgebungen und die Bereitstellung von Anwendungen über standardisierte Golden-Path-Vorlagen. Das Ziel besteht darin, die zugrunde liegende Infrastrukturkomplexität zu abstrahieren und gleichzeitig Sicherheit, Compliance und betriebliche Best Practices standardmäßig durchzusetzen.\n1+-----------------------------------------------------------------+ 2| Traditional DevOps vs. Platform Engineering | 3+-----------------------------------------------------------------+ 4| Traditional DevOps: | 5| [Developer] ---\u0026gt; [Kubernetes, Terraform, CI/CD, Security] | 6| (High cognitive overload, fragmented workflows) | 7| | 8| Platform Engineering: | 9| [Developer] ---\u0026gt; [Internal Developer Platform (IDP)] | 10| |---\u0026gt; [Standardized Infrastructure] | 11| |---\u0026gt; [Automated Compliance] | 12| (Reduced friction, consistent guardrails) | 13+-----------------------------------------------------------------+ Warum es wichtig ist Durch die Reduzierung der Entwicklerreibung beschleunigt Platform Engineering direkt die Geschwindigkeit der Softwarebereitstellung und verbessert die Entwicklererfahrung (DevEx). Es ermöglicht Entwicklern, sich auf das Schreiben von Geschäftslogik zu konzentrieren, anstatt sich mit Infrastrukturkonfigurationen herumzuschlagen. Für das Unternehmen stellen IDPs sicher, dass Sicherheitsleitlinien und Maßnahmen zur Kostenkontrolle direkt in den Entwicklungslebenszyklus integriert werden, wodurch das Risiko falsch konfigurierter Cloud-Ressourcen und Schatten-IT verringert wird.\nStandardisierung der Beobachtbarkeit mit OpenTelemetry für LLMs Während generative KI-Anwendungen in die Produktion übergehen, erweisen sich herkömmliche APM-Tools (Application Performance Monitoring) als unzureichend. Um diese Lücke zu schließen, erweitert das OpenTelemetry (OTel)-Projekt – ein CNCF-Inkubationsstandard – seine Spezifikation um semantische Konventionen für große Sprachmodelle und generative KI-Workflows.\nDiese Erweiterung standardisiert die Art und Weise, wie Telemetriedaten (Metriken, Protokolle und Spuren) von KI-Anwendungen erfasst werden. Es ermöglicht Entwicklern, LLM-spezifische Metriken wie Token-Verbrauch, Eingabeaufforderungs- und Antwortlatenz, Modellgenauigkeit und semantische Caching-Effizienz neben herkömmlichen Systemmetriken wie CPU- und Speicherauslastung zu verfolgen.\nWarum es wichtig ist Ohne standardisierte Beobachtbarkeit ist das Debuggen komplexer, mehrstufiger KI-Anwendungen unglaublich schwierig. Wenn ein Agentensystem ausfällt oder eine hohe Latenz aufweist, müssen Entwickler die Anfrage über mehrere Microservices, Vektordatenbanken und externe LLM-APIs hinweg verfolgen. Durch die Integration der LLM-Observability in den Open-Source-Standard OpenTelemetry können Unternehmen mit proprietären Überwachungstools eine Anbieterbindung vermeiden und eine einheitliche, durchgängige Sichtbarkeit ihrer modernen, KI-gestützten Anwendungsstacks erhalten.\nOpen Source Die Valkey-Initiative und der Backlash bei der Open-Source-Lizenzierung Das Open-Source-Ökosystem erlebt aufgrund von Lizenzverschiebungen durch namhafte kommerzielle Unternehmen eine erhebliche Neuausrichtung. Ein Paradebeispiel ist Redis, das kürzlich von der freizügigen BSD-Lizenz auf duale proprietäre Lizenzen (RSALv2 und SSPL) umgestiegen ist. Als Reaktion darauf brachte die Linux Foundation, unterstützt von Branchenriesen wie AWS, Google, Oracle und Ericsson, Valkey auf den Markt – einen quelloffenen, vollständig kompatiblen Zweig der Redis-In-Memory-Datenbank.\nDieser Vorfall ist Teil eines umfassenderen Trends, bei dem Unternehmen, die auf Open-Source-Software basieren (wie HashiCorp mit Terraform und Elastic mit Elasticsearch), auf restriktive Lizenzen umsteigen, um ihre Geschäftsmodelle vor Cloud-Anbietern zu schützen, die ihre Software als Managed Services verpacken und weiterverkaufen.\nWarum es wichtig ist Die schnelle Mobilisierung der Branche rund um Valkey zeigt die Widerstandsfähigkeit der Open-Source-Community, wenn sie von großen Cloud-Anbietern unterstützt wird. Es signalisiert anderen kommerziellen Open-Source-Unternehmen, dass die Umstellung auf proprietäre Lizenzen zu sofortigen, gut finanzierten Forks führen kann, die ihren Marktanteil verwässern. Für Unternehmenskunden verdeutlicht dieser Trend die Bedeutung von Lizenzprüfungen und die Notwendigkeit, Notfallpläne für kritische Open-Source-Abhängigkeiten zu erstellen.\nRusts fortgesetzte Integration in den Linux-Kernel Die Integration der Programmiersprache Rust in den Linux-Kernel schreitet weiter voran und stellt eine historische Abkehr von der ausschließlichen Abhängigkeit von C dar. Unter der Leitung des Rust-für-Linux-Projekts führen Entwickler kontinuierlich Rust-Unterstützung für das Schreiben von Gerätetreibern, Dateisystemen und Netzwerkprotokollen ein.\nDer Hauptgrund für diesen Übergang sind Rusts strenge Kompilierzeitgarantien hinsichtlich der Speichersicherheit. Im Gegensatz zu C, bei dem Entwickler den Speicher manuell verwalten müssen – was häufig zu Schwachstellen wie Pufferüberläufen, Use-After-Free-Fehlern und Datenwettläufen führt – verhindert Rust diese Fehler bereits in der Kompilierungsphase, ohne die Laufzeitleistung zu beeinträchtigen.\nWarum es wichtig ist Sicherheitslücken im Speicher sind für etwa 70 % aller schwerwiegenden Sicherheitslücken in großen Softwaresystemen, einschließlich des Linux-Kernels, verantwortlich. Durch das Umschreiben kritischer Kernel-Subsysteme und Treiber in Rust beseitigt die Open-Source-Community systematisch ganze Klassen von Sicherheitslücken auf Betriebssystemebene. Dieser Übergang wird letztendlich zu einer sichereren, stabileren und widerstandsfähigeren Infrastruktur führen, die alles von Cloud-Servern bis hin zu eingebetteten IoT-Geräten unterstützt.\nEmpfohlene Lektüre Der Übergang zur Post-Quantum-Kryptographie: Ein detaillierter Leitfaden von NIST zur Implementierung der neu finalisierten ML-KEM- und ML-DSA-Standards in älteren Unternehmensarchitekturen. Die Valkey-Projekt-Roadmap: Ein Überblick über die Pläne der Linux Foundation für die Valkey-Datenbank mit Schwerpunkt auf Leistungsverbesserungen und Cloud-nativen Integrationen. Platform Engineering Maturity Model: Ein Framework der Cloud Native Computing Foundation (CNCF) zur Bewertung und Skalierung interner Entwicklerplattformen. Der Aufstieg der Agenten-KI-Frameworks: Ein technischer tiefer Einblick in die Architektur von Multiagentensystemen und ihre Auswirkungen auf die Unternehmensautomatisierung. Sicherung der Hypervisor-Ebene: Ein umfassender Sicherheitsleitfaden von CISA zum Schutz von VMware ESXi und virtualisierten Umgebungen vor modernen Ransomware-Taktiken. Fazit Die heutigen technologischen Entwicklungen verdeutlichen ein klares Thema: Die Branche überwindet die anfänglichen Hype-Zyklen neuer Technologien und konzentriert sich auf die harte Arbeit der Stabilisierung, Optimierung und Sicherheit. Bei der KI zeigt sich dies in der Verlagerung hin zu autonomen Multi-Agenten-Workflows und hocheffizienten Edge-Modellen, die einen praktischen Geschäftswert bieten. Im Infrastrukturbereich zeigt der Aufstieg des kundenspezifischen Cloud-Silizium- und Plattform-Engineerings das Engagement, Kosten und Reibungsverluste bei Entwicklern zu reduzieren. Unterdessen gehen die Cybersicherheits- und Open-Source-Sektoren proaktiv systemische Risiken an – sei es durch die Vorbereitung auf die Quantenzukunft, die Sicherung von Virtualisierungsebenen oder die Verteidigung der Integrität von Open-Source-Lizenzen und Codebasen. Unternehmen, die diese strukturellen Veränderungen erfolgreich meistern, sind gut aufgestellt, um belastbare, skalierbare und sichere digitale Architekturen für die Zukunft aufzubauen.\n","date":"13. Juli 2026","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/2026-07-13-digital-radar/","series":[{"title":"Digital-Radar","url":"/de/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/de/tags/ai/"},{"title":"Cybersecurity","url":"/de/tags/cybersecurity/"},{"title":"Cloud","url":"/de/tags/cloud/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"Open-Source","url":"/de/tags/open-source/"}],"timestamp":1783921532,"title":"Digitales Radar 13.07.2026"},{"authors":[],"categories":[{"title":"Technology","url":"/de/categories/technology/"},{"title":"Digital-Radar","url":"/de/categories/digital-radar/"}],"content":" Digitales Radar Zusammenfassung Die heutige Technologielandschaft ist durch einen kritischen Übergang von der experimentellen Implementierung zur betrieblichen Reife gekennzeichnet. Im Bereich der künstlichen Intelligenz verlagert sich die Branche weg von monolithischen Brute-Force-Modellen hin zu hochoptimierten, agentenbasierten Arbeitsabläufen und lokalisierten Small Language Models (SLMs). Dieser Übergang verspricht, die KI-Funktionen zu demokratisieren und gleichzeitig dringende Bedenken hinsichtlich der Betriebskosten und des Datenschutzes auszuräumen.\nGleichzeitig kämpft der Bereich Cybersicherheit mit systemischen Schwachstellen innerhalb der Software-Lieferkette, was Unternehmen dazu zwingt, Vertrauensgrenzen neu zu bewerten und die Einführung speichersicherer Programmiersprachen zu beschleunigen.\nIn der Infrastruktur konvergieren Cloud Computing und DevOps an zwei Fronten: dem Aufstieg souveräner Cloud-Architekturen zur Erfüllung strenger geopolitischer Vorschriften und der Institutionalisierung von Platform Engineering zur Bewältigung der kognitiven Belastung der Cloud-nativen Entwicklung.\nSchließlich durchlebt das Open-Source-Ökosystem eine tiefgreifende Identitätskrise, da grundlegende Projekte zu restriktiven Lizenzmodellen übergehen und von der Community geführte Forks auslösen, die Industriestandards neu definieren. Dieser Bericht analysiert diese entscheidenden Entwicklungen und bietet Technologieführern technische Tiefe und strategischen Kontext.\nKünstliche Intelligenz Der Wandel zu Agenten-Workflows und kleinen Sprachmodellen Das Paradigma der generativen künstlichen Intelligenz befindet sich in einem grundlegenden Strukturwandel. In den letzten zwei Jahren lag der Schwerpunkt der Branche auf der Suche nach größeren Parameterzahlen in Frontier Large Language Models (LLMs). Allerdings hat die wirtschaftliche Realität der Ausführung massiver Modelle in Verbindung mit den Latenzbeschränkungen von Echtzeitanwendungen eine zweifache Bewegung ausgelöst: den Aufstieg der „Agentischen KI“ und die schnelle Optimierung von Small Language Models (SLMs).\nAgentische KI stellt einen Übergang von passiven Prompt-and-Response-Interaktionen zu autonomen, zielorientierten Systemen dar. Anstatt sich auf ein einzelnes, umfangreiches Modell zu verlassen, um eine vollständige Lösung zu generieren, nutzen Agentenarchitekturen Netzwerke spezialisierter, kleinerer Modelle, die zur Lösung komplexer Aufgaben zusammenarbeiten. Diese Agenten nutzen iteratives Denken, Tool-Ausführung (z. B. das Abfragen von Datenbanken oder das Ausführen von Code) und Selbstkorrekturschleifen. Frameworks wie LangGraph, AutoGen und CrewAI wandeln sich von experimentellen Entwicklertools zu Orchestrierungsebenen auf Unternehmensniveau.\nGleichzeitig zeigen SLMs – typischerweise definiert als Modelle mit weniger als 10 Milliarden Parametern, wie z. B. Phi-3 von Microsoft, Llama 3.1 8B von Meta und die neuesten Edge-Angebote von Mistral – Fähigkeiten, die mit Closed-Source-Modellen früherer Generationen mithalten können. Durch fortschrittliche Quantisierungstechniken, destillierte Trainingsdatensätze und hardwarespezifische Optimierungen können diese Modelle jetzt effizient auf Hardware der Verbraucherklasse, Edge-Geräten und lokalisierten Unternehmensservern ausgeführt werden.\n1[User Query] ──\u0026gt; [Orchestrator Agent] ──┬──\u0026gt; [Retrieval Agent] ──\u0026gt; [Vector DB] 2 ├──\u0026gt; [Execution Agent] ──\u0026gt; [Secure Sandbox] 3 └──\u0026gt; [Critic Agent] ────\u0026gt; [Output Validation] Warum es wichtig ist Dieser Wandel ist aus drei Hauptgründen von entscheidender Bedeutung: Kosten, Datenschutz und Zuverlässigkeit.\nErstens hängt die finanzielle Nachhaltigkeit von KI-Initiativen in Unternehmen von der Reduzierung der Inferenzkosten ab. Der Betrieb spezialisierter SLMs für gezielte Aufgaben ist um Größenordnungen günstiger, als jede Abfrage an eine proprietäre API mit mehreren Milliarden Parametern weiterzuleiten.\nZweitens machen Datenschutz und die Einhaltung gesetzlicher Vorschriften (wie DSGVO und HIPAA) die Übertragung proprietärer Daten an externe, in der Cloud gehostete Modelle zu einer erheblichen rechtlichen Verpflichtung. Lokalisierte SLMs ermöglichen es Unternehmen, vertrauliche Daten vollständig innerhalb ihrer sicheren Grenzen zu halten.\nSchließlich beheben Agenten-Workflows die inhärente Unzuverlässigkeit von LLMs. Durch die Aufteilung komplexer Aufgaben in diskrete, überprüfbare Schritte, die von spezialisierten Agenten ausgeführt werden, können Unternehmen strenge Leitplanken implementieren, wodurch Halluzinationen drastisch reduziert und die für Produktionsumgebungen erforderliche deterministische Ausgabe verbessert werden.\nCybersicherheit Schwachstellen in der Software-Lieferkette und das Streben nach Speichersicherheit Die Cybersicherheitslandschaft wird zunehmend durch systemische Bedrohungen bestimmt, die auf die Software-Lieferkette abzielen. Anstatt zu versuchen, direkt in gut verteidigte Unternehmensgrenzen einzudringen, konzentrieren raffinierte Bedrohungsakteure ihre Bemühungen vorgelagert und kompromittieren die Open-Source-Bibliotheken, Abhängigkeiten von Drittanbietern und Edge-Geräte, denen Unternehmen implizit vertrauen.\nDie langfristigen Auswirkungen des Backdoor-Versuchs von XZ Utils sind in der Sicherheitsgemeinschaft weiterhin spürbar. Dieser Vorfall machte eine kritische Schwachstelle im Open-Source-Ökosystem deutlich: die Abhängigkeit der grundlegenden Internet-Infrastruktur von unterfinanzierten, von Freiwilligen betreuten Projekten. Angreifer nutzen Social Engineering und mehrjährige Grooming-Kampagnen, um den Status eines Betreuers für kritische Repositories zu erlangen, mit der Absicht, raffinierte, verschleierte Hintertüren einzuschleusen.\nParallel dazu sind Enterprise-Edge-Geräte – wie VPN-Gateways (Virtual Private Network) und Firewalls von Anbietern wie Ivanti, Palo Alto Networks und Fortinet – zu Hauptzielen für Zero-Day-Angriffe geworden. Diese Geräte, auf denen häufig ältere Codebasen ohne moderne Exploit-Abwehrmaßnahmen ausgeführt werden, dienen als erste Zugangspunkte für staatlich geförderte Spionagegruppen und Ransomware-Partner gleichermaßen.\nAls Reaktion auf diese anhaltenden Schwachstellen hat die Cybersecurity and Infrastructure Security Agency (CISA) zusammen mit internationalen Partnern ihr Eintreten für die „Secure by Design“-Prinzipien verstärkt. Eine zentrale Säule dieser Initiative ist der Übergang weg von speicherunsicheren Programmiersprachen wie C und C++ hin zu speichersicheren Alternativen, vor allem Rust und Go.\nWarum es wichtig ist Die Zentralisierung der Softwareverteilung bedeutet, dass eine einzige vorgelagerte Kompromittierung kaskadierende, katastrophale Auswirkungen auf Tausende nachgelagerter Organisationen haben kann. Herkömmliche reaktive Sicherheitsmaßnahmen wie signaturbasierte Antiviren- und Perimeter-Firewalls sind gegen kompromittierte Software, die über legitime kryptografische Signaturen und Administratorrechte verfügt, wirkungslos.\nUnternehmen müssen von einer reaktiven Haltung zu einer proaktiven Zero-Trust-Architektur übergehen. Dies erfordert die Implementierung einer kontinuierlichen Software Bill of Materials (SBOM)-Erfassung und -Analyse, um Einblick in transitive Abhängigkeiten zu erhalten. Darüber hinaus ist das Bestreben der CISA nach Speichersicherheit nicht nur akademischer Natur; Schwachstellen durch Speicherbeschädigung machen etwa 70 % aller schwerwiegenden Sicherheitslücken aus. Durch die Umstellung kritischer Infrastruktur- und Kernsoftwarekomponenten auf speichersichere Sprachen kann die Branche ganze Klassen von Schwachstellen systematisch beseitigen und so die Wirtschaftlichkeit der Cyberabwehr grundlegend verändern.\nCloud Computing Sovereign Clouds und Custom Silicon definieren die Infrastruktur neu Der Cloud-Computing-Sektor erlebt einen doppelten Wandel, der durch geopolitische Zwänge und die physikalischen Grenzen der Halbleiterskalierung angetrieben wird. Da sich die Gesetze zur Datensouveränität weltweit verschärfen und die Rechenanforderungen der künstlichen Intelligenz steigen, sind Cloud-Hyperscaler gezwungen, Innovationen über traditionelle Standardhardware und zentralisierte Rechenzentrumsmodelle hinaus zu entwickeln.\nSouveräne Cloud-Initiativen haben sich von Nischen-Compliance-Angeboten zu Mainstream-Architekturanforderungen entwickelt. Angetrieben durch die strengen Datenschutzvorschriften der Europäischen Union und ähnliche Gesetzgebungsbewegungen in Ländern im asiatisch-pazifischen Raum richten AWS, Microsoft Azure und Google Cloud Platform (GCP) physisch und logisch isolierte Cloud-Zonen ein. Diese „souveränen Regionen“ werden ausschließlich von Bürgern vor Ort betrieben, nutzen lokale Lieferketten und garantieren, dass Daten, Metadaten und Identitätssysteme strikt innerhalb der Landesgrenzen bleiben und immun gegen ausländische Überwachung oder rechtliche Reichweite (wie den US CLOUD Act) sind.\nGleichzeitig haben die wirtschaftlichen und thermischen Gegebenheiten bei der Ausführung großer Arbeitslasten die Einführung von kundenspezifischem Silizium beschleunigt. Hyperscaler umgehen traditionelle Chiphersteller zunehmend und entwickeln ihre eigenen anwendungsspezifischen integrierten Schaltkreise (ASICs) und ARM-basierten CPUs. Beispiele hierfür sind Graviton4 und Trainium2 von AWS, Axion CPU und TPU v5p von Google sowie Cobalt 100 und Maia 100 von Microsoft.\nAnbieter Benutzerdefinierte CPU KI-Training/Inferenz-ASIC Primäres Wertversprechen AWS Graviton4 Trainium2 / Inferentia2 Hohes Preis-Leistungs-Verhältnis, tiefe Ökosystemintegration Google Cloud Axion (ARM) TPU v5p Optimiert für groß angelegtes KI-Training und Kubernetes Microsoft Azure Kobalt 100 Maia 100 Maßgeschneidert für Azure-Workloads und OpenAI-Dienste Warum es wichtig ist Für Unternehmensarchitekten bedeutet der Aufstieg souveräner Clouds, dass Multi-Cloud- und Hybrid-Cloud-Strategien nun geopolitische Grenzen berücksichtigen müssen. Bei Compliance geht es nicht mehr nur um Verschlüsselungsschlüssel. es geht um die physische Geographie, die operative Zuständigkeit und den rechtlichen Status des Cloud-Betreibers. Gelingt es nicht, die Cloud-Architektur an diese Realitäten anzupassen, drohen schwere behördliche Strafen und Betriebsunterbrechungen.\nWas die Hardware angeht, ist die Einführung maßgeschneiderter Chips von entscheidender Bedeutung für die Bewältigung der steigenden Gesamtbetriebskosten (Total Cost of Ownership, TCO) der Cloud-Infrastruktur. ARM-basierte kundenspezifische CPUs bieten ein bis zu 50 % besseres Preis-Leistungs-Verhältnis und einen deutlich geringeren Stromverbrauch im Vergleich zu herkömmlichen x86-Architekturen. Für Unternehmen, die große Microservices betreiben oder proprietäre Modelle für maschinelles Lernen trainieren, ist die Migration auf benutzerdefinierte Siliziuminstanzen der effektivste Hebel zur Optimierung der Cloud-Ausgaben und zur Erfüllung der Nachhaltigkeitsanforderungen des Unternehmens.\nDevOps Plattform-Engineering und OpenTelemetry-Standardisierung Die DevOps-Bewegung durchläuft eine strukturelle Weiterentwicklung, da Unternehmen versuchen, die Komplexität moderner, cloudnativer Umgebungen zu verringern. Das historische Ideal „Du baust es, du führst es aus“ hat in vielen Fällen zu einem Entwickler-Burnout und einer betrieblichen Fragmentierung geführt. Um dem entgegenzuwirken, konsolidiert sich die Branche schnell auf Plattform-Engineering und die Standardisierung von OpenTelemetry.\nPlatform Engineering konzentriert sich auf das Entwerfen und Bereitstellen interner Entwicklerplattformen (IDPs). Anstatt von jedem Softwareentwickler zu verlangen, Kubernetes-Manifeste, Terraform-Konfigurationen und komplexe CI/CD-Pipelines zu beherrschen, entwickeln Platform Engineering-Teams „goldene Pfade“ – kuratierte Self-Service-Portale und APIs, die die Komplexität der Infrastruktur abstrahieren. Tools wie Backstage (ursprünglich Open-Source von Spotify) sind zum Branchenstandard für die Erstellung dieser Entwicklerportale geworden und ermöglichen es Ingenieuren, sichere, konforme Umgebungen mit einem einzigen Klick bereitzustellen.\n1[Developer] ──\u0026gt; [Internal Developer Platform (e.g., Backstage)] 2 │ 3 ├──\u0026gt; [Golden Path: Provision Microservice] 4 │ │ 5 │ ├──\u0026gt; Kubernetes Namespace 6 │ ├──\u0026gt; CI/CD Pipeline (GitHub Actions) 7 │ └──\u0026gt; IAM Roles \u0026amp; Secrets (Vault) 8 │ 9 └──\u0026gt; [Golden Path: Provision Database] Parallel dazu hat die Herausforderung, diese stark verteilten, kurzlebigen Microservice-Architekturen zu überwachen, zur nahezu universellen Einführung von OpenTelemetry (OTel) als Standard für Cloud-native Observability geführt. OpenTelemetry, ein Projekt der Cloud Native Computing Foundation (CNCF), bietet eine herstellerneutrale Spezifikation und Tools zum Sammeln von Metriken, Protokollen und Traces. Die Branche bewegt sich weg von proprietären Überwachungsagenten, die Unternehmen an bestimmte SaaS-Plattformen binden, hin zu OTel-nativen Architekturen.\nWarum es wichtig ist Platform Engineering befasst sich direkt mit der kognitiven Überlastung moderner Softwareentwicklungsteams. Durch die Zentralisierung der Infrastrukturverwaltung und der Sicherheitsvorkehrungen innerhalb eines IDP können Unternehmen die Entwicklungsgeschwindigkeit erheblich beschleunigen und gleichzeitig konsistente Compliance-, Sicherheits- und Kostenkontrollen gewährleisten. Es verwandelt DevOps von einer dezentralen, oft chaotischen Reihe von Praktiken in ein strukturiertes, skalierbares internes Produkt.\nDie Standardisierung von OpenTelemetry ist ebenso transformativ. Es entkoppelt die Telemetriedatenerfassungsschicht von der Analyseschicht. Dies verhindert eine Anbieterbindung und ermöglicht es Unternehmen, ihre Observability-Daten an mehrere Backends (z. B. Datadog, Dynatrace, Honeycomb oder selbst gehostete Prometheus/Grafana-Instanzen) weiterzuleiten, ohne ihre Codebasen mehrmals zu instrumentieren. In einer Zeit, in der die Kosten für Datenausgang und Beobachtbarkeit in die Höhe schießen, bietet OTel die architektonische Flexibilität, die zur Optimierung von Überwachungsstrategien erforderlich ist.\nOpen Source Das Lizenzschisma und der Aufstieg der Community Forks Das Open-Source-Software-Ökosystem (OSS) befindet sich in einer tiefgreifenden philosophischen und wirtschaftlichen Krise. Eine wachsende Zahl risikokapitalfinanzierter Open-Source-Unternehmen geben freizügige Open-Source-Lizenzen zugunsten restriktiver „quellenverfügbarer“ oder geschäftsorientierter Lizenzen auf. Dieser Trend hat langjährige Gemeinschaften zersplittert und eine Neubewertung der Beziehung zwischen kommerziellen Unternehmen und Open-Source-Mitwirkenden erzwungen.\nDas bekannteste aktuelle Beispiel ist Redis, das von der freizügigen BSD-Lizenz zu einem Doppellizenzierungsschema unter der Redis Source Available License (RSALv2) und der Server Side Public License (SSPLv1) übergegangen ist. Dies folgt auf ähnliche Schritte von HashiCorp (Umstellung von Terraform auf die Business Source-Lizenz), Elastic und MongoDB in den Vorjahren. Diese Unternehmen argumentieren, dass Cloud-Hyperskalierer ihren Open-Source-Code ausnutzen, um verwaltete Dienste anzubieten, ohne einen Beitrag zu den Upstream-Projekten zu leisten, was das traditionelle Open-Source-Modell kommerziell unrentabel macht. Die Reaktion der Gemeinschaft und der Industrie auf diese Lizenzveränderungen war schnell und entschieden. Im Zuge der Redis-Ankündigung brachte die Linux Foundation mit Unterstützung großer Technologieunternehmen wie AWS, Google und Oracle Valkey auf den Markt – einen leistungsstarken, vollständig Open-Source-Fork von Redis, der auf der letzten BSD-lizenzierten Version basiert. In ähnlicher Weise führte der Übergang von Terraform durch HashiCorp zur Schaffung von OpenTofu, einem erfolgreichen, von der Community betriebenen Fork unter der Schirmherrschaft der Linux Foundation.\nWarum es wichtig ist Diese Lizenzteilung birgt erhebliche rechtliche und betriebliche Risiken für Unternehmen. Software, die einst unter permissiven Lizenzen frei nutzbar war, kann heute Einschränkungen unterliegen, die ihre Verwendung in Wettbewerbsumgebungen verbieten oder komplexe, kostspielige kommerzielle Lizenzvereinbarungen erfordern.\nUnternehmen müssen strenge Open-Source-Governance-Richtlinien implementieren, um ihre Softwareabhängigkeiten kontinuierlich zu überprüfen. Das schnelle Aufkommen und die Unterstützung der Branche durch Forks wie Valkey und OpenTofu zeigen, dass die Technologiebranche bereit ist, enorme Ressourcen zu mobilisieren, um offene, herstellerneutrale Alternativen zu kritischen Infrastrukturkomponenten aufrechtzuerhalten. Für Technologieführer ist die Lektion klar: Die Abhängigkeit von Open-Source-Projekten einzelner Anbieter birgt ein inhärentes Risiko, und die aktive Beteiligung an neutralen Stiftungen (wie der CNCF oder der Linux Foundation) ist für die langfristige Stabilität der Architektur von entscheidender Bedeutung.\nEmpfohlene Lektüre Die Pragmatik der Agenten-KI: Eine eingehende Untersuchung von Multi-Agenten-Orchestrierungs-Frameworks mit Schwerpunkt auf Zustandsverwaltung, Tool-Integration und Kostenoptimierungsstrategien in Produktionsumgebungen. Übergang zu speichersicheren Systemen: Ein praktischer Leitfaden für technische Führungskräfte zur Migration älterer C/C++-Codebasen nach Rust, der detaillierte Interoperabilitätsmuster und vom Compiler erzwungene Sicherheitsvorteile beschreibt. Architektur für Datensouveränität: Eine umfassende Analyse der technischen Anforderungen, Strategien zur Verwaltung von Verschlüsselungsschlüsseln und rechtlichen Rahmenbedingungen, die für die Bereitstellung konformer Cloud-Architekturen mit mehreren Regionen erforderlich sind. Implementierung interner Entwicklerplattformen (IDPs): Ein Schritt-für-Schritt-Plan für den Aufbau von Entwicklerportalen mit Backstage, der sich auf die Reduzierung der kognitiven Belastung und die Etablierung sicherer „goldener Pfade“ konzentriert. Die Ökonomie der Open-Source-Lizenzierung: Ein analytischer Blick auf den kommerziellen Druck, der die Umstellung auf quellenverfügbare Lizenzen vorantreibt, und auf die langfristige Rentabilität von Community-gesteuerten Forks wie Valkey und OpenTofu. Fazit Die heutige Technologielandschaft erfordert ein ausgefeiltes Gleichgewicht zwischen schneller Innovation und strengem Risikomanagement. Der Übergang zu Agentic AI und Small Language Models bietet einen Weg zu nachhaltiger, privater und hochfunktionaler künstlicher Intelligenz. Diese Fortschritte müssen jedoch durch robuste Sicherheitspraktiken unterstützt werden, die den Realitäten einer kompromittierten Software-Lieferkette Rechnung tragen. Im Infrastrukturbereich unterstreicht der Aufstieg souveräner Clouds und kundenspezifischer Silizium die Notwendigkeit, die technische Architektur sowohl an geopolitischen Realitäten als auch an der Hardwareeffizienz auszurichten. Mittlerweile stellen Platform Engineering und OpenTelemetry die operativen Rahmenbedingungen bereit, die erforderlich sind, um diese wachsende Komplexität zu bewältigen, ohne dass die Entwicklungsteams ausgelastet sind.\nSchließlich erinnern die Lizenzkämpfe in der Open-Source-Community deutlich daran, dass die grundlegende Software des modernen Webs wirtschaftlichen und rechtlichen Veränderungen unterliegt, die von Technologieführern weltweit eine wachsame Governance und strategische Anpassungsfähigkeit erfordern.\n","date":"12. Juli 2026","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/2026-07-12-digital-radar/","series":[{"title":"Digital-Radar","url":"/de/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/de/tags/ai/"},{"title":"Cybersecurity","url":"/de/tags/cybersecurity/"},{"title":"Cloud","url":"/de/tags/cloud/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"Open-Source","url":"/de/tags/open-source/"}],"timestamp":1783843594,"title":"Digitales Radar 12.07.2026"},{"authors":[],"categories":[{"title":"Devops","url":"/de/categories/devops/"},{"title":"Azure","url":"/de/categories/azure/"}],"content":"In Teil 1 wurde der azure-pipelines.yml über einen Pull Request in den Zweig main eingebunden. In diesem zweiten Teil hängen wir diese YAML an eine Pipeline an und führen sie auf einem von Microsoft gehosteten Windows-Agenten in der Cloud aus.\nDer Abschnitt „Pipelines“. Der Abschnitt „Pipelines“ in der Seitenleiste enthält mehr Elemente als Repos:\nPipelines – die CI-Pipelines (Build) Umgebungen – Bereitstellungsziele wie Akzeptanz und Produktion Releases – die klassischen visuellen Release-Pipelines (älteres System, wird durch mehrstufiges YAML ersetzt) Bibliothek – Variablengruppen und sichere Dateien Aufgabengruppen – wiederverwendbare Aufgabenblöcke, die über mehrere Pipelines hinweg gemeinsam genutzt werden können Bereitstellungsgruppen – selbstgehostete Agenten, gruppiert nach Umgebung Bei einem neuen Projekt ist die Pipelines-Liste leer.\nEine Pipeline erstellen: der Assistent Über Pipeline erstellen startet der vierstufige Assistent: Verbinden → Auswählen → Konfigurieren → Überprüfen.\nSchritt 1 – Verbinden: Wo ist der Code? ADO unterstützt Azure Repos Git, GitHub, Bitbucket Cloud, andere Git-Server und Subversion. Unten gibt es auch einen Link zum klassischen Editor – dem alten visuellen Pipeline-Builder ohne YAML. Dies wird nicht mehr aktiv weiterentwickelt.\nSchritt 2 – Wählen Sie: welches Repository? Da es im Projekt nur ein Repo gibt, ist dev-ops-lab01 die einzige Option.\nSchritt 3 – Konfigurieren wird automatisch übersprungen. ADO erkennt, dass im Stammverzeichnis des Repos bereits ein azure-pipelines.yml vorhanden ist, und springt direkt zur Überprüfung.\nSchritt 4 – Überprüfung: Das vorhandene YAML wird angezeigt. ADO liest die Datei direkt aus dem Repo – es wird nichts kopiert oder separat gespeichert. Die Pipeline ist die YAML im Repo.\nDas in Teil 1 erstellte YAML:\n1trigger: 2 - main 3 4pool: 5 vmImage: \u0026#39;windows-latest\u0026#39; 6 7steps: 8 - task: PowerShell@2 9 displayName: \u0026#39;System information\u0026#39; 10 inputs: 11 targetType: \u0026#39;inline\u0026#39; 12 script: | 13 Write-Host \u0026#34;Hostname: $env:COMPUTERNAME\u0026#34; 14 Write-Host \u0026#34;OS: $env:OS\u0026#34; 15 Write-Host \u0026#34;Build number: $(Build.BuildNumber)\u0026#34; 16 Write-Host \u0026#34;Branch: $(Build.SourceBranchName)\u0026#34; Die Schlüsselkomponenten:\nSchlüsselwort Bedeutung trigger Ein Push auf main startet die Pipeline automatisch pool.vmImage Von Microsoft gehosteter Agent – ​​windows-latest ist das neueste Windows Server-Image steps Die Liste der auszuführenden Schritte task: PowerShell@2 Eine integrierte ADO-Aufgabe, Version 2 $(Build.BuildNumber) Integrierte ADO-Variable, automatisch gefüllt $(Build.SourceBranchName) Integrierte ADO-Variable mit dem Filialnamen Über Run wird die Pipeline zum ersten Mal gestartet.\nDer erste Lauf Nach dem Start zeigt ADO die Laufzusammenfassung an. Die Pipeline wurde erfolgreich abgeschlossen.\nWas ist sichtbar:\n#20260414.1 – Build-Nummer, erstellt aus Datum und Sequenznummer – Zusammengeführter PR 1: azure-pipelines.yml hinzugefügt – der Commit, gegen den dies ausgeführt wurde Zweig main, Commit aaedef9f – der genaue Merge-Commit aus dem PR in Teil 1 Phase: 1 Auftrag in 15 Sekunden abgeschlossen – Gesamtausführungszeit einschließlich Agentenbereitstellung Das Jobprotokoll Durch Klicken auf Auftrag wird die detaillierte Protokollansicht geöffnet. Die linke Seitenleiste zeigt alle Schritte, die ADO rund um die benutzerdefinierten YAML-Schritte automatisch ausführt:\nJob initialisieren – Agent ist konfiguriert Checkout dev-ops-lab01@main – das Repo wird auf dem Agenten geklont Systeminformationen – die benutzerdefinierte PowerShell-Aufgabe Nach dem Auftrag: Auschecken – Aufräumen nach dem Auschecken Auftrag abschließen – Agent meldet sich ab Build-Status melden – Der Status wird an das Repo zurückgemeldet Das Hauptprotokoll zeigt die Agenten-Metadaten: Pool: Azure Pipelines, Image: windows-latest, Agent: Azure Pipelines 1. Hierbei handelt es sich um eine Einweg-VM in einem Microsoft-Rechenzentrum, die bei Bedarf für diesen Auftrag bereitgestellt und nach Abschluss zerstört wurde.\nPowerShell-Ausgabe Die Ausgabe des Systeminformationsschritts:\n1Hostname: runnervm67wqg 2OS: Windows_NT 3Build number: 20260414.1 4Branch: main Der Agent heißt runnervm67wqg – eine zufällig zugewiesene, von Microsoft gehostete Windows-VM. Die ADO-Variablen $(Build.BuildNumber) und $(Build.SourceBranchName) wurden von der Plattform automatisch mit den richtigen Werten gefüllt.\nWas wurde erreicht Nach diesem zweiten Teil ist klar, wie eine YAML-Pipeline in Azure DevOps funktioniert:\n– Der Pipeline-Assistent verknüpft eine YAML-Datei im Repository mit einer Pipeline-Definition\nADO erkennt automatisch ein vorhandenes azure-pipelines.yml – Ein von Microsoft gehosteter Agent wird bei Bedarf bereitgestellt, führt den Auftrag aus und wird anschließend verworfen Integrierte ADO-Variablen sind in jedem Schritt ohne Konfiguration verfügbar Das Jobprotokoll zeigt alle Schritte, einschließlich der von ADO selbst hinzugefügten automatischen Schritte In Teil 3 erweitern wir die Pipeline um Stufen und Jobs – die Bausteine für echte CI/CD-Pipelines mit mehreren Umgebungen.\n","date":"14. April 2026","img":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover.png","lang":"de","langName":"Deutsch","largeImg":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover_hu_ce8b2a8b791d2d56.png","permalink":"/de/posts/2026-azure-devops-pipelines-eerste-pipeline/","series":[{"title":"Azure DevOps Lab","url":"/de/series/azure-devops-lab/"}],"smallImg":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover_hu_7a21eef3dae21511.png","tags":[{"title":"Azure-Devops","url":"/de/tags/azure-devops/"},{"title":"Pipelines","url":"/de/tags/pipelines/"},{"title":"YAML","url":"/de/tags/yaml/"},{"title":"Ci-Cd","url":"/de/tags/ci-cd/"},{"title":"PowerShell","url":"/de/tags/powershell/"},{"title":"Windows","url":"/de/tags/windows/"},{"title":"Lab","url":"/de/tags/lab/"}],"timestamp":1776186060,"title":"Azure DevOps – Teil 2: Ihre Erste YAML-Pipeline"},{"authors":[],"categories":[{"title":"Devops","url":"/de/categories/devops/"},{"title":"Azure","url":"/de/categories/azure/"}],"content":"Azure DevOps is Microsoft\u0026rsquo;s platform for managing the complete software delivery chain: version control, CI/CD pipelines, project planning, package feeds and documentation. In this first part of the series we build the foundation: a Git repository, branch protection and the Pull Request workflow.\nSetup: organisation and project After logging in to dev.azure.com the mvdboom organisation is visible with one existing project.\nOpening that project revealed it was a TFVC project — Microsoft\u0026rsquo;s older centralised version control system. TFVC projects use $/projectname paths instead of Git branches and work with changesets and shelvesets. For modern DevOps workflows, Git is the standard.\nTFVC projects cannot be converted to Git. A new project dev-ops-lab01 was therefore created as a Private project with Git as the version control system.\nAzure DevOps Repos Opening Repos shows an empty repository with three options to get started: clone locally, push an existing repo, or initialise directly in the browser with a README. The sidebar shows the Git-specific sections: Files, Commits, Pushes, Branches, Tags, Pull requests and Advanced Security.\nUsing Initialize (with README checked) creates the main branch. The first commit — 924f2a1b: Added README.md — is immediately visible including author and timestamp.\nBranch policies on main A production environment never allows direct pushes to main. Via Branches → ⋯ → Branch policies on the main branch the policies screen opens.\nThe four available policies:\nRequire a minimum number of reviewers — blocks merge without approval Check for linked work items — requires a link to a Board item for traceability Check for comment resolution — all review comments must be resolved Limit merge types — enforces a specific merge strategy (squash, rebase, etc.) Below those are Build Validation (a pipeline must pass before merge), Status Checks (external tools such as SonarQube) and Automatically included reviewers.\nEnabling the first policy reveals its configuration options.\nFor the lab environment the policy is set to minimum 1 reviewer with \u0026ldquo;Allow requestors to approve their own changes\u0026rdquo; checked — so the full workflow can be completed without a second account.\nOnce a required policy is active, the rule applies automatically: direct push to main is blocked, everything goes through a Pull Request.\nFeature branch and first commit From the Files view a new branch feature/add-pipeline was created using the branch selector. The name follows the common convention: feature/ as a prefix followed by a descriptive name.\nVia + New → File the file azure-pipelines.yml was created and typed directly in the browser.\n1trigger: 2 - main 3 4pool: 5 vmImage: \u0026#39;windows-latest\u0026#39; 6 7steps: 8 - task: PowerShell@2 9 displayName: \u0026#39;System information\u0026#39; 10 inputs: 11 targetType: \u0026#39;inline\u0026#39; 12 script: | 13 Write-Host \u0026#34;Hostname: $env:COMPUTERNAME\u0026#34; 14 Write-Host \u0026#34;OS: $env:OS\u0026#34; 15 Write-Host \u0026#34;Build number: $(Build.BuildNumber)\u0026#34; 16 Write-Host \u0026#34;Branch: $(Build.SourceBranchName)\u0026#34; After saving via Commit the change is on the feature branch. ADO immediately suggests at the top: \u0026ldquo;Create a pull request\u0026rdquo;.\nPull Request workflow When creating the Pull Request, ADO automatically shows the correct direction: feature/add-pipeline → main. The tabs Files 1 and Commits 1 confirm the scope of the change.\nAfter creation the PR is in Active status. The branch policy is immediately visible as a blocking check:\n🔵 At least 1 reviewer must approve — merge blocked ✅ No merge conflicts — branch is clean Using Approve the PR is approved. Both checks turn green and the Complete button becomes active.\nClicking Complete shows the merge dialog with a choice of four merge types:\nType Behaviour Merge (no fast forward) Always creates a merge commit; branch history remains visible in the graph Squash commit All commits from the feature branch compressed into one commit on main Rebase and fast forward Commits replayed linearly on top of main; no merge commit Semi-linear merge Rebase first, then merge commit The default Merge (no fast forward) is the right choice in most environments. Delete feature/add-pipeline after merging is checked by default — good practice to keep the repository tidy.\nAfter Complete merge the PR shows Completed status with the full audit trail: created → joined as reviewer → approved → completed.\nWhat has been achieved After this first part the following foundation is in place:\nA Git repository in Azure DevOps (not TFVC) Branch policy on main: direct push blocked, everything via PR Feature branch workflow: feature/add-pipeline created, file committed Full Pull Request completed: create → review → approve → merge The file azure-pipelines.yml is now in main. In part 2 we will attach a pipeline to it and run the YAML on a Microsoft-hosted agent.\n","date":"14. April 2026","img":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch.png","lang":"de","langName":"Deutsch","largeImg":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch_hu_d980affb1eb962a9.png","permalink":"/de/posts/2026-azure-devops-repos-branches-policies-pull-requests/","series":[{"title":"Azure DevOps Lab","url":"/de/series/azure-devops-lab/"}],"smallImg":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch_hu_9ffcb8558117715e.png","tags":[{"title":"Azure-Devops","url":"/de/tags/azure-devops/"},{"title":"Git","url":"/de/tags/git/"},{"title":"Repos","url":"/de/tags/repos/"},{"title":"Pull-Request","url":"/de/tags/pull-request/"},{"title":"Branch-Policy","url":"/de/tags/branch-policy/"},{"title":"YAML","url":"/de/tags/yaml/"},{"title":"Windows","url":"/de/tags/windows/"},{"title":"Lab","url":"/de/tags/lab/"}],"timestamp":1776186000,"title":"Azure DevOps — Part 1: Repos, Branches, Policies and Pull Requests"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/de/categories/windows/"}],"content":" Download as Word document\nThis article describes the full build of a two-server Windows Server 2022 home lab in Proxmox VE. Together, the two virtual machines provide Active Directory Domain Services, DNS, Group Policy and a Certificate Authority (ADCS). RDP connections are secured with PKI certificates so the Mac Mini M1 management workstation connects without certificate warnings.\nThis is part 3 of the series on building a Windows DevOps lab in Proxmox. In part 1 I described how to create a VM, and in part 2 how to prepare the template.\nLab Environment Component Value Proxmox host macpro2013.local Proxmox console https://macpro2013.local:8006 Management workstation Mac Mini M1 VM 1 - AD + DNS WS2022-AD-DNS - 192.168.178.210 VM 2 - CA WS2022-CA01 - 192.168.178.211 Default gateway 192.168.178.1 Subnet prefix /24 Domain LAB01.local Resources (both VMs) 2 vCPU / 4 GB RAM Template WS2022-TEMPLATE-BASE Build Order The CA has a hard dependency on a working AD and DNS. Build everything in this order:\nClone WS2022-TEMPLATE-BASE to WS2022-AD-DNS and configure hostname and static IP Install AD DS + DNS and promote to Domain Controller Configure DNS zones, the SYSVOL scripts folder and Group Policy Clone WS2022-TEMPLATE-BASE to WS2022-CA01 and join the domain Install ADCS (Enterprise Root CA), Web Enrollment and IIS Configure certificate templates and CRL distribution points Deploy Set-RDPCert.ps1 through SYSVOL and a Scheduled Task on both servers Trust the Root CA certificate on the Mac Mini M1 Step 1 - Clone and Prepare WS2022-AD-DNS Clone WS2022-TEMPLATE-BASE to WS2022-AD-DNS through the Proxmox console. Set 2 vCPU and 4 GB RAM and attach the VM to the lab bridge.\nAfter booting, sign in as local Administrator and run the following in an elevated PowerShell session:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3# Rename the computer 4Rename-Computer -NewName \u0026#34;WS2022-AD-DNS\u0026#34; -Force 5 6# Identify the active network adapter 7$adapter = Get-NetAdapter | Where-Object { $_.Status -eq \u0026#39;Up\u0026#39; } | Select-Object -First 1 8 9# Remove any existing DHCP configuration 10Remove-NetIPAddress -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 11Remove-NetRoute -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 12 13# Assign a static IP address 14New-NetIPAddress ` 15 -InterfaceIndex $adapter.ifIndex ` 16 -IPAddress 192.168.178.210 ` 17 -PrefixLength 24 ` 18 -DefaultGateway 192.168.178.1 19 20# Point DNS to loopback - after AD DS installation point to own IP 21Set-DnsClientServerAddress ` 22 -InterfaceIndex $adapter.ifIndex ` 23 -ServerAddresses 127.0.0.1 24 25# Restart to apply the hostname 26Restart-Computer -Force Step 2 - Install AD DS and DNS After the restart, sign in again as local Administrator and run:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3# Install AD DS and DNS with all management tools 4Install-WindowsFeature ` 5 -Name AD-Domain-Services, DNS ` 6 -IncludeManagementTools ` 7 -IncludeAllSubFeature 8 9# Promote to Domain Controller and create the new forest 10Import-Module ADDSDeployment 11 12Install-ADDSForest ` 13 -DomainName \u0026#34;LAB01.local\u0026#34; ` 14 -DomainNetBiosName \u0026#34;LAB01\u0026#34; ` 15 -ForestMode \u0026#34;WinThreshold\u0026#34; ` 16 -DomainMode \u0026#34;WinThreshold\u0026#34; ` 17 -InstallDns $true ` 18 -DatabasePath \u0026#34;C:\\Windows\\NTDS\u0026#34; ` 19 -LogPath \u0026#34;C:\\Windows\\NTDS\u0026#34; ` 20 -SysvolPath \u0026#34;C:\\Windows\\SYSVOL\u0026#34; ` 21 -SafeModeAdministratorPassword (ConvertTo-SecureString \u0026#34;P@ssw0rd!DSRM2026\u0026#34; -AsPlainText -Force) ` 22 -Force The server restarts automatically. Afterwards, sign in as LAB01\\Administrator.\nThen update the DNS pointer and create the reverse lookup zone:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3# Update DNS pointer to own IP 4$adapter = Get-NetAdapter | Where-Object { $_.Status -eq \u0026#39;Up\u0026#39; } | Select-Object -First 1 5Set-DnsClientServerAddress ` 6 -InterfaceIndex $adapter.ifIndex ` 7 -ServerAddresses 192.168.178.210, 8.8.8.8 8 9# Create reverse lookup zone 10Add-DnsServerPrimaryZone ` 11 -NetworkID \u0026#34;192.168.178.0/24\u0026#34; ` 12 -ReplicationScope \u0026#34;Forest\u0026#34; 13 14# Add PTR record for the AD server 15Add-DnsServerResourceRecordPtr ` 16 -ZoneName \u0026#34;178.168.192.in-addr.arpa\u0026#34; ` 17 -Name \u0026#34;210\u0026#34; ` 18 -PtrDomainName \u0026#34;WS2022-AD-DNS.LAB01.local.\u0026#34; 19 20# Create the SYSVOL scripts folder 21$scriptShare = \u0026#34;\\\\LAB01.local\\SYSVOL\\LAB01.local\\scripts\u0026#34; 22If (-Not (Test-Path $scriptShare)) { 23 New-Item -ItemType Directory -Path $scriptShare -Force 24} Step 3 - Configure Group Policy 1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3Import-Module GroupPolicy 4 5# Create the GPO and link to the domain root 6$gpo = New-GPO -Name \u0026#34;LAB01-Core-Settings\u0026#34; 7New-GPLink -Name \u0026#34;LAB01-Core-Settings\u0026#34; -Target \u0026#34;DC=LAB01,DC=local\u0026#34; -LinkEnabled Yes 8 9# Require NLA for RDP 10Set-GPRegistryValue ` 11 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 12 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows NT\\Terminal Services\u0026#34; ` 13 -ValueName \u0026#34;UserAuthentication\u0026#34; -Type DWord -Value 1 14 15# Set TLS security layer 16Set-GPRegistryValue ` 17 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 18 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows NT\\Terminal Services\u0026#34; ` 19 -ValueName \u0026#34;SecurityLayer\u0026#34; -Type DWord -Value 2 20 21# High encryption level 22Set-GPRegistryValue ` 23 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 24 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows NT\\Terminal Services\u0026#34; ` 25 -ValueName \u0026#34;MinEncryptionLevel\u0026#34; -Type DWord -Value 3 26 27# Automatic certificate enrollment (computers and users) 28Set-GPRegistryValue ` 29 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 30 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Cryptography\\AutoEnrollment\u0026#34; ` 31 -ValueName \u0026#34;AEPolicy\u0026#34; -Type DWord -Value 7 32 33Set-GPRegistryValue ` 34 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 35 -Key \u0026#34;HKCU\\SOFTWARE\\Policies\\Microsoft\\Cryptography\\AutoEnrollment\u0026#34; ` 36 -ValueName \u0026#34;AEPolicy\u0026#34; -Type DWord -Value 7 Step 4 - Clone WS2022-CA01 and Join the Domain Clone WS2022-TEMPLATE-BASE to WS2022-CA01 with 2 vCPU and 4 GB RAM on the same lab bridge. Configure the hostname and static IP on first boot:\n1# RUN ON: WS2022-CA01 (192.168.178.211) - Local VM console / Elevated PowerShell 2 3Rename-Computer -NewName \u0026#34;WS2022-CA01\u0026#34; -Force 4 5$adapter = Get-NetAdapter | Where-Object { $_.Status -eq \u0026#39;Up\u0026#39; } | Select-Object -First 1 6Remove-NetIPAddress -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 7Remove-NetRoute -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 8 9New-NetIPAddress ` 10 -InterfaceIndex $adapter.ifIndex ` 11 -IPAddress 192.168.178.211 ` 12 -PrefixLength 24 ` 13 -DefaultGateway 192.168.178.1 14 15# REQUIRED: point DNS to the AD server 16Set-DnsClientServerAddress ` 17 -InterfaceIndex $adapter.ifIndex ` 18 -ServerAddresses 192.168.178.210 19 20Restart-Computer -Force After the restart, join the domain:\n1# RUN ON: WS2022-CA01 (192.168.178.211) - Elevated PowerShell 2 3# Verify DNS resolution before joining the domain 4Resolve-DnsName LAB01.local 5 6# Join the domain 7Add-Computer ` 8 -DomainName \u0026#34;LAB01.local\u0026#34; ` 9 -Credential (Get-Credential -Message \u0026#34;Enter LAB01\\Administrator credentials\u0026#34;) ` 10 -Restart -Force Step 5 - Install ADCS and Configure the Certificate Authority Sign in as LAB01\\Administrator on WS2022-CA01:\n1# RUN ON: WS2022-CA01 (192.168.178.211) - Elevated PowerShell 2 3# Check and install IIS 4Get-WindowsFeature Web-Server 5Install-WindowsFeature Web-Server -IncludeManagementTools 6 7# Install the CA role and Web Enrollment 8Install-WindowsFeature ` 9 -Name ADCS-Cert-Authority ` 10 -IncludeManagementTools ` 11 -IncludeAllSubFeature 12 13Install-WindowsFeature ADCS-Web-Enrollment -IncludeManagementTools 14 15# Verify installation 16Get-WindowsFeature ADCS-Cert-Authority, ADCS-Web-Enrollment, Web-Server | ` 17 Select-Object Name, Installed, DisplayName 18 19# Configure the Enterprise Root CA 20Install-AdcsCertificationAuthority ` 21 -CAType EnterpriseRootCA ` 22 -CACommonName \u0026#34;LAB01-Root-CA\u0026#34; ` 23 -CADistinguishedNameSuffix \u0026#34;DC=LAB01,DC=local\u0026#34; ` 24 -CryptoProviderName \u0026#34;RSA#Microsoft Software Key Storage Provider\u0026#34; ` 25 -KeyLength 4096 ` 26 -HashAlgorithmName SHA256 ` 27 -ValidityPeriod Years ` 28 -ValidityPeriodUnits 10 ` 29 -DatabaseDirectory \u0026#34;C:\\Windows\\system32\\CertLog\u0026#34; ` 30 -LogDirectory \u0026#34;C:\\Windows\\system32\\CertLog\u0026#34; ` 31 -Force 32 33# Configure Web Enrollment 34Install-AdcsWebEnrollment -Force 35 36# Verify 37Get-WindowsFeature ADCS-Web-Enrollment 38Get-Service W3SVC 39netstat -an | findstr :80 40 41# Test the Web Enrollment page 42Invoke-WebRequest ` 43 -Uri \u0026#34;http://localhost/certsrv\u0026#34; ` 44 -UseDefaultCredentials ` 45 | Select-Object StatusCode, StatusDescription The Web Enrollment page is available at http://WS2022-CA01.LAB01.local/certsrv.\nStep 6 - Secure RDP with Set-RDPCert.ps1 Create the script in SYSVOL on WS2022-AD-DNS:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3notepad \\\\LAB01.local\\SYSVOL\\LAB01.local\\scripts\\Set-RDPCert.ps1 Paste the following content into Notepad, save and close it:\n1#Requires -RunAsAdministrator 2\u0026lt;# 3.SYNOPSIS 4 Binds a CA-issued certificate to the RDP listener on every startup. 5.DESCRIPTION 6 Finds the most recent valid certificate in Cert:\\LocalMachine\\My issued by 7 LAB01-Root-CA for the local computer\u0026#39;s FQDN. If none is found, certificate 8 auto-enrollment is triggered. The selected certificate thumbprint is written 9 to the RDP-Tcp registry key and the Remote Desktop service is restarted. 10.NOTES 11 Deploy via SYSVOL and run as SYSTEM via Scheduled Task at startup. 12 Lab: LAB01.local - WS2022-AD-DNS / WS2022-CA01 13#\u0026gt; 14 15Set-StrictMode -Version Latest 16$ErrorActionPreference = \u0026#39;Stop\u0026#39; 17 18$LogFile = \u0026#34;C:\\Scripts\\Set-RDPCert.log\u0026#34; 19 20function Write-Log { 21 param([string]$Message) 22 $timestamp = Get-Date -Format \u0026#34;yyyy-MM-dd HH:mm:ss\u0026#34; 23 \u0026#34;$timestamp $Message\u0026#34; | Tee-Object -FilePath $LogFile -Append | Write-Host 24} 25 26Write-Log \u0026#34;=== Set-RDPCert.ps1 started ===\u0026#34; 27 28# 1. Determine the computer\u0026#39;s FQDN 29$fqdn = [System.Net.Dns]::GetHostEntry(\u0026#39;\u0026#39;).HostName 30Write-Log \u0026#34;FQDN: $fqdn\u0026#34; 31 32# 2. Find a valid certificate issued by LAB01-Root-CA 33$rdpCert = Get-ChildItem Cert:\\LocalMachine\\My | 34 Where-Object { 35 $_.Issuer -like \u0026#34;*LAB01-Root-CA*\u0026#34; -and 36 $_.Subject -like \u0026#34;*$fqdn*\u0026#34; -and 37 $_.NotAfter -gt (Get-Date) -and 38 $_.HasPrivateKey 39 } | 40 Sort-Object NotAfter -Descending | 41 Select-Object -First 1 42 43# 3. If no certificate is found, trigger auto-enrollment and retry 44if (-not $rdpCert) { 45 Write-Log \u0026#34;No valid certificate found - triggering auto-enrollment...\u0026#34; 46 \u0026amp; certutil -pulse | Out-Null 47 Start-Sleep -Seconds 30 48 49 $rdpCert = Get-ChildItem Cert:\\LocalMachine\\My | 50 Where-Object { 51 $_.Issuer -like \u0026#34;*LAB01-Root-CA*\u0026#34; -and 52 $_.Subject -like \u0026#34;*$fqdn*\u0026#34; -and 53 $_.NotAfter -gt (Get-Date) -and 54 $_.HasPrivateKey 55 } | 56 Sort-Object NotAfter -Descending | 57 Select-Object -First 1 58} 59 60if (-not $rdpCert) { 61 Write-Log \u0026#34;ERROR: No certificate available after auto-enrollment. Aborting.\u0026#34; 62 exit 1 63} 64 65Write-Log \u0026#34;Certificate selected: $($rdpCert.Subject)\u0026#34; 66Write-Log \u0026#34;Thumbprint : $($rdpCert.Thumbprint)\u0026#34; 67Write-Log \u0026#34;Valid until: $($rdpCert.NotAfter)\u0026#34; 68 69# 4. Grant Network Service read access to the private key 70$keyPath = $rdpCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName 71if ($keyPath) { 72 $keyFile = Get-ChildItem \u0026#34;$env:ProgramData\\Microsoft\\Crypto\\RSA\\MachineKeys\\$keyPath\u0026#34; ` 73 -ErrorAction SilentlyContinue 74 if ($keyFile) { 75 $acl = Get-Acl $keyFile.FullName 76 $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( 77 \u0026#34;NT AUTHORITY\\NETWORK SERVICE\u0026#34;, \u0026#34;Read\u0026#34;, \u0026#34;Allow\u0026#34;) 78 $acl.AddAccessRule($rule) 79 Set-Acl -Path $keyFile.FullName -AclObject $acl 80 Write-Log \u0026#34;Private key ACL updated for NETWORK SERVICE.\u0026#34; 81 } 82} 83 84# 5. Bind the certificate to the RDP listener 85$rdpReg = \u0026#34;HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\u0026#34; 86Set-ItemProperty -Path $rdpReg -Name SSLCertificateSHA1Hash -Value $rdpCert.Thumbprint 87Write-Log \u0026#34;Registry updated with new thumbprint.\u0026#34; 88 89# 6. Restart Remote Desktop Services to apply the new certificate 90Write-Log \u0026#34;Restarting TermService...\u0026#34; 91Restart-Service -Name TermService -Force 92Write-Log \u0026#34;TermService restarted.\u0026#34; 93 94Write-Log \u0026#34;=== Set-RDPCert.ps1 completed successfully ===\u0026#34; Then copy the script locally and register the Scheduled Task on both servers:\n1# RUN ON: BOTH SERVERS - WS2022-AD-DNS + WS2022-CA01 - Elevated PowerShell 2 3# Create local copy 4If (-Not (Test-Path \u0026#34;C:\\Scripts\u0026#34;)) { New-Item -ItemType Directory -Path \u0026#34;C:\\Scripts\u0026#34; -Force } 5Copy-Item ` 6 -Path \u0026#34;\\\\LAB01.local\\SYSVOL\\LAB01.local\\scripts\\Set-RDPCert.ps1\u0026#34; ` 7 -Destination \u0026#34;C:\\Scripts\\Set-RDPCert.ps1\u0026#34; ` 8 -Force 9 10Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine -Force 11 12# Register the Scheduled Task 13$action = New-ScheduledTaskAction ` 14 -Execute \u0026#34;powershell.exe\u0026#34; ` 15 -Argument \u0026#34;-NonInteractive -ExecutionPolicy Bypass -File C:\\Scripts\\Set-RDPCert.ps1\u0026#34; 16$trigger = New-ScheduledTaskTrigger -AtStartup 17$principal = New-ScheduledTaskPrincipal -UserId \u0026#34;SYSTEM\u0026#34; -LogonType ServiceAccount -RunLevel Highest 18$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) ` 19 -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 5) -StartWhenAvailable $true 20 21Register-ScheduledTask ` 22 -TaskName \u0026#34;Set-RDPCertificate\u0026#34; -TaskPath \u0026#34;\\LAB01\\\u0026#34; ` 23 -Action $action -Trigger $trigger -Principal $principal -Settings $settings ` 24 -Description \u0026#34;Binds CA certificate to RDP on every startup\u0026#34; -Force 25 26# Run immediately for first-time installation 27Start-ScheduledTask -TaskPath \u0026#34;\\LAB01\\\u0026#34; -TaskName \u0026#34;Set-RDPCertificate\u0026#34; Step 7 - Trust the Root CA Certificate on Mac Mini M1 1# RUN ON: Mac Mini M1 - Terminal (macOS) 2 3# Download the Root CA certificate 4curl -o ~/Downloads/LAB01-Root-CA.cer http://192.168.178.211/LAB01-Root-CA.cer 5 6# Install in the System Keychain as a trusted root 7sudo security add-trusted-cert \\ 8 -d \\ 9 -r trustRoot \\ 10 -k /Library/Keychains/System.keychain \\ 11 ~/Downloads/LAB01-Root-CA.cer Add both VMs in Microsoft Remote Desktop:\n192.168.178.210 - LAB01\\Administrator - WS2022-AD-DNS 192.168.178.211 - LAB01\\Administrator - WS2022-CA01 RDP connections will no longer display certificate warnings.\nVerification 1# WS2022-AD-DNS - full DC diagnostics 2dcdiag /test:Replications /test:DNS /test:KnowsOfRoleHolders /v 3 4# WS2022-CA01 - CA and Web Enrollment 5Get-Service certsvc | Select-Object Name, Status 6Get-WindowsFeature ADCS-Web-Enrollment 7Get-Service W3SVC 8netstat -an | findstr :80 9certutil -CRL 10certutil -verifystore Root \u0026#34;LAB01-Root-CA\u0026#34; 11 12# Both servers - verify the RDP certificate 13$rdpReg = \u0026#34;HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\u0026#34; 14$thumb = (Get-ItemProperty $rdpReg -Name SSLCertificateSHA1Hash).SSLCertificateSHA1Hash 15Get-ChildItem Cert:\\LocalMachine\\My | Where-Object { $_.Thumbprint -eq $thumb } | 16 Select-Object Subject, Thumbprint, NotAfter, Issuer Download The complete manual, including all commands, the full Set-RDPCert.ps1 script, troubleshooting and reference material, is also available as a Word document:\nWS2022-Lab-Manual-EN.docx\n","date":"2. April 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-home-lab-ad-dns-ca-rdp.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/ws2022-home-lab-ad-dns-ca-rdp/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/de/tags/windows-server-2022/"},{"title":"Proxmox","url":"/de/tags/proxmox/"},{"title":"Active Directory","url":"/de/tags/active-directory/"},{"title":"DNS","url":"/de/tags/dns/"},{"title":"Certificate Authority","url":"/de/tags/certificate-authority/"},{"title":"PKI","url":"/de/tags/pki/"},{"title":"Group Policy","url":"/de/tags/group-policy/"},{"title":"RDP","url":"/de/tags/rdp/"},{"title":"PowerShell","url":"/de/tags/powershell/"},{"title":"Lab","url":"/de/tags/lab/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"Security","url":"/de/tags/security/"}],"timestamp":1775116800,"title":"Windows Server 2022 Home Lab — AD DS, DNS, CA and Secured RDP"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/de/categories/windows/"}],"content":" Download as Word document\nThis is part 2 of the series on building a Windows DevOps lab in Proxmox. In part 1 I described how to create the VM. In this article I prepare the VM as a reusable Proxmox template. All future VMs — the CA server, member servers and other roles — will be cloned from this template.\nImportant: After Sysprep, never start the VM again. If you do, the generalization is consumed and the template must be rebuilt from scratch.\nOverview of steps Install VirtIO guest drivers Windows Update — fully patch the OS Apply performance optimizations Basic settings — timezone, RDP, IE Enhanced Security Sysprep — generalize and shut down Convert to template in Proxmox Step 1 — Install VirtIO guest drivers Windows Server 2022 requires VirtIO drivers to function correctly on Proxmox. They cover the storage controller, network adapter, memory ballooning, display and other paravirtualized devices.\nOpen File Explorer in the VM and navigate to the VirtIO CD drive (D: or E:). Scroll down in the file list:\nVirtIO CD drive contents — virtio-win-guest-tools.exe is at the bottom of the list (30MB Application)\nDouble-click virtio-win-guest-tools.exe (the Application, approximately 30MB). This installs all required drivers in one go. Accept the default settings and wait for the installation to complete.\nTip: Always use virtio-win-guest-tools.exe instead of individual drivers from the subfolders. It is faster and ensures nothing is missed.\nStep 2 — Windows Update Fully patching the OS before Sysprep ensures that every cloned VM starts already up to date without having to run updates individually.\n2.1 Starting Windows Update Open Settings → Update \u0026amp; Security → Windows Update and click Check for updates. Available updates will begin to download and install:\nWindows Update downloading and installing multiple updates — let this run undisturbed\n2.2 Known issue — Windows Update GUI freezes The Windows Update GUI in Server 2022 VMs is unreliable. Buttons regularly stop responding and downloads appear to hang. This is a known issue in VM environments.\nWindows Update GUI with Install Now button not responding — switch to PowerShell\nNote: When the Windows Update GUI freezes, do not try to resolve this via the GUI. Use the PowerShell method below instead.\n2.3 Recommended method — PSWindowsUpdate via PowerShell Open PowerShell as Administrator (right-click Start → Windows PowerShell (Admin)):\nPowerShell (Admin) open and ready\nStep 1 — Install the PSWindowsUpdate module:\n1Install-Module PSWindowsUpdate -Force -Confirm:$false PSWindowsUpdate module installing — type Y when prompted to install the NuGet provider or trust PSGallery\nType Y and press Enter when prompted to install the NuGet provider or trust PSGallery.\nStep 2 — Import the module and install all updates:\n1Import-Module PSWindowsUpdate 2Get-WindowsUpdate -Install -AcceptAll -AutoReboot PSWindowsUpdate running — shows status per KB article\nThe VM will restart automatically if required. Updates are applied during the restart:\nWindows applying updates during restart — do not interrupt this\nAfter the restart, log back in and run the command again until there are no more updates:\n1Get-WindowsUpdate -Install -AcceptAll -AutoReboot Windows Update showing \u0026ldquo;You\u0026rsquo;re up to date\u0026rdquo; after the first round\nRun Windows Update a second time to confirm nothing was missed. Some updates only become available after others have been installed:\nWindows Update confirmed up to date after second check — OS is fully patched\nNote: Some updates (such as KB890830 — Windows Malicious Software Removal Tool) sometimes fail persistently in VM environments. This is known and harmless — it has no impact on server functionality and can safely be skipped.\nStep 3 — Performance optimizations Apply these adjustments in PowerShell (Admin) before Sysprep so that every cloned VM automatically benefits from them:\n1# Set high performance power plan 2powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c 3 4# Disable Windows Search indexing — not needed on servers 5Set-Service WSearch -StartupType Disabled 6Stop-Service WSearch -Force 7 8# Disable SysMain / Superfetch — not useful in VMs 9Set-Service SysMain -StartupType Disabled 10Stop-Service SysMain -Force Tip: Also change the VM Display from Default to VirtIO-GPU in the Proxmox Hardware tab. This significantly improves console responsiveness.\nStep 4 — Basic settings Run these commands in PowerShell (Admin):\n1# Set timezone to Amsterdam 2Set-TimeZone -Name \u0026#34;W. Europe Standard Time\u0026#34; 3 4# Enable RDP 5Set-ItemProperty -Path \u0026#39;HKLM:\\System\\CurrentControlSet\\Control\\Terminal Server\u0026#39; ` 6 -Name \u0026#34;fDenyTSConnections\u0026#34; -Value 0 7Enable-NetFirewallRule -DisplayGroup \u0026#34;Remote Desktop\u0026#34; 8 9# Disable NLA for easier lab access 10Set-ItemProperty -Path \u0026#39;HKLM:\\System\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\u0026#39; ` 11 -Name \u0026#34;UserAuthentication\u0026#34; -Value 0 12 13# Disable IE Enhanced Security Configuration 14$AdminKey = \u0026#34;HKLM:\\SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}\u0026#34; 15$UserKey = \u0026#34;HKLM:\\SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}\u0026#34; 16Set-ItemProperty -Path $AdminKey -Name \u0026#34;IsInstalled\u0026#34; -Value 0 17Set-ItemProperty -Path $UserKey -Name \u0026#34;IsInstalled\u0026#34; -Value 0 Note: After enabling RDP via the registry, a restart is required before port 3389 starts listening. Run Restart-Computer and wait for the VM to come back.\nVerify RDP connection After the restart, verify RDP from the Proxmox host shell:\nPing successful and nc -zv confirms port 3389 open — RDP is working correctly. Get-NetFirewallRule shows all Remote Desktop rules as Enabled: True\nThe screenshot shows:\nping 192.168.178.11 — responds with 0% packet loss, network is working nc -zv 192.168.178.11 3389 — port open, RDP is listening Get-NetFirewallRule — all Remote Desktop firewall rules show Enabled: True Tip: If nc shows \u0026ldquo;Connection refused\u0026rdquo; after enabling RDP, a restart is required. RDP only starts listening after a restart.\nStep 5 — Sysprep Sysprep generalizes the installation by removing all machine-specific identifiers, including the Security Identifier (SID), computer name and hardware references. This is essential — without Sysprep every cloned VM would share the same SID, causing Active Directory conflicts.\nThis is the point of no return. After Sysprep the VM shuts itself down. Never start the VM again after this. Go directly to Proxmox and convert it to a template.\nRun in PowerShell (Admin) or the Command Prompt:\n1C:\\Windows\\System32\\Sysprep\\sysprep.exe /oobe /generalize /shutdown Flag Purpose /generalize Removes unique system identifiers — SID, computer name, hardware IDs /oobe Configures Windows to run first-time setup on next boot /shutdown Automatically shuts down the VM after completion Sysprep takes approximately 2–5 minutes. The VM shuts itself down when done.\nStep 6 — Convert to template in Proxmox Once the VM has shut itself down after Sysprep, in the Proxmox left panel:\nRight-click the VM (e.g. 900 WS2022-TEMPLATE-BASE) Select Convert to template Confirm the action The VM icon changes to a template icon (stacked pages). The VM can no longer be started directly — only cloned.\nCloning the template for new VMs To create a new VM from the template:\nRight-click the template in the Proxmox left panel Select Clone Set Mode to Full Clone — not Linked Clone Enter the new VM name according to the naming convention (e.g. WS2022-LAB02-CA) Set the VM ID Click Clone Note: Always use Full Clone. Linked clones depend on the template disk and cannot function independently. Full clones are completely independent VMs.\nAfter cloning, the new VM boots into Windows OOBE (first-time setup) where you configure the Administrator password, computer name and network settings before joining the domain.\nSummary checklist # Task Done 1 Install virtio-win-guest-tools.exe from VirtIO CD drive ☐ 2 Run PSWindowsUpdate until fully patched — repeat after each restart ☐ 3 Set high performance power plan via powercfg ☐ 3 Disable WSearch and SysMain services ☐ 3 Change Proxmox Display to VirtIO-GPU in Hardware tab ☐ 4 Set timezone to W. Europe Standard Time ☐ 4 Enable RDP and disable NLA ☐ 4 Disable IE Enhanced Security Configuration ☐ 4 Restart and verify RDP on port 3389 via nc ☐ 5 Run Sysprep: /oobe /generalize /shutdown ☐ 6 Convert VM to template in Proxmox immediately after shutdown ☐ ","date":"31. März 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-proxmox-template-preparation.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/ws2022-proxmox-template-preparation/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/de/tags/windows-server-2022/"},{"title":"Proxmox","url":"/de/tags/proxmox/"},{"title":"Virtualization","url":"/de/tags/virtualization/"},{"title":"Lab","url":"/de/tags/lab/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"VirtIO","url":"/de/tags/virtio/"},{"title":"Sysprep","url":"/de/tags/sysprep/"},{"title":"Template","url":"/de/tags/template/"},{"title":"PowerShell","url":"/de/tags/powershell/"}],"timestamp":1774944000,"title":"Windows Server 2022 in Proxmox — Template Preparation"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/de/categories/windows/"}],"content":" Download as Word document\nIn this article I describe step by step how I create a Windows Server 2022 VM in Proxmox VE 9.1.6. The guide is based on real-world experience and includes all corrections and lessons learned along the way. This is part 1 of a series on building a fully functional Windows DevOps lab in Proxmox.\nLab Environment Component Value Proxmox host macpro2013.local — Mac Pro 2013 Trashcan Proxmox version 9.1.6 RAM 128 GB Storage 3.6 TB NVMe (local-lvm pool) Network bridge vmbr0 — internal lab network (192.168.178.x) Proxmox WebUI https://192.168.178.205:8006 Why a CA Is Needed — the SSL Warning Anyone who opens the Proxmox WebUI via macpro2013.local in Safari will immediately see a certificate warning. Proxmox uses a self-signed certificate by default.\nSafari displays an SSL warning for macpro2013.local — this will be resolved once the Certificate Authority is set up\nThis is exactly the motivation to set up an internal Certificate Authority (CA) later. Once that is running, Proxmox can be issued a trusted certificate and the warning will disappear.\nPrerequisites Make sure the following ISO files are available in Proxmox local storage (Proxmox WebUI → local → ISO Images):\nWindows Server 2022 Evaluation: Windows_2022_SERVER_EVAL_x64FRE_en-us.iso VirtIO drivers: virtio-win-0.1.285.iso or newer Note: Both ISOs are required. Without the VirtIO ISO, Windows Setup cannot detect the disk or network adapter.\nVM Naming Use consistent names that include the OS version and all active roles. This lets you see at a glance what each VM does in the Proxmox panel.\nPattern Example Description WS2022-LAB{nn}-{ROLES} WS2022-LAB01-AD-DNS Lab VM with all active roles in the name WS2022-LAB{nn}-CA WS2022-LAB02-CA Certificate Authority VM WS2022-TEMPLATE-{NAME} WS2022-TEMPLATE-BASE Template VM — use VM ID 900+ Renaming a VM is done via the Proxmox host shell (the WebUI has no rename option):\n1ssh root@macpro2013.local 2qm set \u0026lt;VMID\u0026gt; --name \u0026lt;NIEUWE-NAAM\u0026gt; 3 4# Voorbeeld: 5qm set 100 --name WS2022-LAB01-AD-DNS Below you can see how the Proxmox panel looks after both VMs have been correctly created and renamed:\nProxmox panel with WS2022-LAB01-AD-DNS (VM 100) and WS2022-TEMPLATE-BASE (VM 900) correctly created\nCreating a VM — the Proxmox Wizard Click Create VM (blue button at the top right) and work through all tabs as described below.\nGeneral Tab Setting Value Notes Name WS2022-TEMPLATE-BASE Descriptive name including OS and role VM ID 900 Use 900+ for templates, 100+ for lab VMs Node macpro2013 Your Proxmox host OS Tab Setting Value Notes ISO Image Windows_2022_SERVER_EVAL_x64FRE_en-us.iso Select from local storage Type Microsoft Windows Must be set explicitly Version 11/2022/2025 Must be set explicitly Add VirtIO drivers ISO Enabled (checkbox) Adds a second CD drive for the VirtIO ISO VirtIO ISO virtio-win-0.1.285.iso Select from local storage Note: Type and Version must both be set manually. The checkbox for the VirtIO ISO adds a second CD drive — this is essential for loading storage and network drivers during Windows Setup.\nSystem Tab Setting Value Notes BIOS OVMF (UEFI) Required for Windows Server 2022 Machine pc-q35 Modern chipset required for TPM 2.0 SCSI Controller VirtIO SCSI single Best storage performance EFI Storage local-lvm Must be explicitly selected — no default TPM Storage local-lvm Must be explicitly selected — no default TPM Version v2.0 Required for Windows Server 2022 Note: EFI Storage and TPM Storage have no default value — both must be explicitly selected. Without these settings the VM will not boot correctly.\nDisks Tab Setting Value Notes Bus/Device SCSI Use together with VirtIO SCSI controller Storage local-lvm NVMe-backed pool Disk Size 60 GB Sufficient for OS, roles and tools Cache Write back Best performance on NVMe Discard Enabled Enables TRIM for SSD/NVMe storage IO Thread Enabled Improves disk throughput CPU Tab Setting Value Notes Sockets 1 Single socket Cores 2 Sufficient for all lab VM roles Type host Passes through the real host CPU — better performance than the default kvm64 Note: CPU Type must be set to host. The default kvm64 limits the available CPU instruction set features and reduces performance.\nMemory Tab Setting Value Notes Memory 4096 MB 4 GB per VM Minimum Memory 4096 MB Set equal to Memory to disable ballooning Ballooning Device Disabled Not well supported on Windows Note: Ballooning must be disabled for Windows VMs. Set Minimum Memory equal to Memory. In the hardware overview this is reflected as [balloon=0].\nNetwork Tab Setting Value Notes Bridge vmbr0 Internal lab network Model VirtIO (paravirtualized) Best performance — requires VirtIO drivers Firewall Enabled (leave as default) Leave enabled — mirrors production and builds troubleshooting skills Note: Leave the Proxmox firewall enabled on the network adapter. Disabling it may seem convenient but removes an important layer that mirrors real production environments. Troubleshooting through the firewall is a valuable skill.\nHardware Verification Before First Boot After clicking Finish, do not start the VM yet. First click the VM in the left panel and select Hardware. Verify that all settings match the tables above.\nVM 900 (WS2022-TEMPLATE-BASE) — Hardware tab with correct configuration. Note balloon=0, host CPU type, both ISOs present, 60G disk with writeback/discard/iothread, EFI and TPM present.\nCheck specifically:\nMemory: 4.00 GiB [balloon=0] — balloon=0 confirms that ballooning is off Processors: 2 (1 socket, 2 cores) [host] — confirms host CPU type BIOS: OVMF (UEFI) Machine: pc-q35 SCSI Controller: VirtIO SCSI single CD/DVD ide0: virtio-win ISO present CD/DVD ide2: Windows 2022 ISO present Hard Disk: 60G, cache=writeback, discard=on, iothread=1 Network: vmbr0, firewall=1 EFI Disk and TPM State present on local-lvm Starting the VM and Windows Boot Click Start and immediately open the Console. As soon as you see the following, click inside the console window first (to capture keyboard input) and press any key:\n1Press any key to boot from CD or DVD...... Note: If you are too late, the VM will fall through to PXE boot as shown below. Simply reset the VM and try again — be ready at the console before you click Start.\nPXE boot fallback when the CD boot prompt was missed — reset the VM and try again\nIf you catch the prompt in time, the Windows Boot Manager appears:\nWindows Boot Manager — select Windows Setup [EMS Enabled] and press Enter\nSelect Windows Setup [EMS Enabled] (already highlighted) and press Enter.\nEdition Selection At the edition selection screen, choose:\nWindows Server 2022 Datacenter (Desktop Experience)\nNote: Select Datacenter, not Standard. And Desktop Experience, not Core. Core has no GUI and is therefore unsuitable for this lab template.\nLoading the VirtIO Storage Driver On the \u0026ldquo;Where do you want to install the operating system?\u0026rdquo; screen, the disk list is empty. This is normal — Windows cannot see the VirtIO SCSI disk without the driver.\nWindows Setup shows no disk — the VirtIO SCSI driver must be loaded first\nSteps to load the driver:\nClick Load driver Click Browse Navigate to the VirtIO CD drive (D: or E:) Open the folder: vioscsi \\ w2k22 \\ amd64 Click OK Select Red Hat VirtIO SCSI pass-through controller Click Next The 60 GB disk now appears in the list. Select it and continue. The Windows installation begins:\nWindows Server 2022 installation in progress — 23% complete\nAfter Installation — Server Manager After installation and restart you land on the Server Manager Dashboard. Dismiss the Windows Admin Center notification (check \u0026ldquo;Don\u0026rsquo;t show this message again\u0026rdquo;):\nServer Manager Dashboard — Windows Server 2022 Datacenter successfully installed\nThe VM is now ready for the next step: template preparation as described in part 2.\nSummary Checklist # Task Done 1 Upload Windows Server 2022 ISO to Proxmox local storage ☐ 2 Upload VirtIO drivers ISO to Proxmox local storage ☐ 3 Create VM with correct settings in all wizard tabs ☐ 4 Verify hardware configuration in Proxmox Hardware tab before starting ☐ 5 Start VM — catch the CD boot prompt immediately in the Console ☐ 6 Select Windows Server 2022 Datacenter (Desktop Experience) ☐ 7 Load VirtIO SCSI driver (vioscsi/w2k22/amd64) before disk selection ☐ 8 Complete Windows installation ☐ 9 Continue to part 2 — Template Preparation ☐ ","date":"30. März 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-proxmox-vm-creation.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/ws2022-proxmox-vm-creation/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/de/tags/windows-server-2022/"},{"title":"Proxmox","url":"/de/tags/proxmox/"},{"title":"Virtualization","url":"/de/tags/virtualization/"},{"title":"Lab","url":"/de/tags/lab/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"VirtIO","url":"/de/tags/virtio/"},{"title":"VM","url":"/de/tags/vm/"}],"timestamp":1774857600,"title":"Windows Server 2022 in Proxmox — Creating a VM"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/de/categories/windows/"}],"content":"This article describes step by step how I installed Active Directory Domain Services (AD DS) and DNS on a Windows Server 2022 Datacenter VM in a VMware Fusion lab environment. The result is a fully functional domain controller for the domain lab.local, serving as the foundation for a Windows DevOps lab.\nEnvironment Component Value Virtualization VMware Fusion (macOS) Guest OS Windows Server 2022 Datacenter (Desktop Experience) Hostname DC01 Domain name lab.local NetBIOS name LAB Lab network adapter Ethernet1 — 172.16.37.10 (static IP) Internet adapter Ethernet0 — DHCP via VMware NAT Step 1 — Configure Networking Before installing Active Directory, the domain controller needs a static IP address. AD DS and DNS depend on a stable address.\nThe VM has two network adapters: one for internet access (NAT, DHCP) and one for the lab network (Private to my Mac, static IP).\n1.1 Add a Second Network Card in VMware Fusion The VM must be powered off to add a second network adapter. Go to VM \u0026gt; Settings and add a new Network Adapter. Set it to Private to my Mac.\nVMware Fusion network settings: Private to my Mac creates an isolated internal lab network\n1.2 Set a Static IP on Ethernet1 Open Control Panel \u0026gt; Network Connections. Right-click Ethernet1 \u0026gt; Properties \u0026gt; Internet Protocol Version 4 (TCP/IPv4) \u0026gt; Properties.\nFill in the following values:\nIP address: 172.16.37.10 Subnet mask: 255.255.255.0 Default gateway: leave empty Preferred DNS server: 172.16.37.10 (DC01 points to itself) IPv4 Properties: static IP 172.16.37.10 for the lab network. Leave gateway empty — internet runs through Ethernet0.\nNote: Ethernet0 (internet) stays on DHCP. Only Ethernet1 gets a static IP. This way the VM works anywhere — at home, at work, at a relative\u0026rsquo;s place — because the internal lab network is completely isolated.\n1.3 Verification Open PowerShell and verify:\n1Get-NetIPAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, IPAddress Expected output:\n1Ethernet1 172.16.37.10 2Ethernet0 192.168.x.x (varies via DHCP) Step 2 — Install the AD DS Role via Server Manager 2.1 Open Server Manager Server Manager opens automatically after login. Dismiss the Windows Admin Center notification.\nCheck \u0026ldquo;Don\u0026rsquo;t show this message again\u0026rdquo; and close\nServer Manager Dashboard — the starting point for all server management\n2.2 Add a Role Click Add roles and features in the Dashboard.\nChoose Role-based or feature-based installation. DC01 is already shown as the destination server.\nDC01 is already selected in the server pool. Click Next.\n2.3 Select Active Directory Domain Services Check Active Directory Domain Services. A popup will appear asking to add required features — click Add Features.\nCheck Active Directory Domain Services in the list\nNo additional features needed. Everything required is already selected.\n2.4 AD DS Information Page Information page about AD DS. Important: DNS will be installed automatically.\n2.5 Confirm Installation Check Restart the destination server automatically if required and click Install.\nOverview of all components that will be installed\n2.6 Installation Successful Installation succeeded on DC01. Now click the blue link \u0026ldquo;Promote this server to a domain controller\u0026rdquo;.\nImportant: The AD DS role is now installed but DC01 is not yet a domain controller. The link \u0026ldquo;Promote this server to a domain controller\u0026rdquo; is the next step.\nStep 3 — Configure the Domain Controller 3.1 Deployment Configuration Choose Add a new forest and enter as Root domain name: lab.local\nChoose Add a new forest for a completely new domain. Domain name: lab.local\n3.2 Domain Controller Options Functional levels are set to Windows Server 2016 — fine for a modern lab. DNS server and Global Catalog are checked.\nSet the DSRM password. This is an emergency password for Active Directory recovery — store it safely.\nFunctional level 2016, DNS Server and Global Catalog checked. Fill in the DSRM password.\n3.3 DNS Options A warning appears that a DNS delegation cannot be created. This is normal for an internal lab domain like lab.local that doesn\u0026rsquo;t exist on the public internet. Leave Create DNS delegation unchecked.\nThe DNS delegation warning is normal for a private lab domain. No action required.\n3.4 NetBIOS Name Windows automatically sets the NetBIOS name to LAB. Wait for the field to populate.\nWait for the NetBIOS name to appear automatically\nNetBIOS name is LAB — without .local extension. You\u0026rsquo;ll log in later as LAB\\Administrator.\n3.5 File Locations The default locations are fine for a lab.\nDefault locations for AD DS database (NTDS) and SYSVOL. Leave as is.\n3.6 Review Options Verify the summary:\nDomain: lab.local NetBIOS: LAB DNS Server: Yes Global Catalog: Yes Create DNS Delegation: No Summary of the configuration. Everything looks correct — click Next.\n3.7 Prerequisites Check The green checkmark confirms all checks have passed. Yellow warnings are normal for a lab.\nGreen checkmark: All prerequisite checks passed. Click Install.\n3.8 Installation The server configures DNS and restarts automatically.\nDNS Server service is being configured. DC01 will restart automatically when done.\nAfter the reboot: Log in as LAB\\Administrator instead of the local Administrator.\nStep 4 — Verification After Installation Open PowerShell as Administrator and verify:\n1# Domain information 2Get-ADDomain 3 4# Domain controller information 5Get-ADDomainController 6 7# Check DNS zones 8Get-DnsServerZone 9 10# Test name resolution 11Resolve-DnsName dc01.lab.local If Resolve-DnsName dc01.lab.local returns IP address 172.16.37.10, DNS is working correctly.\nNext Steps Now that DC01 is functioning as a domain controller for lab.local, the next steps are:\nCA01 — Certificate Authority for internal TLS certificates (Jenkins, Harbor, Nexus) Join other VMs to lab.local — point DNS to 172.16.37.10 on each new VM Create Organisational Units and service accounts for Jenkins, Ansible and Nexus ","date":"27. März 2026","img":"https://1552afcb.notes-6if.pages.dev/images/windows-server-2022-ad-dns.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/windows_server_2022_ad_dns/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Windows","url":"/de/tags/windows/"},{"title":"Active Directory","url":"/de/tags/active-directory/"},{"title":"DNS","url":"/de/tags/dns/"},{"title":"Windows Server 2022","url":"/de/tags/windows-server-2022/"},{"title":"VMware","url":"/de/tags/vmware/"},{"title":"Lab","url":"/de/tags/lab/"},{"title":"Devops","url":"/de/tags/devops/"},{"title":"Domain Controller","url":"/de/tags/domain-controller/"}],"timestamp":1774566000,"title":"Windows Server 2022 — Active Directory and DNS Installation"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[],"content":"Troubleshooting LDAPS Connectivity: Using Built-in Windows Tools to Audit Firewall Compliance As organizations move toward more secure infrastructure, migrating from standard LDAP (Port 389) to LDAPS (Port 636) is a critical step. However, this transition often reveals \u0026ldquo;silent\u0026rdquo; failures where a network firewall might allow the initial connection but block the subsequent SSL/TLS handshake.\nAt Van den Boom Online, we understand that a smooth user experience starts with a robust backend. In this guide, we’ll show you how to perform packet capturing using only built-in Windows tools to verify if your traffic is reaching its destination or being dropped by security appliances.\nWhy Packet Capture for LDAPS? When a connection fails, the error message is often a generic \u0026ldquo;Server Unavailable.\u0026rdquo; By capturing the packets, you can see the exact stage of failure:\nTCP Three-Way Handshake: Is the server even responding to the initial SYN request?\nTLS Client Hello: Is the client sending its encryption requirements?\nTLS Server Hello: Is the server responding with its certificate, or is the connection being reset (RST) by a firewall?\nStep 1: Capturing Traffic with Pktmon Since Windows 10 (Version 2004) and Windows Server 2019, Microsoft has included a powerful tool called Packet Monitor (Pktmon). You don\u0026rsquo;t need to install third-party software like Wireshark on a sensitive server to get the data you need.\nOpen an Elevated Command Prompt Right-click your Command Prompt or PowerShell and select Run as Administrator.\nSet a Filter for LDAPS To avoid \u0026ldquo;noise\u0026rdquo; from other background traffic, filter specifically for Port 636:\n1pktmon filter add -p 636 Start the Capture Run the following command to begin logging. The \u0026ndash;etw flag ensures it captures events in a format Windows can process: 1pktmon start --etw Now, attempt your LDAPS login or connection. Once the failure occurs, move to the next step.\nStop the Capture 1pktmon stop Step 2: Converting the Data for Analysis The resulting file (PktMon.etl) is a binary format. To make it readable for an AI tool or for manual inspection, you can convert it to a text format or a Wireshark-compatible file.\nTo convert to a text file for quick analysis:\n1pktmon format PktMon.etl \u0026gt; ldaps_analysis.txt Now let an AI tool analyse the text file.\nStep 3: What to Look For Once you open your log, look for the following sequence to determine if the firewall is the culprit:\nSYN -\u0026gt; SYN-ACK -\u0026gt; ACK: If you see this, the TCP layer is open. Your firewall allows basic connectivity.\nClient Hello: The client sends this to start the TLS process.\nMissing Server Hello: If you see a \u0026ldquo;Client Hello\u0026rdquo; followed by a TCP RST (Reset) or no response at all, your firewall is likely performing \u0026ldquo;Deep Packet Inspection\u0026rdquo; (DPI) and blocking the encrypted traffic because it doesn\u0026rsquo;t recognize the certificate or the TLS version.\nConclusion Connectivity issues shouldn\u0026rsquo;t be a guessing game. By using pktmon, you can prove exactly where the chain breaks. If you see a successful TCP handshake but a failed TLS \u0026ldquo;Hello\u0026rdquo; exchange, you have the evidence needed to request a firewall policy change from your network team.\nAre you looking to secure your online platforms or optimize your server communication? Van den Boom Online provides the technical expertise to ensure your digital infrastructure is both fast and secure. Contact us today to learn more.\n","date":"18. Januar 2026","img":"https://1552afcb.notes-6if.pages.dev/images/windows-packet-capturing-ldaps.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/windows_packet_capturing/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Windows","url":"/de/tags/windows/"},{"title":"LDAPS","url":"/de/tags/ldaps/"},{"title":"TLS","url":"/de/tags/tls/"},{"title":"Networking","url":"/de/tags/networking/"},{"title":"Security","url":"/de/tags/security/"},{"title":"Pktmon","url":"/de/tags/pktmon/"}],"timestamp":1768763941,"title":"Windows Packet Capturing for LDAPS Analysis"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[],"content":"Create a Ubuntu Virtual Machine with: 32 GB RAM 8 cores 120 GB HD\nStep-by-step: Install AWX 24.6.1 on Minikube (Ubuntu)\n🔧 1. System Preparation\n1$ sudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y 2$ sudo apt install -y curl wget apt-transport-https ca-certificates gnupg lsb-release software-properties-common 3$ sudo timedatectl set-timezone Europe/Amsterdam 📦 2. Install Docker (Minikube backend)\n1$ curl -fsSL https://get.docker.com | sudo bash 2$ sudo usermod -aG docker $USER 3$ newgrp docker # Activate group without reboot 4 5Enable and start Docker: 6$ sudo systemctl enable docker 7$ sudo systemctl start docker 8 9Test: 10$ docker run hello-world 🧱 3. Install Minikube\n1$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 2$ sudo install minikube-linux-amd64 /usr/local/bin/minikube 3 4Test: 5$ minikube version ⚙️ 4. Install kubectl (Kubernetes CLI)\n1$ curl -LO \u0026#34;https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\u0026#34; 2$ sudo install kubectl /usr/local/bin/kubectl 3 4Test: 5$ kubectl version --client 🚀 5. Start Minikube\n1$ minikube start --cpus=4 --memory=8192 --driver=docker 2 3Optional: Set as default 4$ minikube config set memory 8192 5$ minikube config set cpus 4 6$ minikube config set driver docker 📁 6. Install AWX Operator (matching 24.6.1)\n1$ git clone https://github.com/ansible/awx-operator.git 2$ cd awx-operator 3$ git checkout 2.14.0 # Matches AWX 24.6.1 4 5Install required tools: 6$ sudo apt install -y make 7 8Install the operator: 9$ make deploy 10 11Verify: 12$ kubectl get pods -n awx 📄 7. Create AWX Instance (CR)\nCreate a file awx.yaml:\n1apiVersion: awx.ansible.com/v1beta1 2kind: AWX 3metadata: 4 name: awx 5spec: 6 service_type: nodeport 7 ingress_type: none 8 image: quay.io/ansible/awx 9 image_version: 24.6.1 10 postgres_storage_class: standard 11 postgres_resource_requirements: 12 requests: 13 memory: 512Mi 14 cpu: 250m 15 limits: 16 memory: 1Gi 17 cpu: 500m 18 web_resource_requirements: 19 requests: 20 memory: 512Mi 21 cpu: 250m 22 limits: 23 memory: 2Gi 24 cpu: 1 25 26Then apply it: 27$ kubectl apply -f awx.yaml -n awe 28 29Watch deployment: 30$ kubectl get awx -n awx 31$ kubectl get pods -n awx -w 32 33$ kubectl get svc -n awx 🌐 8. Access AWX Web UI\n1Get the NodePort: 2$ kubectl get svc -n awx | grep awx-service 3 4Example output: 5awx-service NodePort 10.0.0.94 \u0026lt;none\u0026gt; 8052:30437/TCP 5m 6awx-service NodePort 10.98.159.10 \u0026lt;none\u0026gt; 80:30153/TCP 5m29s 7 8Then: 9$ minikube ip 10 11Get NodePort: 12$ kubectl get svc awx-service -n awx -o yaml 13 14$ minikube service awx-service -n awx 15 16Or open in browser: 17http://\u0026lt;your-server-ip\u0026gt;:\u0026lt;NodePort\u0026gt; 18http://192.168.49.2:30153/ 🔐 9. Login credentials Get admin password:\n1$ kubectl get secret awx-admin-password -n awx -o jsonpath=\u0026#34;{.data.password}\u0026#34; | base64 --decode \u0026amp;\u0026amp; echo 2* Username: admin 3* Password: output from above 🧼 10. (Optional) Enable Minikube dashboard Kubernetes Dashboard\n1$ minikube dashboard Step-by-Step: Auto-start AWX on Minikube after Reboot\n🔁 1. Enable Docker to start at boot\n1$ sudo systemctl enable docker 🚀 2. Create a systemd service to auto-start Minikube Create a new systemd unit:\n1$ sudo vim /etc/systemd/system/minikube.service 2Paste this: 3 4[Unit] 5Description=Minikube K8s Cluster 6After=docker.service 7Requires=docker.service 8 9[Service] 10Type=oneshot 11ExecStart=/usr/local/bin/minikube start --driver=docker 12RemainAfterExit=yes 13User=your-username 14Environment=HOME=/home/your-username 15WorkingDirectory=/home/your-username 16 17[Install] 18WantedBy=multi-user.target 19 20🔧 Replace your-username with your actual Linux username. 21 22Save and run: 23$ sudo systemctl daemon-reexec 24$ sudo systemctl daemon-reload 25$ sudo systemctl enable minikube.service 26 27Test it manually: 28$ sudo systemctl start minikube.service 29 30$ kubectl get pods -n awx -w 31NAME READY STATUS RESTARTS AGE 32awx-migration-24.6.1-pn969\t0/1 Completed 0 21m 33awx-operator-controller-manager-68699bb54-pscct 2/2 Running 2 (64s ago) 68m 34awx-postgres-15-0 1/1 Running 1 (58s ago) 26m 35awx-task-86d87f596c-xm8wx 4/4 Running 4 (62s ago) 25m 36awx-web-7c76dcb5b8-ctmrf 3/3 Running 3 (54s ago) 25m 🛠️ 3. Ensure AWX Operator and AWX pods auto-recover Kubernetes handles pod recovery automatically. As long as Minikube starts correctly and the AWX Operator was deployed with: make deploy …it will recreate your AWX custom resource and pods on reboot. You can confirm with:\n1$ kubectl get pods -n awx 🌐 4. Make NodePort consistent (optional) Kubernetes assigns a random NodePort unless you explicitly set it. To make access reliable:\n1$ kubectl patch svc awx-service -n awx --type=\u0026#39;json\u0026#39; -p=\u0026#39;[ 2 {\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/type\u0026#34;, \u0026#34;value\u0026#34;:\u0026#34;NodePort\u0026#34;}, 3 {\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/selector\u0026#34;, \u0026#34;value\u0026#34;:{ 4 \u0026#34;app.kubernetes.io/component\u0026#34;: \u0026#34;awx\u0026#34;, 5 \u0026#34;app.kubernetes.io/managed-by\u0026#34;: \u0026#34;awx-operator\u0026#34;, 6 \u0026#34;app.kubernetes.io/name\u0026#34;: \u0026#34;awx-web\u0026#34; 7 }}, 8 {\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/ports/0/nodePort\u0026#34;, \u0026#34;value\u0026#34;:31082} 9]\u0026#39; 10 11 12$ vim awx-nodeport-service.yaml 13 14apiVersion: v1 15kind: Service 16metadata: 17 name: awx-service 18 namespace: awx 19spec: 20 type: NodePort 21 selector: 22 app: awx # Make sure this matches your pod labels 23 ports: 24 - protocol: TCP 25 port: 80 # Service port inside the cluster 26 targetPort: 8052 # Port your pod/container listens on 27 nodePort: 31082 # The static NodePort you want to assign 28 29Re-apply: 30$ kubectl apply -f awx-nodeport-service.yaml 31 32Then your UI is always at: 33http://\u0026lt;server-ip\u0026gt;:31082 🧪 5. Verify after reboot Reboot the server:\n1$ sudo reboot 2 3After boot: 4$ minikube status 5$ kubectl get pods -n awx Check UI:\n1$ minikube ip 2http://\u0026lt;your-server-ip\u0026gt;:31082 ","date":"2. Juli 2025","img":"https://1552afcb.notes-6if.pages.dev/images/ansible-awx-minikube.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/ansible_awx/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Install","url":"/de/tags/install/"},{"title":"Ansible","url":"/de/tags/ansible/"},{"title":"Minikube","url":"/de/tags/minikube/"},{"title":"Ubuntu","url":"/de/tags/ubuntu/"},{"title":"AWX","url":"/de/tags/awx/"}],"timestamp":1751456125,"title":"Install Ansible AWX 24.6.1 in Minikube on Ubuntu 24.04.2 LTS in a Single VM"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[],"content":"Attention: I have not been able to make it restart automatically after a reboot! Perhaps it is better to look into making it run in Minikube? Create a Red Hat 9 Virtual Machine with: 32 GB RAM 8 cores 120 GB HD\n1$ sudo hostnamectl hostname aap.vandenboom.local Download the Ansible Automation Platform 2.5 Containerized Setup Bundle from: https://access.redhat.com/downloads/content/480/ver=2.5/rhel---9/2.5/x86_64/product-software\n1$ tar zxvf ansible*.tar.gz 2 3$ sudo vim /etc/hosts 4localhost aap.vandenboom.local 5 6$ ping aap.vandenboom.local 7 8$ sudo dnf install -y podman git python3-pip rsync tar jq unzip 9 10$ podman login registry.redhat.io 11 12$ sudo dnf install ansible-core wget 13 14$ python3 -m pip install virtualenv 15$ pip3 install ansible 16 17$ vim inventory 18Edit the settings as seen below 19 20$ time ansible-playbook -i inventory ansible.containerized_installer.install -K This is the contents of the file: ./inventory\n1# This is the AAP enterprise installer inventory file 2# Please consult the docs if you\u0026#39;re unsure what to add 3# For all optional variables please consult the included README.md 4# or the Red Hat documentation: 5# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation 6 7# This section is for your AAP Gateway host(s) 8# ----------------------------------------------------- 9[automationgateway] 10#gateway1.example.org 11#gateway2.example.org 12aap.vandenboom.local ansible_connection=local 13 14# This section is for your AAP Controller host(s) 15# ----------------------------------------------------- 16[automationcontroller] 17#controller1.example.org 18#controller2.example.org 19aap.vandenboom.local ansible_connection=local 20 21# This section is for your AAP Execution host(s) 22# ----------------------------------------------------- 23[execution_nodes] 24#hop1.example.org receptor_type=\u0026#39;hop\u0026#39; 25#exec1.example.org 26#exec2.example.org 27 28# This section is for your AAP Automation Hub host(s) 29# ----------------------------------------------------- 30[automationhub] 31#hub1.example.org 32#hub2.example.org 33aap.vandenboom.local ansible_connection=local 34 35# This section is for your AAP EDA Controller host(s) 36# ----------------------------------------------------- 37[automationeda] 38#eda1.example.org 39#eda2.example.org 40aap.vandenboom.local ansible_connection=local 41 42#[redis] 43#gateway1.example.org 44#gateway2.example.org 45#hub1.example.org 46#hub2.example.org 47#eda1.example.org 48#eda2.example.org 49 50[database] 51aap.vandenboom.local ansible_connection=local 52 53[all:vars] 54 55# Ansible 56ansible_connection=local 57 58# Common variables 59# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-general-inventory-variables 60# ----------------------------------------------------- 61postgresql_admin_username=postgres 62postgresql_admin_password=ansible 63bundle_install=true 64# The bundle directory must include /bundle in the path 65bundle_dir=\u0026#39;{{ lookup(\u0026#34;ansible.builtin.env\u0026#34;, \u0026#34;PWD\u0026#34;) }}/bundle\u0026#39; 66 67registry_username=\u0026lt;your_account\u0026gt; 68registry_password=\u0026lt;your_password\u0026gt; 69 70redis_mode=standalone 71 72# AAP Gateway 73# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-gateway-variables 74# ----------------------------------------------------- 75gateway_admin_password=ansible 76gateway_pg_host=aap.vandenboom.local 77gateway_pg_database=gateway 78gateway_pg_username=gateway 79gateway_pg_password=ansible 80 81# AAP Controller 82# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-controller-variables 83# ----------------------------------------------------- 84controller_admin_password=ansible 85controller_pg_host=aap.vandenboom.local 86#controller_pg_host= 87controller_pg_database=controller 88controller_pg_username=controller 89controller_pg_password=ansible 90 91# AAP Automation Hub 92# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-hub-variables 93# ----------------------------------------------------- 94hub_admin_password=ansible 95hub_pg_host=aap.vandenboom.local 96hub_pg_database=hub 97hub_pg_username=hub 98hub_pg_password=ansible 99 100# AAP EDA Controller 101# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#event-driven-ansible-controller 102# ----------------------------------------------------- 103eda_admin_password=ansible 104eda_pg_host=aap.vandenboom.local 105eda_pg_database=eda 106eda_pg_username=eda 107eda_pg_password=ansible I ran the playbook command with timing it. The total time it took is shown by the real time: ⏱ Total time: 108 minutes and 35.856 seconds = 1 hour, 48 minutes, 36 seconds\n","date":"29. Juni 2025","img":"https://1552afcb.notes-6if.pages.dev/images/ansible-automation-platform.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/ansible_automation_platform/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"RedHat","url":"/de/tags/redhat/"},{"title":"RHEL","url":"/de/tags/rhel/"},{"title":"Ansible","url":"/de/tags/ansible/"},{"title":"Automation","url":"/de/tags/automation/"},{"title":"Platform","url":"/de/tags/platform/"}],"timestamp":1751231408,"title":"Install Red Hat Ansible Automation Platform 2.5 in a Single VM"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[],"content":"When comparing Kubernetes with OpenShift (Red Hat\u0026rsquo;s Kubernetes-based platform), there are several key differences that affect how they handle resource consumption and system resources. While OpenShift is built on top of Kubernetes, there are additional functionalities and differences that impact the resource requirements:\nAdditional Functionalities in OpenShift OpenShift offers more out-of-the-box functionality than Kubernetes. This can lead to higher overhead, but also to more ease of use and integration: Security: OpenShift adds extra security layers, such as Security Context Constraints (SCC) and SELinux restrictions, which may require additional resources for securing containers and applications.\nIntegrated CI/CD: OpenShift provides built-in Continuous Integration/Continuous Deployment (CI/CD) tools, like OpenShift Pipelines, which require more resources to manage pipelines and execute builds.\nRegistry: OpenShift includes an integrated container registry, which can lead to additional storage and network consumption if you store and manage many images.\nThese extra functionalities may increase resource usage compared to a standard Kubernetes cluster that you might configure yourself with external tools.\nCluster Management Kubernetes gives you full control over how your cluster and resources are managed. If you set up a Kubernetes cluster yourself, you can optimize the configuration and choice of components for your specific needs. This can result in a more streamlined, resource-efficient implementation, as long as you know what you\u0026rsquo;re doing.\nOpenShift comes with a pre-configured cluster environment that is more structured. The default configurations in OpenShift focus on easier management and security, but this also means that there is more overhead due to the pre-enabled features. Since OpenShift includes many things by default (such as security, logging, monitoring, and networking), it often consumes more resources than a barebones Kubernetes cluster.\nResource Usage in Scaling Kubernetes has a very dynamic and flexible scaling mechanism. For example, if you have applications running on Kubernetes, you can define your own scaling strategies, such as scaling based on CPU or memory usage (with the Horizontal Pod Autoscaler, HPA). This offers a high degree of control over resource usage, but you must be careful not to request unnecessary extra resources.\nOpenShift also offers autoscaling functionality, but it may be more focused on \u0026ldquo;best practices.\u0026rdquo; This means that OpenShift may sometimes scale more aggressively, depending on the pre-configured policies. This can lead to higher resource consumption, especially in larger environments.\nNetworking and Storage Kubernetes gives you the freedom to choose your own networking and storage solutions, which means you might choose an optimized solution with less overhead. For example, if you use a lightweight networking solution, your resource consumption could be lower.\nOpenShift has its own network stack and storage integration. This means you\u0026rsquo;re using Red Hat\u0026rsquo;s solutions for networking and storage, which simplifies integration and management, but may require more resources for managing these built-in services.\nUpdates and Maintenance Kubernetes does not have built-in methods for updating and maintaining the cluster. This can lead to a lighter load on system resources, but requires manual actions and knowledge to manage effectively.\nOpenShift provides a robust way to automatically update and maintain the cluster, which reduces the administrative burden but also uses additional resources to manage these processes. Since OpenShift offers more features, such as logging, monitoring, and native support for updating the entire platform, it can be more resource-intensive than standard Kubernetes.\nResource Optimization Kubernetes offers a higher degree of control over resource usage. You can set resource limits for each pod and container, giving you a good view of how efficiently your cluster is running. However, these adjustments need to be made manually.\nOpenShift also provides resource management, but because it has more automated processes, it may sometimes be less flexible in how it allocates resources. On the other hand, this is also useful for businesses that don’t want to micromanage, as the platform handles many things automatically.\nConclusion:\nKubernetes is generally \u0026ldquo;lighter\u0026rdquo; when it comes to resource usage because you have full control over what runs in the cluster and how it is managed. If you want a minimalist approach, you can have a very optimized Kubernetes cluster, depending on your configuration.\nOpenShift, on the other hand, adds many additional features and configurations (such as CI/CD integration, built-in security, and logging), which results in higher resource consumption. However, it also offers benefits in terms of ease of management, security, and out-of-the-box functionality, making it especially attractive for companies that want to spend less time on cluster management and focus more on their applications.\nSo, if you\u0026rsquo;ve seen the warning about Kubernetes burning resources before, this might actually apply even more to OpenShift. When looking purely at resource consumption, Kubernetes is often more efficient, but OpenShift offers a more comprehensive and user-friendly experience, although that comes with a higher resource burden.\n","date":"29. März 2025","img":"https://1552afcb.notes-6if.pages.dev/images/openshift-kubernetes-vergelijking.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/pas_op_met_openshift/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Kubernetes","url":"/de/tags/kubernetes/"},{"title":"Resources","url":"/de/tags/resources/"}],"timestamp":1743257743,"title":"A Comparison of the Resource Usage of Kubernetes and OpenShift"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[],"content":"The statement \u0026ldquo;beware of Kubernetes, it burns through your resources\u0026rdquo; refers to the fact that Kubernetes, although a powerful and flexible solution for orchestrating containerized applications, can consume a relatively large amount of system resources (such as CPU, memory, and storage).\nThis is due to several factors:\nKubernetes has overhead: Kubernetes itself runs as a cluster of various components, such as the API server, scheduler, controller manager, and more. These components run on the control plane and need to be managed. This adds extra overhead to your system, meaning that the resources Kubernetes itself uses are added on top of the applications you are actually running.\nComplexity of cluster management: In larger Kubernetes clusters, the amount of computing power required can increase due to the management of multiple nodes, workloads, and the associated control mechanisms. This can lead to increased resource consumption, especially if the cluster is not well-configured.\nScaling applications: Kubernetes is designed to automatically scale your applications based on load. However, depending on your configuration, Kubernetes might start additional pods or reserve resources, even if they are not actually being used, which can waste resources.\nComplex networks and services: Kubernetes uses complex networking layers for managing communication between pods and services. This can impact performance and consume additional network resources. The network connections between the various Kubernetes components can also contribute to higher resource costs in some cases.\nUse of on-demand services: Kubernetes makes use of cloud-based infrastructures for auto-scaling, meaning the cluster may sometimes request more resources than necessary. For example, if you don\u0026rsquo;t properly configure when certain resources should be scaled up, it could require unnecessary capacity.\nIn short, Kubernetes is extremely powerful and offers many benefits for large and complex applications, but it consumes significant amounts of resources, especially if it\u0026rsquo;s not properly tuned to your needs. It\u0026rsquo;s important to configure and optimize it well so that you don’t waste resources unnecessarily.\n","date":"29. März 2025","img":"https://1552afcb.notes-6if.pages.dev/images/kubernetes-resources-warning.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/pas_op_met_kubernetes/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Kubernetes","url":"/de/tags/kubernetes/"},{"title":"Resources","url":"/de/tags/resources/"}],"timestamp":1743256843,"title":"The Statement 'Beware of Kubernetes, It Burns Through Your Resources'"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/de/authors/martijnvandenboom/"}],"categories":[],"content":"Concurrency might sound like a technical term, but it boils down to a program performing multiple tasks at once, as if it’s multitasking. Imagine you’re cooking: while the pasta is on the stove, you start the washing machine and charge your phone. Although you’re not doing everything at the exact same moment, it all happens smoothly side by side. Software that supports concurrency works the same way: a program can, for instance, download files, perform calculations, and send data to a server all at once. This multitasking makes the use of computing power more efficient and ensures faster, smoother performance.\nGolang / Go excels at making concurrency simple and intuitive. Using so-called goroutines, Go offers a lightweight and efficient solution for multitasking, unlike traditional threads in, say, Java. Java threads often consume significant amounts of memory (typically megabytes per thread), whereas goroutines are much lighter and demand fewer system resources. This makes Go particularly well-suited for modern applications like microservices, where scalability plays a key role.\nClassic mistakes are avoided\nWith Go, common multitasking issues are effectively sidestepped. This makes it more reliable than traditional solutions. It helps you avoid classic errors such as:\nRace conditions: Issues caused by simultaneous data access. Deadlocks: Situations where processes block each other. Resource leaks: Inefficient use of system resources. These advantages make Go not only powerful but also a stable choice for companies looking to develop efficient, error-free software.\nReal-time systems and alternatives\nWhile Go is exceptional in its simplicity and strength, it’s less suited for real-time systems. That’s because Go has a garbage collector, a feature that automatically frees up unused memory space. While this is handy for most applications, it can occur at unexpected moments and cause delays. The same applies to Java, which also relies on garbage collection. For real-time systems, where every millisecond counts, languages like C, C++, and Rust are better options. These languages provide direct control over memory management and are designed with performance and predictability in mind.\nAn interesting approach is to combine the best of both worlds. For real-time requirements, you can write modules in C, C++, or Rust and integrate them with Go, for example. This way, you benefit from Go’s simplicity and scalability while leveraging the reliability and speed of languages like C or Rust.\nGo offers a modern, efficient solution for concurrent software and helps prevent classic mistakes. For situations where real-time performance is critical, languages like C or Rust provide a robust foundation. With the right combinations, you can tackle almost any challenge! Feel free to reach out if you’d like to know more or need advice. 😊\nP.S. The information I’ve found here sparks my imagination and has made me curious to dig deeper and see what I can prove myself. However, in an attempt to demonstrate and compare actual memory statistics, some things aren’t as straightforward as they seem. The memory usage of goroutines heavily depends on how much memory is allocated through them rather than having a clear initial memory footprint. So, I’m testing the information I’ve found and the claims made within it.\n","date":"22. März 2025","img":"https://1552afcb.notes-6if.pages.dev/images/golang-go-concurrency.svg","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/golang_go_concurrency/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Golang","url":"/de/tags/golang/"},{"title":"Go","url":"/de/tags/go/"},{"title":"Multitasking","url":"/de/tags/multitasking/"},{"title":"Concurrency","url":"/de/tags/concurrency/"}],"timestamp":1742673643,"title":"Golang / Go: The Smart Programming Language for Efficient Software and Concurrency"},{"authors":[],"categories":[],"content":"","date":"23. Februar 2025","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/contact/","series":[],"smallImg":"","tags":[],"timestamp":1740268800,"title":"Kontakt"},{"authors":[],"categories":[],"content":"Vielen Dank für Ihre Nachricht!\nWir freuen uns, dass Sie sich an uns wenden. Unser Team ist für Sie da und wird sich so schnell wie möglich bei Ihnen melden.\nWenn Sie in der Zwischenzeit Fragen haben, senden Sie uns gerne eine weitere Nachricht!\n","date":"14. Februar 2025","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/thank-you/","series":[],"smallImg":"","tags":[],"timestamp":1739491200,"title":"Danke"},{"authors":[],"categories":[],"content":" BIOGRAPHIE Martijn ist ein erfahrener IT-Experte mit mehr als 26 Jahren Erfahrung in Informationstechnologie, Infrastrukturmanagement und Automatisierung. Im Laufe seiner Karriere hat er in komplexen Unternehmens- und Regierungsumgebungen gearbeitet und an Projekten für Organisationen wie CGI, Rijkswaterstaat, ProRail und die Gemeinde ’s-Hertogenbosch mitgewirkt.\nSeine Arbeitsschwerpunkte liegen in den Bereichen Systemadministration, Automatisierung, Überwachung, Vernetzung sowie dem Design zuverlässiger und skalierbarer IT-Infrastrukturen.\nHINTERGRUND\nMartijns Faszination für Computer begann während seines Bauingenieurstudiums (HBO Bouwkunde) in Tilburg Ende der 1990er Jahre, als er mit der Microsoft Visual Basic-Programmierung vertraut gemacht wurde. Das Entwickeln kleiner Anwendungen und die Erfahrung, wie Software sich wiederholende Arbeiten automatisieren kann, weckten eine anhaltende Leidenschaft für Computer und Softwareentwicklung.\nAus dieser Neugier entwickelte sich nach und nach eine langfristige Berufskarriere in den Bereichen IT und Automatisierung.\nKERNKOMPETENZ\nPython-Entwicklung Ansible-Automatisierung Bash- und PowerShell-Skripting Linux-Systemadministration Netzwerkverwaltungs- und Überwachungsplattformen CI/CD-Praktiken Die Verbesserung der Zuverlässigkeit und Effizienz durch Automatisierung blieb ein zentrales Thema seiner gesamten Arbeit.\nMENTORING UND BILDUNG\nNeben seiner beruflichen Laufbahn war Martijn auch in den Bereichen Mentoring und Bildung aktiv. Zu den ehrenamtlichen Aufgaben gehörte die Vermittlung von Computerkenntnissen, die Betreuung von Sekundarschülern und die Einführung von Programmierkonzepten mit C# (Visual Studio) und Python (Spyder/Anaconda).\nNACHHALTIGKEIT UND INTERNATIONALE INITIATIVEN\nMartijn engagiert sich auch in Nachhaltigkeits- und internationalen Entwicklungsinitiativen. Ein Beispiel ist ein Black Soldier Fly (BSF)-Zuchtprojekt in Uganda, das in Zusammenarbeit mit Foundation Foods Ltd. entwickelt wurde. Der Schwerpunkt des Projekts liegt auf der Produktion nachhaltiger Insektenproteine ​​für Tierfutter bei gleichzeitiger Wiederverwertung organischer Abfälle.\nDarüber hinaus hat Martijn an Konzept und Design des Planet Protection Polyethylene Waste Collection Payment System mitgearbeitet. Dieses Konzept zielt darauf ab, die Sammlung von Kunststoffabfällen zu verbessern, indem es Sammlern ermöglicht wird, Polyethylenabfälle zu lokalen Sammelstellen zu bringen und digitale Zahlungen basierend auf dem Gewicht zu erhalten, was sowohl den Umweltschutz als auch die lokalen wirtschaftlichen Chancen unterstützt.\nPERSÖNLICH\nMartijn lebt derzeit zusammen mit seiner Frau in Utrecht, Niederlande. Technologie, Automatisierung und nachhaltige Innovation sind nach wie vor zentrale Motivationen sowohl für seine berufliche Arbeit als auch für seine persönlichen Initiativen.\nSPONSORING\nMöchten Sie meine Arbeit unterstützen?\nko-fi.com/martijnvandenboom paypal.me/ingmacmvandenboom buymeacoffee.com/ingvdboom ","date":"13. Februar 2025","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/about/","series":[],"smallImg":"","tags":[],"timestamp":1739404800,"title":"Um"},{"authors":[],"categories":[],"content":"Animationsdienst erstellen Animationsdienst erstellen\nErwecken Sie Ihre Ideen mit atemberaubenden Animationen zum Leben\nBei „van den Boom Animations“ sind wir auf die Erstellung individueller Animationen spezialisiert, die Ihr Publikum fesseln und fesseln. Egal, ob Sie Ihre Website verbessern, für Ihre Marke werben oder Ihrem Projekt einen auffälligen Effekt verleihen möchten, unser Team ist hier, um Ihre Vision in die Tat umzusetzen. Von sanften Übergängen und dynamischen Bildern bis hin zu attraktiven Animationen bieten wir maßgeschneiderte Lösungen, um Ihre Inhalte hervorzuheben. Wir helfen Ihnen dabei, Ihre Geschichte durch die Magie der Animation zu erzählen!\nWas wir anbieten:\nWir bieten eine breite Palette an Animationsdienstleistungen für jeden Bedarf. Egal, ob Sie nach dynamischen Website-Animationen, ansprechenden Social-Media-Visuals oder animierten Grafiken für Ihr nächstes Videoprojekt suchen, wir haben das Richtige für Sie. Unsere Expertise umfasst alles von Logo-Animationen bis hin zu 2D-/3D-Motion-Grafiken. Wir arbeiten eng mit Ihnen zusammen, um individuelle Animationen zu erstellen, die zu Ihrer Marke, Ihrem Stil und Ihren Zielen passen und sicherstellen, dass Ihre Botschaft auf die fesselndste Art und Weise übermittelt wird.\nWie es funktioniert:\nDer Einstieg bei uns ist einfach und problemlos. Zunächst führen wir ein Gespräch, um Ihre Vision, Projektziele und den gewünschten Animationsstil zu verstehen. Anschließend erstellt unser Kreativteam ein auf Ihre Bedürfnisse zugeschnittenes Konzept und stellt erste Entwürfe oder Storyboards zur Verfügung. Sobald Sie mit der Regie zufrieden sind, gehen wir in die Produktion über, wo wir die Animation mit Liebe zum Detail und zur Qualität zum Leben erwecken. Während des gesamten Prozesses halten wir Sie mit regelmäßigen Updates auf dem Laufenden, um sicherzustellen, dass das Endergebnis Ihre Erwartungen übertrifft. Wir sind von Anfang bis Ende für Sie da, um Ihr Animationserlebnis reibungslos und angenehm zu gestalten. Beste Grüße,\nMartijn P.S. Bitte beachten Sie: Diese Leistung basiert auf den von beiden Parteien vereinbarten Beiträgen. Wenn es uns gelingt, Ihnen einen exzellenten Service zu bieten und Sie mit dem Ergebnis zufrieden sind, würden wir uns sehr über positives Feedback freuen, das wir öffentlich präsentieren und in unser Portfolio aufnehmen können. Animationsdienst erstellen\nBeispiele:\n1. Der rotierende Buchstabe: „van den Boom Animations“ dieser rotierende Buchstabe „B“ ist eine der ersten Ideen, die mir kamen, als ich begann, die Welt des Webdesigns und der Animationen zu erkunden. Durch diese kleinen, aber wirkungsvollen Details – die Animationen, die den Nutzer überraschen und das Erlebnis bereichern – kann eine Website viel unterhaltsamer und lebendiger werden. Durch das Hinzufügen subtiler Bewegungen, wie z. B. das Drehen eines Elements oder das Leuchten eines Bilds, entsteht eine dynamischere und ansprechendere Website. Mein Ziel ist es, diese Magie zu vermitteln, damit jede von uns erstellte Website das gewisse Extra hat, das die Besucher nicht nur bemerken, sondern auch schätzen. 2. Die brennende Flamme: Unsere Flammenanimation symbolisiert die brennende Kreativität, die wir in jedes Projekt stecken. Wie eine Flamme, die ständig tanzt und sich verändert, verleihen wir Ihren Ideen Energie und Bewegung. Egal, ob Sie ein dynamisches Element für Ihre Website oder einen visuellen Effekt suchen, der Aufmerksamkeit erregt, unsere Flammen heben Ihr Projekt auf die nächste Ebene. Beobachten Sie, wie die Flamme aufleuchtet und sich bewegt, genau wie unsere kreativen Prozesse! .company_logo { Schriftfamilie: „DejaVu Sans Mono“, Monospace; Schriftgröße: 20px; Anzeige: Flex; align-items: center; rechtfertigen-Inhalt: Mitte; Rand oben: 18px; Rand unten: 8px; } .prefix-container { Breite: 7ch; Anzeige: Flex; align-items: center; } .richtig { Rand links: 20px; Farbe: #000000; } #cursor { Animation: 1s blinken, Schrittende unendlich; Farbe: #000000; } [data-bs-theme=\"dark\"] .right, [data-bs-theme=\"dark\"] #cursor { Farbe: #ffffff; } @keyframes blinken { von, bis { Deckkraft: 1; } 50 % { Deckkraft: 0; } } 3. Das Firmenlogo: Unser Firmenlogo ist selbst eine lebendige Animation. Der Text \u0026lt;VDB/\u0026gt; wird Zeichen für Zeichen eingegeben – so wie ein Entwickler Code schreibt – gefolgt von einem sanft blinkenden Cursor. Nach einer kurzen Pause beginnt die Sequenz von vorne, eine ständige Erinnerung daran, dass wir immer etwas Neues bauen. Die Kombination aus Programmiersprachensyntax und Monospace-Typografie spiegelt genau wider, wer wir sind: ein technisches Unternehmen, das Kreativität und Handwerkskunst in jeder von uns gelieferten Lösung vereint. _ Digitale Dienste ","date":"11. Februar 2025","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/animations/","series":[],"smallImg":"","tags":[],"timestamp":1739232000,"title":"Animationen"},{"authors":[],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":" Anforderungen DigitalOcean-Konto Docker-Datei erstellen Erstellen Sie das Dockerfile im Stammverzeichnis Ihrer Website.\nUnser Starter-Vorlage beinhaltet bereits das Dockerfile.\n1############### 2# Build Stage # 3############### 4FROM hugomods/hugo:exts as builder 5 6COPY . /src 7 8ENV HUGO_ENV=production 9 10# Base URL 11ARG HUGO_BASEURL= 12ENV HUGO_BASEURL=${HUGO_BASEURL} 13 14# Module Proxy 15ARG HUGO_MODULE_PROXY= 16ENV HUGO_MODULE_PROXY=${HUGO_MODULE_PROXY} 17 18# NPM mirrors, such as https://registry.npmmirror.com 19ARG NPM_CONFIG_REGISTRY= 20ENV NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY} 21 22# Install dependencies 23RUN npm ci 24 25# Build site 26RUN hugo --minify --gc --enableGitInfo 27 28# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled, please replace the `en` with your default language code. 29# RUN cp ./public/en/404.html ./public/404.html 30 31############### 32# Final Stage # 33############### 34FROM hugomods/hugo:nginx 35COPY --from=builder /src/public /site Das /site ist das Ausgabeverzeichnis statischer Dateien, die später verwendet werden. App erstellen Navigieren Sie zu DigitalOcean Dashboard -\u0026gt; Left Panel -\u0026gt; Apps -\u0026gt; Create App und füllen Sie dann das Formular wie folgt aus.\nRessourcen optimieren In diesem Schritt müssen wir die Ressourcen optimieren, da die DigitalOcean-App-Plattform Buildpack derzeit nicht in der Lage ist, Hugo-Sites zu erkennen, die über Konfigurationsverzeichnis konfiguriert wurden.\nMöglicherweise sehen Sie mehrere Ressourcen wie im Bild oben gezeigt. Sie müssen unnötige Ressourcen entfernen, mit Ausnahme der Ressource vom Typ Dockerfile.\nDockerfile-Ressourcen bearbeiten Da der Webdienst nicht kostenlos ist, müssen wir die Dockerfile-Ressource so bearbeiten, dass sie eine statische Site ist.\nKlicken Sie auf die Schaltfläche Edit rechts neben der Dockerfile-Ressource. Anschließend gelangen Sie zum Bedienfeld „Ressourceneinstellungen“. Bearbeiten Sie den Ressourcentyp und ändern Sie ihn in Statische Site. Bearbeiten Sie das Ausgabeverzeichnis und legen Sie es als /site fest. Sobald Sie fertig sind, erhalten Sie die oben genannten ähnlichen Einstellungen. Klicken Sie nun auf die Schaltfläche „Zurück“, um die Ressourcen zu überprüfen.\nWenn alles gut geht, sollten Sie nur eine Ressource vom Typ Static Site | Dockerfile haben.\nRezension Bitte lesen Sie den Abschnitt „Abrechnung“ durch. Ihnen werden keine Kosten berechnet, wenn Sie nicht mehr als drei statische Websites bereitstellen.\nBitte beachten Sie, dass die Überschreitung der Transfernutzung in Rechnung gestellt wird. Weitere Informationen finden Sie unter Preisgestaltung.\nBereitstellen Wenn alles in Ordnung ist, ist es an der Zeit, die Site bereitzustellen, indem Sie auf die Schaltfläche „Ressourcen erstellen“ klicken.\nWas kommt als nächstes? Sobald die App erstellt wurde, wird sie automatisch bereitgestellt. Sie können die Build-Protokolle überprüfen, wenn etwas schief geht.\nNach erfolgreicher Bereitstellung können Sie die Domäne anpassen.\n","date":"21. Januar 2024","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/digitalocean-app-platform/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"DigitalOcean","url":"/de/tags/digitalocean/"},{"title":"Docker","url":"/de/tags/docker/"},{"title":"Dockerfile","url":"/de/tags/dockerfile/"},{"title":"Buildpack","url":"/de/tags/buildpack/"}],"timestamp":1705820419,"title":"Bereitstellung Auf Der DigitalOcean App-Plattform"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/de/categories/widget/"}],"content":"The funding widget, AKA buy me a coffee widget, gives the readers a way to support a creator.\nSite Parameters The funding is a key value pair that mapping from platform to their QR Code image, username or URL.\nName Type Default Description funding Object - funding.alipay String - Alipay QR Code Image. funding.wechat String - Wechat QR Code Image. funding.paypal String - Paypal username. funding.ko_fi String - Ko-fi username. funding.patreon String - Patreon username. funding.open_collective String - Open Collective username. funding.buymeacoffee String - Buy Me a Coffee username. Page Parameter Name Type Default Description funding Object - Override the global funding settings, empty to disable. ","date":"29. Januar 2023","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/widgets/funding/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Buy Me a Coffee","url":"/de/tags/buy-me-a-coffee/"},{"title":"Funding","url":"/de/tags/funding/"}],"timestamp":1674992659,"title":"Funding Widget"},{"authors":[],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Der Shortcode toggle ähnelt dem Shortcode code-toggle, ist jedoch allgemeiner.\nNutzung 1{{\u0026lt; toggle myToggleName \u0026gt;}} 2 3 {{\u0026lt; toggle-item myToggleItemName \u0026gt;}} 4 CONTENT HERE, MARKDOWN and SHORTCODE are support. 5 {{\u0026lt; /toggle-item \u0026gt;}} 6 7 ... 8 9{{\u0026lt; /toggle \u0026gt;}} Das myToggleName MUSS pro Seite eindeutig sein. Das myToggleItemName MUSS pro Umschalter eindeutig sein. Beispiel Foo Bar Foo Bar PHP JS SQL 1Echo „Hallo Welt“ 1console.log(\u0026#34;Hallo Welt\u0026#34;) 1WÄHLEN Sie „Hallo Welt“ ","date":"21. Januar 2023","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/toggle/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Toggle","url":"/de/tags/toggle/"}],"timestamp":1674314531,"title":"Umschalten"},{"authors":[],"categories":[],"content":"Da die Client-Suche mit zunehmendem Inhalt immer langsamer wird, ist es sinnvoll, über einen Remote-Suchdienst zu verfügen, um Suchanfragen von einer großen Website zu bearbeiten.\nAlgolia ist ein beliebter Suchdienst, der einen kostenlosen Plan bietet (10.000 Datensätze, 10.000 Anfragen pro Monat). Nachdem Sie diesen Artikel gelesen haben, erfahren Sie, wie Sie Algolia konfigurieren und Indexdateien automatisch hochladen.\nVorbereitungen Zuerst müssen Sie ein Algolia-Konto erstellen und dann Ihre Anwendung erstellen.\nNavigieren Sie zu Übersicht \u0026gt; API-Schlüssel. Die Seite zeigt alles, was Sie in den restlichen Schritten benötigen, z. B. die Anwendungs-ID, den Such-API-Schlüssel und den Admin-API-Schlüssel.\nKonfiguration Name Geben Sie ein Standard Beschreibung algolia Objekt - Algolie algolia.appId Zeichenfolge - App-ID algolia.apiKey Zeichenfolge - Suche nur nach API-Schlüssel algolia.indexName Zeichenfolge - Indexname algolia.paginate Nummer 5 algolia.stallThreshold Nummer 300 Wie viele Millisekunden müssen vergehen, bevor davon ausgegangen wird, dass die automatische Vervollständigung ins Stocken geraten ist? Index Index erstellen Navigieren Sie zu Datenquellen \u0026gt; Indizes \u0026gt; Index erstellen und erstellen Sie dann Ihren Index. Nennen wir ihn prod.\nDurchsuchbare Attribute hinzufügen Sobald der Index erstellt wurde, befinden wir uns auf der Indexseite.\nNavigieren Sie zu Konfiguration \u0026gt; Durchsuchbare Attribute. Wir müssen die Attribute title und content hinzufügen.\nIndex hochladen Nach der Erstellung der Site wird die Algolia-Indexdatei generiert und als /algolia/index.json, d. h. http://localhost:1313/algolia/index.json, gespeichert.\nManuell hochladen Sie können die Indexdatei zum Testen manuell über das Algolia-Dashboard hochladen.\nCLI-Tool Ich habe ein CLI-Tool zum Hochladen der Indexdatei geschrieben, es kann problemlos in Ihre CI- und CD-Tools integriert werden.\nGitHub-Aktion Ich habe auch ein GitHub-Aktionen geschrieben, wenn Sie GitHub zum Hosten Ihres Repositorys verwenden.\nErstellen Sie das .github/workflows/algolia.yml unter Ihrem Site-Root mit dem folgenden Inhalt.\n1name: Algolia Index 2 3on: 4 workflow_dispatch: 5 push: 6 branches: 7 - \u0026#34;main\u0026#34; 8 9jobs: 10 index: 11 runs-on: ubuntu-latest 12 steps: 13 - name: Checkout 14 uses: actions/checkout@v3 15 - name: Build \u0026amp; upload Algolia index 16 uses: razonyang/hugo-theme-bootstrap-algolia-action@v0.1.0 17 with: 18 algolia-app-id: ${{ secrets.ALGOLIA_APP_ID }} 19 algolia-api-key: ${{ secrets.ALGOLIA_API_KEY }} 20 algolia-index-name: prod Und erstellen Sie dann die Geheimnisse ALGOLIA_APP_ID und ALGOLIA_API_KEY für Ihr Repository.\nALGOLIA_API_KEY ist der Administrator-API-Schlüssel, nicht der reine Such-API-Schlüssel.\nSobald die GitHub-Aktion erstellt wurde, wird die Indexdatei automatisch auf git push hochgeladen.\n","date":"27. November 2022","img":"/docs/topics/algolia/featured.png","lang":"de","langName":"Deutsch","largeImg":"/docs/topics/algolia/featured_hu_fdffb880f893b4ae.png","permalink":"/de/docs/topics/algolia/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"/docs/topics/algolia/featured_hu_24633db3233eed98.png","tags":[{"title":"Algolia","url":"/de/tags/algolia/"}],"timestamp":1669549992,"title":"Algolie"},{"authors":[],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Eine detaillierte Beschreibung des Iframe-Shortcodes.\nNutzung 1{{\u0026lt; iframe \u0026#34;URL\u0026#34; \u0026gt;}} oder über benannte Parameter\n1{{\u0026lt; iframe 2 src=\u0026#34;URL\u0026#34; 3 trigger=manual 4 loadButtonText=\u0026#34;load_video\u0026#34; 5\u0026gt;}} Parameter Standard Beschreibung src - Die Iframe-URL. Erforderlich. trigger auto Legen Sie manual fest, wenn Sie den Iframe manuell laden möchten. lazyLoading true loadButtonText load Der Text der Ladeschaltfläche i18n wird unterstützt. loadInfo - Die Informationen werden unter der Schaltfläche „Laden“ angezeigt. Markdown wird unterstützt. fullscreen true Vollbild-Schaltfläche ein-/ausblenden. Beispiele OpenStreetMap Spiel Spiel starten Bitte beachten Sie, dass der Iframe das Spiel von anderen Websites lädt. ","date":"19. November 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/iframe/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"IFrame","url":"/de/tags/iframe/"}],"timestamp":1668834048,"title":"IFrame-Shortcode"},{"authors":[],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Eine detaillierte Beschreibung des Spiel-Shortcodes.\nNutzung 1{{\u0026lt; game \u0026#34;GAME_URL\u0026#34; \u0026gt;}} oder über benannte Parameter\nParameter Standard Beschreibung src - Die Spiel-URL. Erforderlich. trigger auto Stellen Sie manual ein, wenn Sie das Spiel manuell laden möchten. loadInfo - Die Informationen werden unter der Schaltfläche „Laden“ angezeigt. Markdown wird unterstützt. 1{{\u0026lt; game 2 src=\u0026#34;GAME_URL\u0026#34; 3 trigger=manual 4 loadInfo=\u0026#34;The Game Information.\u0026#34; 5\u0026gt;}} Beispiele Automatisches Laden Manuelles Laden Spiel starten The Game Information. ","date":"15. November 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/game/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Game","url":"/de/tags/game/"}],"timestamp":1668518208,"title":"Spiel-Shortcode"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"In diesem Artikel sprechen wir über das Landingpage-Layout. Es könnte für Sie von Interesse sein, wenn Sie die Seiten im Markdown-Verfahren anpassen möchten.\nWas ist das? Das Landingpage-Layout ist nur ein Skelettcontainer, der Hauptteil besteht aus drei Teilen: der oberen App-Leiste, dem Seiteninhalt und der Fußzeile.\nVorteile Inhalte in Markdown schreiben. Wiederverwendbare Shortcodes. Wie benutzt man es? Die Verwendung ist ganz einfach: Geben Sie einfach type als landing und sidebar als false im Titelblatt der Seite an. Der Rest dreht sich um Ihren Inhalt.\n1+++ 2type = \u0026#34;landing\u0026#34; 3sidebar = false 4+++ Nehmen wir als Beispiel die Homepage und erstellen Sie das content/_index.md mit dem folgenden Inhalt.\nDie Startseite MUSS content/_index.md sein, nicht content/index.md.\n1--- 2title: Home 3type: landing 4--- 5 6{{\u0026lt; text/align-center \u0026gt;}} 7\u0026lt;h1\u0026gt;Hello world.\u0026lt;/h1\u0026gt; 8{{\u0026lt; /text/align-center \u0026gt;}} 9 10\u0026lt;br\u0026gt; 11 12{{\u0026lt; text/align-center \u0026gt;}} 13\u0026lt;h2\u0026gt;The subtitle landing page example.\u0026lt;/h2\u0026gt; 14{{\u0026lt;/* /text/align-center \u0026gt;}} ","date":"15. September 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/layouts/landing/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Landing Page","url":"/de/tags/landing-page/"}],"timestamp":1663209983,"title":"Landingpage-Layout"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/de/categories/widget/"}],"content":"The repository widget shows the commit information about current page, it\u0026rsquo;s useful for users to view or edit the source code.\nRequirements This widget relies on the .GitInfo, so you\u0026rsquo;ll need to either enable it via the --enableGitInfo flag or setting the enableGitInfo as true in config.toml.\n1$ hugo --enableGitInfo 1enableGitInfo = true Site Parameters Name Type Default Description repo Object - repo.url String - Required. The URL of your public repository. GitHub and GitLab are supported. repo.branch String master The branch name. repo.subPath String - The sub path of content. repo.dateFormat String 02/01/2006, 15:04:05 PM The format of commit date. Usage The repository widget is disabled by default, you\u0026rsquo;ll need to include widget via Hooks.\nFor posts layout.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} For docs layout.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} ","date":"9. September 2022","img":"/docs/widgets/repository/featured.png","lang":"de","langName":"Deutsch","largeImg":"/docs/widgets/repository/featured_hu_8e5e187c0d9a3e55.png","permalink":"/de/docs/widgets/repository/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"/docs/widgets/repository/featured_hu_b0ece6c3195c9919.png","tags":[{"title":"Repository","url":"/de/tags/repository/"},{"title":"GitHub","url":"/de/tags/github/"}],"timestamp":1662728779,"title":"Repository Widget"},{"authors":[{"title":"Wilson E. Alvarez","url":"/de/authors/rubonnek/"}],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":"In diesem Artikel wird erläutert, wie Sie Websites mithilfe von GitLab CI auf GitLab-Seiten bereitstellen.\nArbeitsablauf Erstellen Sie .gitlab-ci.yml im Stammverzeichnis Ihrer Website mit den folgenden Inhalten:\n1image: registry.gitlab.com/pages/hugo/hugo_extended:latest 2 3variables: 4 HUGO_ENV: production 5 6default: 7 before_script: 8 - apk add --update --no-cache git go npm 9 - npm install 10 11test: 12 script: 13 - hugo --gc --minify 14 rules: 15 - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH 16 17pages: 18 script: 19 - hugo --gc --minify 20 artifacts: 21 paths: 22 - public 23 rules: 24 - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH Im obigen Beispiel wird nur der Standardzweig auf GitLab-Seiten bereitgestellt und ein Test für die restlichen Zweige ausgeführt.\nSiehe auch:\nKonfiguration der Starter-Vorlage für GitLab-Seiten。 Upstream-GitLab-Hugo-Beispiel GitLab CI/CD-Variablendokumentation ","date":"27. August 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/gitlab-pages/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"GitLab Pages","url":"/de/tags/gitlab-pages/"},{"title":"GitLab CI","url":"/de/tags/gitlab-ci/"}],"timestamp":1661567423,"title":"Auf GitLab-Seiten Bereitstellen"},{"authors":[],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":"In diesem Abschnitt werden wir über die wichtigsten Punkte der Bereitstellung sprechen, um die meisten Probleme während der Bereitstellung zu vermeiden.\nBuild-Tools Wie Voraussetzungen erwähnt, müssen Sie diese Tools in Ihrer Bereitstellungsumgebung einrichten.\nAbhängigkeiten installieren Wir verwenden NPM zum Verwalten der Abhängigkeiten des Themes. Es ist notwendig, die Abhängigkeiten in der Bereitstellungsumgebung zu installieren, da wir den Ordner node_modules NICHT festschreiben sollten.\n1$ npm i npm i ist die Abkürzung von npm install.\npackage.json und package-lock.json MÜSSEN festgeschrieben werden, npm verlässt sich auf Ersteres, Letzteres spart Installationszeit.\nBaustelle Nach der Installation der Abhängigkeiten ist es an der Zeit, die Site zu erstellen.\n1$ hugo --gc --minify --minify Minimierung des endgültigen HTML-Codes. Sie können das baseURL über das Flag -b ändern.\nDer Befehl generiert die Site und speichert sie standardmäßig im Verzeichnis public.\nWebsite wird bereitgestellt Dieser Schritt hängt davon ab, welche Bereitstellungsmethoden Sie verwenden.\nBereitstellungsmethoden Docker GitHub-Seiten Netlify Cloudflare-Seiten GitLab-Seiten Weitere Informationen finden Sie auf Hosting und Bereitstellung Weiterführende Literatur Leistung ","date":"27. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/overview/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658916025,"title":"Bereitstellungsübersicht"},{"authors":[],"categories":[{"title":"Layouts","url":"/de/categories/layouts/"},{"title":"Partials","url":"/de/categories/partials/"}],"content":"Laut Hugo-Layouts-Suchreihenfolge ist es einfach, die Layouts und Teiltöne von Hugo und dem Theme zu überschreiben. Dies ist nützlich für Benutzer, die bestimmte Layouts oder Teilelemente individuell anpassen möchten.\nNutzung Erstellen Sie einfach ein Layout oder eine Teildatei mit demselben Dateinamen, den Sie im Site-Stammverzeichnis überschreiben möchten.\nSo funktioniert unser Haken.\nBeispielsweise können wir das Homepage-Parital layouts/index.html überschreiben, indem wir unter dem Site-Stammverzeichnis ein eigenes Element erstellen.\n1$ echo \u0026#34;MY CUSTOM HOMEPAGE\u0026#34; \u0026gt; layouts/index.html ","date":"27. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/layouts-overriding/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658909137,"title":"Layouts Überschreiben"},{"authors":[],"categories":[{"title":"Widgets","url":"/de/categories/widgets/"}],"content":"When the page is too long, the sidebar will disappear with scrolling and the page will not look as neat and beautiful. So this article will introduce how to use sticky widgets to avoid this problem.\nCreate a New Sticky Widget First of all, create a partial under the layouts/parials folder, let\u0026rsquo;s take layouts/partials/custom/sticky-info.html as example.\n1\u0026lt;div class=\u0026#34;row card component position-sticky\u0026#34; style=\u0026#34;top: 84px;\u0026#34;\u0026gt; 2 \u0026lt;div class=\u0026#34;text-center py-3 px-1\u0026#34;\u0026gt; 3 MY STICKY WIDGET 4 \u0026lt;/div\u0026gt; 5\u0026lt;/div\u0026gt; The filename custom/sticky-info can be changed at will, but we recommend using some more specific names to avoid overriding the theme\u0026rsquo;s partials later. Such as custom, mywidgets.\nThen use the layouts/partials/hooks/sidebar-end.html hook to include the sticky partial.\n1{{- partial \u0026#34;custom/sticky-info\u0026#34; . }} The sticky widget should be the last widget of the sidebar, otherwise, strange problems can occur.\nMake an Existing Widget Sticky Each widget will have a unique class name, so that we can apply CSS on a desired widget, here we take the profile widget as an example.\n1.sidebar { 2 .profile { 3 position: sticky !important; 4 top: 84px; 5 order: 5; 6 } 7} We need to specify the order property to make the profile widget become the last widget of sidebar.\n","date":"27. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/topics/sticky-widgets/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Sticky","url":"/de/tags/sticky/"},{"title":"SCSS","url":"/de/tags/scss/"}],"timestamp":1658883283,"title":"Sticky Widgets"},{"authors":[],"categories":[{"title":"Multilingual","url":"/de/categories/multilingual/"}],"content":"HBS unterstützt sofort mehrere Sprachen, z. B. Englisch, vereinfachtes Chinesisch, traditionelles Chinesisch, Französisch, Russisch usw.\nSie können Ihre eigenen Übersetzungen hinzufügen unter: Hugo-Theme-Bootstrap/i18n\nUnterstützte Sprachen Language Code English en Simplified Chinese zh-hans(Recommended), zh-cn Traditional Chinese zh-hant(Recommended), zh-tw, zh-hk Spanish es Arabic ar German de French fr Indonesian id Japanese ja Polish pl Portuguese pt Russian ru Ukrainian uk Uzbek uz Konfiguration TOML YAML JSON config/_default/language.toml\n1[ar] 2 languageDirection = \u0026#39;rtl\u0026#39; 3 title = \u0026#39;مدونتي\u0026#39; 4 weight = 3 5[en] 6 languageName = \u0026#39;English\u0026#39; 7 weight = 1 8[zh-hans] 9 languageName = \u0026#39;简体中文\u0026#39; 10 weight = 2 11 [zh-hans.params] 12 description = \u0026#39;一个快速、响应式和功能丰富的 Hugo 博客主题\u0026#39; 13 keywords = \u0026#39;Hugo, Bootstrap, 博客主题\u0026#39; config/_default/language.yaml\n1ar: 2 languageDirection: rtl 3 title: مدونتي 4 weight: 3 5en: 6 languageName: English 7 weight: 1 8zh-hans: 9 languageName: 简体中文 10 params: 11 description: 一个快速、响应式和功能丰富的 Hugo 博客主题 12 keywords: Hugo, Bootstrap, 博客主题 13 weight: 2 config/_default/language.json\n1{ 2 \u0026#34;ar\u0026#34;: { 3 \u0026#34;languageDirection\u0026#34;: \u0026#34;rtl\u0026#34;, 4 \u0026#34;title\u0026#34;: \u0026#34;مدونتي\u0026#34;, 5 \u0026#34;weight\u0026#34;: 3 6 }, 7 \u0026#34;en\u0026#34;: { 8 \u0026#34;languageName\u0026#34;: \u0026#34;English\u0026#34;, 9 \u0026#34;weight\u0026#34;: 1 10 }, 11 \u0026#34;zh-hans\u0026#34;: { 12 \u0026#34;languageName\u0026#34;: \u0026#34;简体中文\u0026#34;, 13 \u0026#34;params\u0026#34;: { 14 \u0026#34;description\u0026#34;: \u0026#34;一个快速、响应式和功能丰富的 Hugo 博客主题\u0026#34;, 15 \u0026#34;keywords\u0026#34;: \u0026#34;Hugo, Bootstrap, 博客主题\u0026#34; 16 }, 17 \u0026#34;weight\u0026#34;: 2 18 } 19} Sie müssen languageDirection als rtl für Rechts-nach-links-Schreibsprachen angeben.\nSiehe auch Hugo Mehrsprachig.*\nDer Parameter, der die Standardsprache der Site steuert, muss sich in der Site-Konfigurationsdatei befinden. Siehe defaultContentLanguage auf Site-Konfiguration.\nLokalisierung Das dateFormat unterstützt die Lokalisierung, Sie können es als :date_full ändern, weitere Layouts finden Sie in Formatierungslayouts für Datum und Uhrzeit.\nBitte beachten Sie, dass zh-cn, zh-tw und zh-hk nicht unterstützt werden, da der Sprachcode nicht mit den in Hugo Locales definierten Gebietsschemas übereinstimmen konnte.\nWeiterführende Literatur Übersetzen Sie Ihre Inhalte ","date":"27. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/configuration/multilangual/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Translation","url":"/de/tags/translation/"},{"title":"Localization","url":"/de/tags/localization/"}],"timestamp":1658880366,"title":"Mehrsprachiger Modus"},{"authors":[],"categories":[{"title":"PurgeCSS","url":"/de/categories/purgecss/"}],"content":"PurgeCSS ist ein großartiges Tool, das ungenutztes CSS von Ihrer Website entfernt. In diesem Abschnitt werden wir näher darauf eingehen, wie PurgeCSS funktioniert und worauf wir achten sollten.\nWie es funktioniert? Für PurgeCSS muss die folgende Konfiguration festgelegt werden.\nTOML YAML JSON config.toml\n1[build] 2 writeStats = true 3[taxonomies] 4 author = \u0026#39;authors\u0026#39; 5 category = \u0026#39;categories\u0026#39; 6 series = \u0026#39;series\u0026#39; 7 tag = \u0026#39;tags\u0026#39; config.yaml\n1build: 2 writeStats: true 3taxonomies: 4 author: authors 5 category: categories 6 series: series 7 tag: tags config.json\n1{ 2 \u0026#34;build\u0026#34;: { 3 \u0026#34;writeStats\u0026#34;: true 4 }, 5 \u0026#34;taxonomies\u0026#34;: { 6 \u0026#34;author\u0026#34;: \u0026#34;authors\u0026#34;, 7 \u0026#34;category\u0026#34;: \u0026#34;categories\u0026#34;, 8 \u0026#34;series\u0026#34;: \u0026#34;series\u0026#34;, 9 \u0026#34;tag\u0026#34;: \u0026#34;tags\u0026#34; 10 } 11} Es weist Hugo an, verwendete Tags, Klassen und IDs zu berechnen und generiert dann das hugo_stats.json.\n1{ 2 \u0026#34;htmlElements\u0026#34;: { 3 \u0026#34;tags\u0026#34;: [], 4 \u0026#34;classes\u0026#34;: [], 5 \u0026#34;ids\u0026#34;: [] 6} Schließlich verlässt sich PurgeCSS auf diese Datei, um nicht verwendetes CSS zu löschen.\nDas PurgeCSS funktioniert nur in der production Umgebung.\nWir empfehlen NICHT, postcss.config.js und assets/main/config/rtl/postcss.config.js zu überschreiben, da sonst bei Versionsaktualisierungen unerwartete Probleme auftreten.\nEinschränkungen hugo_stats.json funktioniert nur in *.html-Vorlagen, d. h. alle in JavaScript-Dateien verwendeten CSS-Klassen, Tags und IDs werden weiterhin gelöscht.\nAber keine Sorge, es gibt zwei Möglichkeiten, dieses Problem zu lösen.\nZusätzliche Statistiken Erstellen Sie einfach eine Datei namens extra_stats.json mit der gleichen Form von hugo_stats.json im Stammverzeichnis Ihrer Website und fügen Sie das zusätzliche CSS manuell ein.\nextra_stats.json MUSS in Ihrem Repo verankert sein.\nHTML-Block in *.html Dateien einfügen Ein häufiges Szenario ist das Rendern von HTML-Blöcken mit JavaScript. Wenn Sie JavaScript zum Generieren eines DOM-Elements verwenden, wird jegliches verwendete CSS von hugo_stats.json ignoriert. Natürlich können Sie es manuell zu extra_stats.json hinzufügen, aber es gibt eine bessere Möglichkeit, dies über die Template-Engine zu tun.\nZuerst müssen wir einen Vorlagenblock in *.html Teiltönen definieren. 1\u0026lt;div class=\u0026#34;d-none\u0026#34; id=\u0026#34;template-custom-widget-foo\u0026#34;\u0026gt; 2 \u0026lt;div class=\u0026#34;custom-widget-foo\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; 3\u0026lt;/div\u0026gt; 4 5\u0026lt;script type=\u0026#34;text/html\u0026#34; id=\u0026#34;template-custom-widget-bar\u0026#34;\u0026gt; 6 \u0026lt;div class=\u0026#34;custom-widget-bar\u0026#34;\u0026gt; 7 NOTE THAT: ANY CSS INSIDE THE SCRIPT TAG WONT BE INCLUDED INTO THE STATS FILE. 8 \u0026lt;/div\u0026gt; 9\u0026lt;/script\u0026gt; Hugo berechnet das verwendete CSS in hugo_stats.json.\n1$ cat hugo_stats.json | grep custom-widget- 2 \u0026#34;custom-widget-foo\u0026#34;, 3 \u0026#34;template-custom-widget-foo\u0026#34;, 4 \u0026#34;template-custom-widget-bar\u0026#34;, Wie Sie sehen können, wird das im Tag \u0026lt;script\u0026gt; verwendete CSS(custom-widget-bar) nicht in hugo_stats.json eingebunden, daher sollten wir andere HTML-Tags mit der Klasse d-none verwenden, um Ihre Vorlage zu umschließen.\nd-none ist ein Bootstrap-CSS-Dienstprogramm, entspricht display: none.\nUnd rendern Sie dann die Vorlage über eine beliebige Template-Engine. 1const tmpl = document.getElementById(\u0026#39;template-custom-widget-bar\u0026#39;).innerHTML; 2render(tmpl, data); Testen Sie müssen die production-Umgebung für lokale Tests über hugo server -e production -b http://localhost:1313 angeben, da PurgeCSS nur in der production-Umgebung funktioniert.\nManchmal funktionieren PurgeCSS und PostProcess nicht sehr gut, daher müssen Sie Hugo Server möglicherweise gelegentlich neu starten.\n","date":"25. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/purgecss/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658721960,"title":"PurgeCSS"},{"authors":[],"categories":[{"title":"Performance","url":"/de/categories/performance/"}],"content":"In diesem Artikel werden wir darüber sprechen, wie Sie die Leistung Ihrer Websites verbessern können.\nDer einfachste Weg, die Leistung zu verbessern, besteht darin, die Dateigröße zu reduzieren, um die Übertragung zu beschleunigen.\nUmwelt Das Theme basiert auf der production-Umgebung, um die JavaScript- und CSS-Assets zu minimieren und ungenutztes CSS zu löschen.\nStandardumgebung Wert hugo production hugo server development Im Allgemeinen müssen Sie keine Änderungen vornehmen, es sei denn, Sie planen, hugo server in einer production-Umgebung zu verwenden. Sie können die Standardumgebung mit dem Flag -e ändern.\nHTML-Minimierung Sie sollten hugo --minify verwenden, um den endgültigen HTML-Code in der Produktionsumgebung zu minimieren.\nKomprimierung Komprimierung ist nicht dasselbe wie Minimierung, sie komprimiert Dateien mit einem Algorithmus (z. B. gzip) und überträgt sie dann an Clients. Die Clients dekomprimieren sie dann, bevor sie diese Dateien analysieren. Dies ist die Konfiguration des Webservers. Bitte beachten Sie entsprechend Ihrer Situation die entsprechenden Dokumente.\nBildressourcen Bitte platzieren Sie die vorgestellten Bilder, Titelbilder oder Miniaturbilder nach Möglichkeit im Seitenordner, damit die Bilder als Seitenressourcen behandelt werden, die vom Thema verarbeitet werden können. HBS schneidet es in mehrere kleinere Größen zu, um es an verschiedene Geräte anzupassen, um den Benutzern Bandbreite zu sparen und die Leistung und Benutzererfahrung zu verbessern.\n1├── featured-sample.webp 2├── index.md 3├── index.zh-hans.md 4└── index.zh-hant.md SCSS-Variablen Verwenden Sie nach Möglichkeit SCSS-Variablen, siehe auch SCSS-Variablen.\n","date":"23. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/performance/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Minify","url":"/de/tags/minify/"},{"title":"Gzip","url":"/de/tags/gzip/"}],"timestamp":1658572248,"title":"Leistung"},{"authors":[],"categories":[{"title":"Events","url":"/de/categories/events/"}],"content":"In diesem Artikel wurden einige vom Thema ausgegebene benutzerdefinierte Ereignisse aufgeführt. Sie können diese Ereignisse über Ereignis-Listener abfangen.\nFarbmodus-Ereignis HBS gibt ein benutzerdefiniertes Ereignis namens hbs:mode aus, wenn der Farbmodus geändert wird. Es ist nützlich, den Stil Ihres Widgets an den Farbmodus des Themas anzupassen. Die integrierten Utterances- und Giscus-Kommentar-Engines verlassen sich auf dieses Ereignis, um ihr Thema an hell oder dunkel anzupassen.\n1document.addEventListener(\u0026#39;hbs:mode\u0026#39;, (e: CustomEvent) =\u0026gt; { 2 console.log(\u0026#39;mode changed: \u0026#39;, e.detail.mode); 3}); ","date":"23. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/events/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658568839,"title":"Veranstaltungen"},{"authors":[],"categories":[{"title":"SCSS","url":"/de/categories/scss/"}],"content":"Dank assets/main/scss/_variables.scss haben wir die Möglichkeit, die Standard-SCSS-Variablen von Theme und Bootstrap zu ändern.\nWarum SCSS-Variablen? Obwohl wir das CSS über assets/main/scss/_custom.scss überschreiben können, wird dies letztendlich die Größe des CSS-Bundles erhöhen, die SCSS-Variable jedoch in den meisten Fällen nicht.\nBeispielsweise gibt es eine Standardanimation für das Logo beim Hover.\n1.top-app-bar .logo:hover { 2 transform: rotate(-5deg) scale(1.1); 3} Es kann über benutzerdefiniertes SCSS deaktiviert werden.\n1.top-app-bar { 2 .logo { 3 \u0026amp;:hover { 4 transform: none; 5 } 6 } 7} Aber der vorherige Stil, den wir nicht brauchen, ist immer noch im CSS-Bundle vorhanden, da wir ihn einfach durch das benutzerdefinierte SCSS überschrieben haben.\n1.top-app-bar .logo:hover { 2 transform: none; 3} 4 5.top-app-bar .logo:hover { 6 transform: rotate(-5deg) scale(1.1); 7} Und die SCSS-Variablen generieren keinen unbenutzten Stil im CSS-Bundle.\n1$logo-animation: false; Eine kleinere CSS-Bundle-Größe bedeutet eine bessere Leistung. Wir empfehlen daher, wenn möglich, SCSS-Variablen zu verwenden.\nBootstrap-SCSS-Variablen Sie finden die in Bootstrap integrierten SCSS-Variablen im Quellcode und offizielle Dokumentationen.\nThema SCSS-Variablen Paletten Palette Variable Blue $palette-blue Blue Gray $palette-blue-gray Brown $palette-brown Cyan $palette-cyan Green $palette-green Indigo $palette-indigo Orange $palette-orange Pink $palette-pink Purple $palette-purple Red $palette-red Teal $palette-teal Yello $palette-yellow Optionen Variable Default Value Description $code-select true Select \u0026lt;code\u0026gt; content on click, except code block. $logo-animation true Enable/Disable the default animation for logo. $table-hover true Table hoverable. $table-bordered true Bordered table. ","date":"23. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/scss-variables/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"SCSS Variables","url":"/de/tags/scss-variables/"}],"timestamp":1658568208,"title":"SCSS-Variablen"},{"authors":[],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"In diesem Artikel werden wir einige Shortcodes für Text untersuchen, z. B. Ausrichtung, Transformation und Auswahl.\nTexttransformation kleingeschriebener text. TEXT IN GROßBUCHSTABEN. Großgeschriebener Text. Textausrichtung Richten Sie den Text am Anfang aus. Richten Sie den Text zentriert aus. Text am Ende ausrichten. Textauswahl Dieser Absatz wird vollständig ausgewählt, wenn der Benutzer darauf klickt. Dieser Absatz ist nicht auswählbar, wenn er vom Benutzer angeklickt wird. ","date":"15. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/text/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Text","url":"/de/tags/text/"},{"title":"Text Alignment","url":"/de/tags/text-alignment/"},{"title":"Text Transform","url":"/de/tags/text-transform/"},{"title":"Text Selection","url":"/de/tags/text-selection/"}],"timestamp":1657818043,"title":"Text-Shortcodes"},{"authors":[],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":"In diesem Artikel erfahren Sie, wie Sie ein Docker-Image erstellen.\nPrinzip Verwenden Sie Hugo, um die Site zu erstellen und statische Dateien zu generieren. Verwenden Sie Nginx als Server zur Bearbeitung von Anfragen. Docker-Datei Erstellen Sie ein Dockerfile im Site-Stammverzeichnis.\n1############### 2# Build Stage # 3############### 4FROM razonyang/hugo as builder 5 6WORKDIR /src 7COPY . /src 8 9ARG HUGO_ENV=production 10ENV HUGO_ENV=${HUGO_ENV} 11 12# Base URL 13ARG HUGO_BASEURL=/ 14ENV HUGO_BASEURL=${HUGO_BASEURL} 15 16# Module Proxy 17ARG HUGO_MODULE_PROXY= 18ENV HUGO_MODULE_PROXY=${HUGO_MODULE_PROXY} 19 20# NPM mirrors, such as https://registry.npmmirror.com 21ARG NPM_CONFIG_REGISTRY= 22ENV NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY} 23 24# Install dependencies 25RUN npm install 26RUN npm install -g @fullhuman/postcss-purgecss rtlcss 27 28# Build site 29RUN hugo --minify --gc --enableGitInfo 30 31# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled, please replace the `en` with your default language code. 32# RUN cp ./public/en/404.html ./public/404.html 33 34############### 35# Final Stage # 36############### 37FROM nginx 38COPY --from=builder /src/public /app 39COPY deploy/nginx/default.conf /etc/nginx/conf.d/default.conf Der Build besteht aus zwei Phasen: einer Build-Phase und einer Release-Phase. Die Release-Phase enthält nur die generierten statischen Dateien, wodurch die Größe des Docker-Images so klein wie möglich gehalten wird. Wenn Sie defaultContentLanguageInSubdir aktiviert haben, kommentieren Sie es bitte aus und ändern Sie es bei Bedarf. Der Parameter HUGO_BASEURL wird verwendet, um das baseURL der Site während des Builds anzugeben, und wird im Allgemeinen verwendet, wenn sich das baseURL von der Konfiguration unterscheidet, sodass Sie es selbst entfernen können, wenn Sie es nicht benötigen. HUGO_MODULE_PROXY und NPM_CONFIG_REGISTRY sind optionale Build-Parameter, die entfernt werden können, wenn sie nicht benötigt werden. Nginx Erstellen Sie ein deploy/nginx/default.conf im Site-Root:\n1server { 2 listen 80; 3 listen [::]:80; 4 server_name localhost; 5 6 root /app; 7 8 location / { 9 index index.html index.htm; 10 } 11 12 location ~* ^/([^/]+) { 13 index index.html index.htm; 14 error_page 404 = @error; 15 } 16 17 error_page 404 /404.html; 18 location @error { 19 try_files /$1/404.html /404.html =404; 20 } 21} Bauen 1$ docker build -t mysite \\ 2 --build-arg HUGO_BASEURL=https://example.com \\ 3 . mysite: der Bildname. HUGO_BASEURL:das baseURL. Für Benutzer auf dem chinesischen Festland müssen Sie HUGO_MODULE_PROXY und NPM_CONFIG_REGISTRY angeben, um das Image erfolgreich und schnell zu erstellen:\n1$ docker build -t mysite \\ 2 --build-arg HUGO_BASEURL=https://example.com \\ 3 --build-arg HUGO_MODULE_PROXY=https://goproxy.cn \\ 4 --build-arg NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \\ 5 . Bereitstellung Es gibt viele Möglichkeiten, ein Docker-Image bereitzustellen, z. B. docker run, k8s usw. In diesem Artikel wird nur docker run erläutert.\nLaufen 1$ docker run \\ 2 -p 2333:80 \\ 3 --name mysite \\ 4 --restart=always \\ 5 mysite Für lokale Tests müssen Sie den baseURL-Parameter oder den HUGO_BASEURL-Build-Parameter ändern, z. B. http://localhost:2333.\nStoppen 1$ docker stop mysite Start 1$ docker start mysite Entfernen 1$ docker rm mysite ","date":"13. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/docker/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Docker","url":"/de/tags/docker/"},{"title":"Nginx","url":"/de/tags/nginx/"}],"timestamp":1657679429,"title":"Erstellen Eines Docker-Images"},{"authors":[],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":"In diesem Artikel wird erläutert, wie Sie Websites mithilfe von GitHub-Aktionen auf GitHub-Seiten bereitstellen.\nArbeitsablauf Erstellen Sie .github/workflows/gh-pages.yml im Site-Stammverzeichnis.\n1name: GitHub Pages 2on: 3 push: 4 branches: 5 - main 6permissions: 7 contents: write 8jobs: 9 build-and-deploy: 10 concurrency: ci-${{ github.ref }} 11 runs-on: ubuntu-latest 12 steps: 13 - name: Checkout 🛎️ 14 uses: actions/checkout@v3 15 with: 16 submodules: true 17 fetch-depth: 0 18 19 - name: Setup Node 20 uses: actions/setup-node@v3 21 with: 22 node-version: \u0026#39;16\u0026#39; 23 24 - name: Cache dependencies 25 uses: actions/cache@v2 26 with: 27 path: ~/.npm 28 key: ${{ runner.os }}-node-${{ hashFiles(\u0026#39;**/package-lock.json\u0026#39;) }} 29 restore-keys: | 30 ${{ runner.os }}-node- 31 32 - name: Install dependencies 33 run: npm install 34 35 - name: Setup Hugo 36 uses: peaceiris/actions-hugo@v2 37 with: 38 hugo-version: \u0026#39;latest\u0026#39; 39 extended: true 40 41 - name: Build 42 run: hugo --minify --gc --enableGitInfo 43 44 - name: Deploy 🚀 45 uses: peaceiris/actions-gh-pages@v3 46 with: 47 github_token: ${{ secrets.GITHUB_TOKEN }} 48 publish_dir: ./public Siehe auch Starter-Vorlage für GitHub-Seiten-Workflow。\n","date":"13. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/github-pages/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"GitHub Pages","url":"/de/tags/github-pages/"},{"title":"GitHub Actions","url":"/de/tags/github-actions/"}],"timestamp":1657679423,"title":"Auf GitHub-Seiten Bereitstellen"},{"authors":[],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":"In diesem Artikel erfahren Sie, wie Sie Ihre Site auf Cloudflare-Seiten bereitstellen.\nEin Projekt erstellen Wir beginnen damit, ein Git-Projekt zu erstellen und die entsprechenden Informationen einzugeben.\nBuild-Befehl 1npm i \u0026amp;\u0026amp; hugo --gc --minify --enableGitInfo -b https://hbs-skeleton.pages.dev npm i ist eine Verknüpfung zu npm install, die die während der Site-Erstellung verwendeten Abhängigkeiten installiert. -b https://hbs-skeleton.pages.dev gibt baseURL an, bitte ersetzen Sie es selbst. Sie können es auch in einer Konfigurationsdatei speichern, anstatt es im Build-Befehl anzugeben. Umgebungsvariablen Name Wert HUGO_VERSION 0.147.9 NODE_VERSION 16 404 Seite Cloudflare ist intelligent genug, um auch bei mehrsprachigen Websites die am besten passenden 404-Seiten zu verwenden, und funktioniert ohne zusätzliche Konfigurationen.\n","date":"12. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/cloudflare-pages/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Cloudflare Pages","url":"/de/tags/cloudflare-pages/"}],"timestamp":1657627584,"title":"Bereitstellung Auf Cloudflare-Seiten"},{"authors":[],"categories":[{"title":"Deployment","url":"/de/categories/deployment/"}],"content":"In diesem Artikel wird gezeigt, wie Sie Ihre Site auf Netlify bereitstellen.\nNetlify-Konfiguration Erstellen Sie ein netlify.toml im Site-Stammverzeichnis:\n1[build] 2 publish = \u0026#34;public\u0026#34; 3 4[build.environment] 5 NODE_VERSION = \u0026#34;17.6.0\u0026#34; 6 HUGO_VERSION = \u0026#34;0.147.9\u0026#34; 7 HUGO_ENABLEGITINFO = \u0026#34;true\u0026#34; 8 GO_VERSION = \u0026#34;1.17.7\u0026#34; 9 10[context.production] 11 command = \u0026#34;npm install \u0026amp;\u0026amp; hugo --minify\u0026#34; 12 13[context.production.environment] 14 HUGO_ENV = \u0026#34;production\u0026#34; 15 16[[headers]] 17 for = \u0026#34;/*\u0026#34; 18 [headers.values] 19 Referrer-Policy = \u0026#34;strict-origin-when-cross-origin\u0026#34; 20 X-Content-Type-Options = \u0026#34;nosniff\u0026#34; 21 X-Frame-Options = \u0026#34;deny\u0026#34; 22 X-XSS-Protection = \u0026#34;1; mode=block\u0026#34; 23 24[[redirects]] 25 from = \u0026#34;/:lang/*\u0026#34; 26 to = \u0026#34;/:lang/404.html\u0026#34; 27 status = 404 28 29[[redirects]] 30 from = \u0026#34;/*\u0026#34; 31 to = \u0026#34;/en/404.html\u0026#34; # Replace the \u0026#34;en\u0026#34; to your default language code if \u0026#34;defaultContentLanguageInSubdir\u0026#34; is enabled, otherwise use \u0026#34;/404.html\u0026#34; instead. 32 status = 404 Siehe auch Starter-Vorlage Netlify-Konfiguration.\n","date":"12. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/deployment/netlify/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Netlify","url":"/de/tags/netlify/"}],"timestamp":1657606849,"title":"Auf Netlify Bereitstellen"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"Benutzer, die die Blockkopie-Schaltfläche verwendet haben, sind kein Unbekannter in der Snackbar, die den Benutzer über die Ergebnisse der Anwendungsausführung informiert. In diesem Artikel wird ein Beispiel dafür gegeben, wie Snackbar verwendet werden kann, um den Bedarf des Benutzers an benutzerdefinierter Interaktion zu erfüllen.\nAPI Funktion Beschreibung show(body: String, duration: number = 2000) body: der Nachrichtentext, duration: die Dauer der Nachricht in Millisekunden. Exportieren Dank assets/main/js/custom.ts können wir das JavaScript anpassen, hier exportieren wir die gesamte Snackbar als globale Variable:\n1import Snackbar from \u0026#39;js/snackbar\u0026#39;; 2 3// Show a message via JavaScript. 4Snackbar.show(\u0026#39;a message with 3s duration from pure JavaScript\u0026#39;, 3000) 5 6// Export the Snackbar as a global variable, so that you can send a message from a HTML. 7// Such as: \u0026lt;button onclick=\u0026#34;Snackbar.show(\u0026#39;message from a button\u0026#39;)\u0026#34;\u0026gt;Snackbar\u0026lt;/button\u0026gt;. 8const _global = (window || global ) as any 9_global.Snackbar = Snackbar Nutzung Dann können wir es in HTML oder JavaScript aufrufen:\n1\u0026lt;button onclick=\u0026#34;Snackbar.show(\u0026#39;message from a button\u0026#39;)\u0026#34;\u0026gt;Snackbar\u0026lt;/button\u0026gt; Siehe Haken für Informationen zum Einfügen von benutzerdefiniertem HTML.\n","date":"2. Juli 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/snackbar/","series":[{"title":"Documentation","url":"/de/series/documentation/"}],"smallImg":"","tags":[{"title":"Snackbar","url":"/de/tags/snackbar/"},{"title":"HTML","url":"/de/tags/html/"},{"title":"JavaScript","url":"/de/tags/javascript/"}],"timestamp":1656767677,"title":"Snackbar"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"In diesem Artikel wird erläutert, wie Sie das Theme richtig aktualisieren.\nVersionen Vor dem Upgrade muss angegeben werden, um welche Version es sich handelt. Zusätzlich zu den relativ stabilen Versionen, die in Veröffentlichungen aufgeführt sind, können Sie einen Zweig wie master, develop verwenden oder sogar ein bestimmtes commit auswählen.\nIn diesem Artikel wird der Platzhalter [version] zur Darstellung der Version verwendet. Ersetzen Sie ihn einfach durch die Version, auf die Sie aktualisieren möchten.\nUpgrade Bitte wählen Sie je nach Installationsmethode den Upgrade-Schritt: Git-Submodul und Hugo-Modul.\nBeachten Sie, dass Sie unabhängig von der von Ihnen verwendeten Installationsmethode immer Abhängigkeiten über hugo mod npm pack und npm update abrufen und aktualisieren müssen.\nZusätzliche Abhängigkeiten Wenn Sie zusätzliche Abhängigkeiten hinzufügen möchten, müssen Sie diese in package.hugo.json statt in package.json definieren. Das liegt daran, dass hugo mod npm pack immer package.json überschreibt, wodurch das package.hugo.json des Themes und das package.hugo.json Ihrer Website zusammengeführt werden.\nGit-Submodul 1$ cd themes/hugo-theme-bootstrap 2$ git fetch 3$ git checkout [version] 4$ cd ../../ 5$ hugo mod npm pack 6$ npm update 7$ git add themes/hugo-theme-bootstrap package.hugo.json package.json package-lock.json 8$ git commit -m \u0026#39;Bump theme to [version]\u0026#39; git fetch Rufen Sie die neuesten Branch- und Tag-Informationen aus dem Theme-Repository ab. git checkout [version] Wechsel zur [version] Version. hugo mod npm pack und npm update zum Abrufen und Aktualisieren der neuesten Abhängigkeiten vom Thema. Hugo-Modul 1$ hugo mod get github.com/razonyang/hugo-theme-bootstrap@[version] 2$ hugo mod tidy 3$ hugo mod npm pack 4$ npm update 5$ git add go.mod go.sum package.hugo.json package.json package-lock.json 6$ git commit -m \u0026#39;Bump theme to [version]\u0026#39; hugo mod tidy Bereinigen Sie alle redundanten Abhängigkeiten. hugo mod npm pack und npm update rufen die neuesten Abhängigkeiten vom Thema ab und aktualisieren sie. ","date":"25. Juni 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/getting-started/upgradation/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1656166502,"title":"Upgrade"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Migration","url":"/de/categories/migration/"}],"content":"Verfolgen und überprüfen Sie Änderungen an den Quelldateien und der Dokumentation des Themes, um Sie bei der Migration von v0.* auf v1 zu unterstützen.\nWenn Sie nicht sicher sind, wie Sie ein Upgrade durchführen, lesen Sie die Upgrade-Anleitung.\nv1.0 Das ältere UI-Design ist im v0-Zweig eingefroren, der nur Fehlerbehebungen akzeptiert. Sie können mit diesem Zweig weiterhin das ältere UI-Design verwenden.\nAbhängigkeiten Bootstrap von v5.1 auf v5.2 verschoben. Benutzeroberfläche Das Einstellungsfeld wurde aus der oberen App-Leiste entfernt. Die sozialen Links wurden in der oberen App-Leiste hinzugefügt. – Der Navigationsschalter für Dokumente wurde in der oberen App-Leiste auf dem kleinen Bildschirm platziert. Layouts layouts/_default/archive.html entfernt, bitte ersetzen Sie das layout = archive durch layout = archives im Titelblatt. layouts/partials/docs/catalog.html in layouts/partials/docs/nav.html umbenannt. SCSS $variable-prefix ist veraltet, bitte verwenden Sie stattdessen $prefix. Verwenden Sie in Bootstrap integrierte CSS-Variablen anstelle von themendefinierten CSS-Variablen. Dokumente BREAKING CHANGE Verwenden Sie navWeight anstelle von weight zum Sortieren von Seiten im Dokumentennavigationssystem. Shortcodes Alarm-Shortcode BREAKING CHANGE alert Syntax ändern, siehe auch Alarm-Shortcode-Syntax. ","date":"20. Juni 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/migration/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1655718391,"title":"Migration Auf V1"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Der Shortcode code-toggle generiert Codeblöcke verschiedener Formate entsprechend dem Konfigurationscode eines unterstützten Formats.\nFormate JSON, TOML und YAML werden unterstützt.\nNutzung 1{{\u0026lt; code-toggle \u0026gt;}} 2CODE IN ANY SUPPORTED FORMAT 3{{\u0026lt;/ code-toggle \u0026gt;}} Mit einem Dateinamen:\n1{{\u0026lt; filename=\u0026#34;config\u0026#34; code-toggle \u0026gt;}} 2CODE IN ANY SUPPORTED FORMAT 3{{\u0026lt;/ code-toggle \u0026gt;}} Beispiel 1{{\u0026lt; code-toggle filename=\u0026#34;params\u0026#34; \u0026gt;}} 2{ 3 \u0026#34;logo\u0026#34;: \u0026#34;/images/logo.png\u0026#34;, 4 \u0026#34;customCSS\u0026#34;: [\u0026#34;foo.css\u0026#34;, \u0026#34;bar.css\u0026#34;], 5 \u0026#34;codeBlock\u0026#34;: { 6 \u0026#34;maxLines\u0026#34;: 10 7 } 8} 9{{\u0026lt;/ code-toggle \u0026gt;}} TOML YAML JSON params.toml\n1customCSS = [\u0026#39;foo.css\u0026#39;, \u0026#39;bar.css\u0026#39;] 2logo = \u0026#39;/images/logo.png\u0026#39; 3[codeBlock] 4 maxLines = 10 params.yaml\n1codeBlock: 2 maxLines: 10 3customCSS: 4- foo.css 5- bar.css 6logo: /images/logo.png params.json\n1{ 2 \u0026#34;codeBlock\u0026#34;: { 3 \u0026#34;maxLines\u0026#34;: 10 4 }, 5 \u0026#34;customCSS\u0026#34;: [ 6 \u0026#34;foo.css\u0026#34;, 7 \u0026#34;bar.css\u0026#34; 8 ], 9 \u0026#34;logo\u0026#34;: \u0026#34;/images/logo.png\u0026#34; 10} ","date":"13. Juni 2022","img":"/docs/shortcodes/code-toggle/featured.png","lang":"de","langName":"Deutsch","largeImg":"/docs/shortcodes/code-toggle/featured_hu_6ff21a143d433045.png","permalink":"/de/docs/shortcodes/code-toggle/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"/docs/shortcodes/code-toggle/featured_hu_e04768398376e8c4.png","tags":[{"title":"JSON","url":"/de/tags/json/"},{"title":"YAML","url":"/de/tags/yaml/"},{"title":"TOML","url":"/de/tags/toml/"}],"timestamp":1655110468,"title":"Code Umschalten"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Introduction","url":"/de/categories/introduction/"}],"content":" Ziele Leistung Freundliche Benutzererfahrung SEO Funktionen Hugo Pfeifen: wird zum Generieren von CSS- und JS-Assets verwendet. PurgeCSS: Nicht verwendetes CSS entfernen. Flexibel und konfigurierbar. Schnelle und gute Benutzererfahrung: Die Punktzahl von Google PageSpeed ​​Insights liegt bei über 95. RTL-Unterstützung: Arabische Demoseite. Aufbauend auf Bootstrap 5. FontAwesome-Symbole. Reaktionsschnell. PWA, auch bekannt als progressive Web-Apps. Verschiedene Paletten: blue, blue-gray, brown, cyan, green, indigo, orange, pink, purple, red, teal, yellow. Ein Dokumentenlayout zur Veröffentlichung von Projektdokumentationen, Notizen, digitalen Gärten, Zettelkästen usw. Hell-/Dunkelmodus. Schriftgrößenumschalter. Mehrsprachig (I18N). Lokale Suche. DocSearch. Beiträge anpinnen. Fußzeilenmenü. Codeblock-Panel: Code, Zeilennummer, Zeilenumbruch kopieren und erweitern. Code umschalten Semmelbrösel. Archiv. Bildbetrachter. Bildverarbeitung: Größe ändern und Bilder ausrichten. Lazy Loading der Ressourcen: image und iframe. Syntaxhervorhebung. Belohnungs-Widget, AKA Buy Me a Coffee: Jede Plattform, die QR-Code unterstützt, wird unterstützt. Inhaltsverzeichnis. Kommentare: Disqus, Utterances, Giscus und Staticman können sofort verwendet werden, Sie können auch andere Kommentardienste integrieren. Benutzerdefinierte Assets: benutzerdefiniertes CSS und JS. Haken: Bietet die Möglichkeit, benutzerdefinierten Code auf der Seite hinzuzufügen. Soziale Links. Verschiedene Shortcodes. Twitter-Karten und Open Graph. Creative Commons-Lizenz. Kontaktformular. Überschriften automatisch nummerieren. ","date":"13. Juni 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/getting-started/introduction/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Features","url":"/de/tags/features/"}],"timestamp":1655109129,"title":"Einführung"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"Bitte stellen Sie sicher, dass Sie die Voraussetzungen erfüllen, bevor Sie das Theme installieren.\nKonfiguration Für HBS müssen die folgenden Konfigurationen festgelegt werden.\nTOML YAML JSON config.toml\n1[build] 2 writeStats = true 3[taxonomies] 4 author = \u0026#39;authors\u0026#39; 5 category = \u0026#39;categories\u0026#39; 6 series = \u0026#39;series\u0026#39; 7 tag = \u0026#39;tags\u0026#39; config.yaml\n1build: 2 writeStats: true 3taxonomies: 4 author: authors 5 category: categories 6 series: series 7 tag: tags config.json\n1{ 2 \u0026#34;build\u0026#34;: { 3 \u0026#34;writeStats\u0026#34;: true 4 }, 5 \u0026#34;taxonomies\u0026#34;: { 6 \u0026#34;author\u0026#34;: \u0026#34;authors\u0026#34;, 7 \u0026#34;category\u0026#34;: \u0026#34;categories\u0026#34;, 8 \u0026#34;series\u0026#34;: \u0026#34;series\u0026#34;, 9 \u0026#34;tag\u0026#34;: \u0026#34;tags\u0026#34; 10 } 11} Build-Tools Tool Version Description Git Version Control Systems Hugo extended version 0.97.0 or above. Node.js and NPM NodeJS 16 or above used for installing CSS and JS dependencies, and building the assets. Go 1.12 or above required only when installed as a Hugo Module. Wir empfehlen die Verwendung der neuesten Version dieser Tools.\n","date":"13. Juni 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/getting-started/prerequisites/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Prerequisites","url":"/de/tags/prerequisites/"}],"timestamp":1655109129,"title":"Voraussetzungen"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Dieser Artikel zeigt, wie Sie den Shortcode gallery verwenden.\nNutzung 1{{\u0026lt; gallery images=\u0026#34;images/foo.png,images/bar.png\u0026#34; \u0026gt;}} ","date":"25. März 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/gallery/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Gallery","url":"/de/tags/gallery/"}],"timestamp":1648166400,"title":"Galerie-Shortcode"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Troubleshooting","url":"/de/categories/troubleshooting/"}],"content":"In diesem Artikel werden einige häufig auftretende Probleme aufgeführt, damit Sie sie leicht lösen können.\nCSS-Rendering falsch Das Problem ist wahrscheinlich auf postcss zurückzuführen. HBS muss die folgende Konfiguration einrichten: postcss verlässt sich auf die Datei hugo_stats.json, um nicht verwendetes CSS zu löschen.\n1[build] 2 writeStats = true js.Build: Abhängigkeiten konnten nicht aufgelöst werden 1Start building sites … 2hugo v0.94.0-63B23660+extended linux/amd64 BuildDate=2022-03-10T09:46:36Z VendorInfo=gohugoio 3ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 4ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 5ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 6ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 7ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 8ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;@fortawesome/free-solid-svg-icons\u0026#34; 9ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;@fortawesome/free-regular-svg-icons\u0026#34; 10ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;@fortawesome/free-brands-svg-icons\u0026#34; 11ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-routing\u0026#34; 12ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-strategies\u0026#34; 13ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-cacheable-response\u0026#34; 14ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-expiration\u0026#34; 15ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-precaching\u0026#34; 16ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/search/search.ts:1:21\u0026#34;: Could not resolve \u0026#34;mustache\u0026#34; 17ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/search/search.ts:1:17\u0026#34;: Could not resolve \u0026#34;mark.js/dist/mark.js\u0026#34; 18ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 19ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 20ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 21ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 22ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 23ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 24ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 25ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 26ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 27ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 28ERROR 2022/03/19 14:03:51 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 29ERROR 2022/03/19 14:03:51 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 30ERROR 2022/03/19 14:03:51 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 31ERROR 2022/03/19 14:03:51 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 32ERROR 2022/03/19 14:03:51 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 33ERROR 2022/03/19 14:03:51 TOCSS: failed to transform \u0026#34;viewer/scss/index.scss\u0026#34; (text/x-scss): SCSS processing failed: file \u0026#34;stdin\u0026#34;, line 1, col 1: File to import not found or unreadable: viewerjs/dist/viewer. 34ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;main/js/bundle.ts\u0026#34; (application/typescript): Could not resolve \u0026#34;bootstrap/js/src/dropdown\u0026#34; 35ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;icons/index.js\u0026#34; (application/javascript): Could not resolve \u0026#34;@fortawesome/fontawesome-svg-core\u0026#34; 36ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;service-worker/bundle.ts\u0026#34; (application/typescript): Could not resolve \u0026#34;workbox-core\u0026#34; 37ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;viewer/js/index.ts\u0026#34; (application/typescript): Could not resolve \u0026#34;viewerjs\u0026#34; 38Error: Error building site: JSBUILD: failed to transform \u0026#34;search/index.ts\u0026#34; (application/typescript): \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/search/search.ts:1:17\u0026#34;: Could not resolve \u0026#34;fuse.js\u0026#34; Dies liegt an den fehlenden CSS- und JS-Abhängigkeiten:\n1$ hugo mod npm pack 2$ npm install 3$ hugo server ","date":"19. März 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/troubleshooting/","series":[],"smallImg":"","tags":[],"timestamp":1647668801,"title":"Fehlerbehebung"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"Dieser Artikel bezieht sich auf die moderne, aktuelle Installationsmethode, das Theme lokal als Hugo-Modul zu installieren.\nProxy (optional) Wenn Sie sich auf dem chinesischen Festland ohne VPN befinden, schlägt der Download des Hugo-Moduls möglicherweise fehl.\nDafür gibt es zwei Proxys: GOPROXY.CN und GOPROXY.IO.\n1$ export HUGO_MODULE_PROXY=https://goproxy.cn Bitte beachten Sie, dass Hugo die Umgebungsvariable GOPROXY nicht respektiert. Bitte verwenden Sie stattdessen HUGO_MODULE_PROXY.\nSie können auch module.proxy festlegen, anstatt env var zu verwenden.\nTOML YAML JSON config.toml\n1[Modul] 2 Proxy = \u0026#39;https://goproxy.cn\u0026#39; config.yaml\n1Modul: 2 Proxy: https://goproxy.cn config.json\n1{ 2 \u0026#34;Modul\u0026#34;: { 3 \u0026#34;Proxy\u0026#34;: \u0026#34;https://goproxy.cn\u0026#34; 4 } 5} Installieren Sie eine neue Site von Grund auf Bitte verwenden Sie Starter-Vorlage für Ihre neue Website.\nAuf einer vorhandenen Site installieren Verwandeln Sie Ihre bestehende Site in ein Hugo-Modul 1$ cd my-blog 2$ hugo mod init github.com/me/my-blog Deklarieren Sie das Modul hugo-theme-bootstrap als Site-Abhängigkeit 1$ hugo mod get github.com/razonyang/hugo-theme-bootstrap@[version] Das `@@P0@@, branches or even commits.\nReplace [Version] with master for getting latest changes.\nCopy example site content into your site Clone the hugo-theme-bootstrap-skeleton Repo in ein temporäres Verzeichnis: 1$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton Kopieren Sie die Beispiel-Site-Konfiguration und den Inhalt in Ihre Site: 1$ mkdir config 2$ cp -a /tmp/hbs-skeleton/config/* ./config 3$ cp -r /tmp/hbs-skeleton/content/* ./content 4$ cp -r /tmp/hbs-skeleton/archetypes/* ./archetypes 5$ cp -r /tmp/hbs-skeleton/static/* ./static 6$ cp -r /tmp/hbs-skeleton/assets/* ./assets Löschen Sie das Repo erneut aus Ihrem temporären Verzeichnis: 1$ rm -rf /tmp/hbs-skeleton/ Abhängigkeiten über npm einbinden – Verwenden Sie node package manager npm, um Abhängigkeiten für dieses Thema abzurufen:\n1$ hugo mod npm pack 2$ npm install Vorschau Ihrer Website Starten Sie den integrierten Webserver von Hugo und navigieren Sie dann zu http://localhost:1313/.\n1$ hugo server ","date":"26. Februar 2022","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/getting-started/installation/hugo-module/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Installation","url":"/de/tags/installation/"},{"title":"Upgrade","url":"/de/tags/upgrade/"},{"title":"Hugo Module","url":"/de/tags/hugo-module/"}],"timestamp":1645888239,"title":"Installation Über Das Hugo-Modul"},{"authors":[{"title":"Andreas Deininger","url":"/de/authors/andreas-deininger/"},{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Layouts","url":"/de/categories/layouts/"}],"content":"In diesem Artikel erkunden wir das docs-Layout, das zum Schreiben von Projektdokumentationen, persönlichen Notizen und mehr verwendet werden kann.\nWenn Sie das Layout docs in anderen Abschnitten (notes) verwenden möchten, werfen Sie bitte einen Blick auf die Seite Inhalt.\nLayout Das docs-Layout besteht von Anfang bis Ende aus drei Abschnitten: Dokumentnavigationsleiste, Dokumentinhalt und Seitenleiste.\nInhaltsstruktur 1$ tree content/docs 2├── _index.md 3├── installation 4│ ├── _index.md 5│ ├── linux 6│ │ ├── _index.md 7│ │ ├── archlinux 8│ │ │ └── index.md 9│ │ └── ubuntu 10│ │ └── index.md 11│ └── windows 12│ └── index.md 13└── introduction 14 └── index.md Wie in der Abbildung gezeigt, zeigt dieses Beispiel, wie eine mehrstufige Dokumentnavigation organisiert wird.\nEnthält _index.md und wird zu einem Abschnitt. Wenn index.md enthalten ist, wird es zu einer Seite. Navigation Titel Im Allgemeinen wird title zur Anzeige in der Navigationsleiste verwendet, aber manchmal ist der Titel zu lang, um die Sache noch schlimmer zu machen. Zu diesem Zeitpunkt können wir den in der Navigation angezeigten Linktext über linkTitle ändern.\nTOML YAML JSON 1linkTitle = \u0026#39;Windows\u0026#39; 2title = \u0026#39;Unter Windows installieren\u0026#39; 1linkTitle: Windows 2title: Unter Windows installieren 1{ 2 \u0026#34;linkTitle\u0026#34;: \u0026#34;Windows\u0026#34;, 3 \u0026#34;title\u0026#34;: \u0026#34;Unter Windows installieren\u0026#34; 4} ###-Symbol\nDarüber hinaus stellen wir einen Parameter namens linkTitleIcon bereit, um das Symbol auf der linken Seite des Titels festzulegen.\nTOML YAML JSON 1linkTitleIcon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-columns fa-fw\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 1linkTitleIcon: \u0026lt;i class=\u0026#34;fas fa-columns fa-fw\u0026#34;\u0026gt;\u0026lt;/i\u0026gt; 1{ 2 \u0026#34;linkTitleIcon\u0026#34;: \u0026#34;\\u003ci class=\\\u0026#34;fas fa-columns fa-fw\\\u0026#34;\\u003e\\u003c/i\\u003e\u0026#34; 3} Gewicht Wir sortieren Dokumente nach dem Parameter navWeight, wobei die obere Gewichtung Vorrang hat. Für Dokumente ohne Angabe von „navWeight“ werden sie alphabetisch nach title sortiert.\nTOML YAML JSON 1navWeight = 1000 1navWeight: 1000 1{ 2 \u0026#34;navWeight\u0026#34;: 1000 3} Externe Links Manchmal müssen wir den Artikel mit einer externen Website verlinken. Zu diesem Zeitpunkt kann redirect verwendet werden und dann wird automatisch auf den angegebenen externen Link umgeleitet.\nTOML YAML JSON 1redirect = \u0026#39;https://github.com/razonyang/hugo-theme-bootstrap-skeleton\u0026#39; 1redirect: https://github.com/razonyang/hugo-theme-bootstrap-skeleton 1{ 2 \u0026#34;redirect\u0026#34;: \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap-skeleton\u0026#34; 3} Seitenleiste Widgets Standardmäßig enthält die Seitenleiste nur das Inhaltsverzeichnis, Sie können jedoch Widgets über Haken hinzufügen.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} 2{{- partial \u0026#34;sidebar/recent-posts\u0026#34; . }} ","date":"12. Januar 2022","img":"/docs/layouts/docs/featured.png","lang":"de","langName":"Deutsch","largeImg":"/docs/layouts/docs/featured_hu_ec4c91b03483f271.png","permalink":"/de/docs/layouts/docs/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"/docs/layouts/docs/featured_hu_947b7abb991171d8.png","tags":[],"timestamp":1642013794,"title":"Dokumentenlayout"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Menu","url":"/de/categories/menu/"}],"content":"Wir haben zwei Arten von Menüs vordefiniert: main und footer, repräsentieren die oberen Menüs der App-Leiste bzw. die Fußzeilenmenüs. In diesem Artikel wird die Verwendung der Menüs kurz vorgestellt.\nMenüeintragseigenschaften Eigentum Geben Sie ein Beschreibung name Zeichenfolge Der Name des Menüs. identifier Zeichenfolge Die ID des Menüs. weight Nummer Die Gewichtung des Menüs, das für die Sortierung in aufsteigender Reihenfolge verwendet wird. parent Zeichenfolge Das identifier des übergeordneten Menüeintrags. url Zeichenfolge Die URL des Menüs. pre Zeichenfolge Die führende Zeichenfolge vor dem Menünamen. post Zeichenfolge Die abschließende Zeichenfolge nach dem Menünamen. params Objekt Menüparameter. params.divider Boolescher Wert true bedeutet Teiler. params.icon Zeichenfolge Das Symbol HTML. params.description Zeichenfolge Die Beschreibung gilt nur für die Dropdown-Menüs der oberen App-Leiste. Siehe auch Eigenschaften des Menüeintrags.\nNutzung Konfiguration Die Menükonfigurationsdatei befindet sich standardmäßig in config/_default/menu.toml.\nNehmen wir als Beispiel das Menü main:\n1[[main]] 2 identifier = \u0026#34;home\u0026#34; 3 name = \u0026#34;Home\u0026#34; 4 weight = 1 5 url = \u0026#34;https://vandenboom.online/\u0026#34; 6 [main.params] 7 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-home\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 8[[main]] 9 identifier = \u0026#34;blog\u0026#34; 10 name = \u0026#34;Blog\u0026#34; 11 weight = 2 12 [main.params] 13 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-blog\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 14[[main]] 15 name = \u0026#34;Support\u0026#34; 16 identifier = \u0026#34;support\u0026#34; 17 weight = 40 18 [main.params] 19 description = \u0026#39;The HBS Support Community\u0026#39; 20 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-info-circle\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 21[[main]] 22 name = \u0026#34;Repository\u0026#34; 23 identifier = \u0026#34;repository\u0026#34; 24 parent = \u0026#34;support\u0026#34; 25 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap\u0026#34; 26 weight = 1 27 [main.params] 28 icon = \u0026#39;\u0026lt;i class=\u0026#34;fab fa-fw fa-github text-primary\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 29[[main]] 30 name = \u0026#34;Discussions\u0026#34; 31 identifier = \u0026#34;discussions\u0026#34; 32 parent = \u0026#34;support\u0026#34; 33 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap/discussions/new\u0026#34; 34 weight = 2 35 [main.params] 36 description = \u0026#34;Ask and discuss questions with others.\u0026#34; 37 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-comments text-success\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 38[[main]] 39 name = \u0026#34;Features Request\u0026#34; 40 identifier = \u0026#34;feature-request\u0026#34; 41 parent = \u0026#34;support\u0026#34; 42 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap/issues/new?template=feature_request.yml\u0026#34; 43 weight = 3 44 [main.params] 45 description = \u0026#34;Suggest new or updated features.\u0026#34; 46 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-lightbulb text-warning\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 47[[main]] 48 name = \u0026#34;Bug Report\u0026#34; 49 identifier = \u0026#34;bug-report\u0026#34; 50 parent = \u0026#34;support\u0026#34; 51 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap/issues/new?template=bug_report.yml\u0026#34; 52 weight = 3 53 [main.params] 54 description = \u0026#34;Tell us about a bug or issue.\u0026#34; 55 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-bug text-danger\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 56[[main]] 57 parent = \u0026#34;support\u0026#34; 58 weight = 4 59 [main.params] 60 divider = true Siehe Symbole zum Importieren von Symbolen und zum Festlegen der Symbolfarbe.\nTitelsache Wir können das Menü auch über die Titelseite der Seite konfigurieren.\n1[menu.main] 2 parent = \u0026#34;support\u0026#34; 3 weight = 6 4[menu.footer] 5 parent = \u0026#34;support\u0026#34; 6 weight = 6 7 [menu.footer.params] 8 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-question-circle\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; Das Code-Snippet hängt die Seite an die Menüs main und footer an.\nEs ist nicht erforderlich, die Parameter url und name anzugeben.\n","date":"16. Dezember 2021","img":"/docs/configuration/menu/featured.png","lang":"de","langName":"Deutsch","largeImg":"/docs/configuration/menu/featured_hu_b8ce76cf729f474.png","permalink":"/de/docs/configuration/menu/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"/docs/configuration/menu/featured_hu_f77029d9e49e0c3a.png","tags":[{"title":"Main Menu","url":"/de/tags/main-menu/"},{"title":"Footer Menu","url":"/de/tags/footer-menu/"}],"timestamp":1639646720,"title":"Speisekarte"},{"authors":[],"categories":[],"content":"Die Starter-Vorlage für Neulinge.\n","date":"16. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/getting-started/installation/starter-template/","series":[],"smallImg":"","tags":[],"timestamp":1639646720,"title":"Starter-Vorlage"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"FAQ","url":"/de/categories/faq/"}],"content":"Die Seite FAQ ist eine Sammlung häufig gestellter Fragen.\nVoraussetzungen Wir müssen eine Seite mit dem Namen faq/index.md im Verzeichnis content erstellen.\n1+++ 2title = \u0026#34;Frequently Asked Questions\u0026#34; 3layout = \u0026#34;faq\u0026#34; 4+++ Daten Die Daten werden im Verzeichnis data gespeichert, die Verzeichnisstruktur ist wie folgt:\n1data 2 /en 3 /faq 4 foo.json 5 bar.json 6 /zh-cn 7 /faq 8 foo.json 9 bar.json Wie Sie sehen, klassifizieren wir die Fragen nach ihrer Sprache. Und jede Datei stellt eine Gruppe von Fragen dar, die das gleiche Format wie folgt haben:\n1{ 2 \u0026#34;title\u0026#34;: \u0026#34;The group title\u0026#34;, 3 \u0026#34;weight\u0026#34;: 1, 4 \u0026#34;questions\u0026#34;: [ 5 { 6 \u0026#34;question\u0026#34;: \u0026#34;The question\u0026#34;, 7 \u0026#34;answer\u0026#34;: \u0026#34;The answer\u0026#34; 8 } 9 ] 10} Der Parameter weight wird zum Sortieren der Gruppe in aufsteigender Reihenfolge verwendet. ","date":"7. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/layouts/faq/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638884803,"title":"FAQ-Layout"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":" Hauptabschnitte Der Parameter mainSections wird zum Filtern von Seiten verwendet, standardmäßig ist er [\u0026quot;posts\u0026quot;, \u0026quot;docs\u0026quot;].\n1mainSections = [\u0026#34;blog\u0026#34;, \u0026#34;posts\u0026#34;, \u0026#34;docs\u0026#34;, \u0026#34;notes\u0026#34;] Vordere Angelegenheit Front Matter ist der Ort, an dem wir Seitenmetadaten und -parameter wie Titel, Datum usw. einfügen.\nFormate Hugo unterstützt drei Titelformate: YAML, TOML und JSON.\nTOML: identifiziert durch Öffnen und Schließen von +++. YAML: identifiziert durch Öffnen und Schließen von ---. JSON: ein einzelnes JSON-Objekt, umgeben von { und }, gefolgt von einer neuen Zeile. Nehmen wir TOML als Beispiel:\n1+++ 2title = \u0026#39;Hello world!\u0026#39; 3+++ Siehe auch Seitenparameter und Hugo Front Matter.\nInhaltstypen Möglicherweise möchten Sie in anderen Abschnitten das Layout docs anstelle von /docs verwenden, z. B. /notes. Das geht ganz einfach, indem Sie type = \u0026quot;docs\u0026quot; auf der Titelseite setzen.\nArchetypen Wir können auch einen Archetyp für notes erstellen, Hugo kümmert sich um das type.\n1$ cp themes/hugo-theme-bootstrap/archetypes/default.md archetypes/notes.md Und das anhängende type = \u0026quot;docs\u0026quot; auf der Titelseite von archetypes/notes.md. Jetzt kopiert hugo new notes/blah-blah-blah den Inhalt von archetypes/notes.md in Ihre neuen Notizen.\nEbenso können Sie auch die Archetypen für posts, docs usw. anpassen.\nNeue Artikel schreiben Angenommen, die Standardsprache ist en.\n1$ hugo new posts/new-post/index.md Mit dem obigen Befehl erstellen Sie einen neuen Beitrag in englischer Sprache. Ebenso können wir einen Beitrag in vereinfachtem Chinesisch erstellen:\n1$ hugo new posts/new-post/index.zh-cn.md Bitte beachten Sie, dass sich die erstellten Beiträge grundsätzlich im Entwurfszustand befinden. Für die Vorschau müssen Sie den Parameter -D des Befehls hugo server angeben. Ebenso müssen Sie den Parameter draft in false ändern oder den Parameter draft entfernen, wenn Sie den Artikel veröffentlichen möchten.\nAuswahlreihenfolge der Zusammenfassungen Wenn description nicht leer ist, wird es verwendet. Um ständig Zusammenfassungen zu verwenden, sollten Sie post.excerpt explizit als leere Zeichenfolge festlegen. Manuelle Aufteilung über \u0026lt;!\u0026ndash;more\u0026ndash;\u0026gt;. Wenn summary auf der Titelseite nicht leer ist, wird summary ausgewählt. Der Text des Inhalts wird bei post.excerptMaxLength abgeschnitten und bei post.plainifyExcerpt = true in Klartext oder HTML formatiert. 1[post] 2 # excerptMaxLength = 120 3 # copyright = false # Whether to display copyright section on each post. 4 # plainifyExcerpt = false # Format excerpt in HTML if false. Auswahlreihenfolge der vorgestellten Bilder Die images auf der Titelseite werden bevorzugt. Seitenbildressourcen, die dem Muster *feature* entsprechen. Zum Beispiel posts/my-page/feature.png, posts/my-page/featured-sample.jpg. Das vorgestellte Bild wird standardmäßig nicht über dem Inhalt angezeigt. Sie müssen diese Funktion über den folgenden Parameter aktivieren.\nTOML YAML JSON config/_default/params.toml\n1[Beitrag] 2 featureImage = true config/_default/params.yaml\n1Beitrag: 2 featureImage: true config/_default/params.json\n1{ 2 \u0026#34;Beitrag\u0026#34;: { 3 \u0026#34;featureImage\u0026#34;: true 4 } 5} Auswahlreihenfolge der Miniaturansichten Die images auf der Titelseite werden bevorzugt. Seitenbildressourcen, die den Mustern des Dateinamens entsprechen: *feature*, *cover* und *thumbnail*. Zum Beispiel posts/my-page/feature.png, posts/my-page/thumnail.jpg. Die Größe der Seitenbildressourcen wird auf mehrere kleinere Versionen geändert, um sie an die Geräte des Benutzers anzupassen und so Bandbreite zu sparen.\nBeiträge anheften Sie können Beiträge auf der Startseite anheften, indem Sie auf der Titelseite pinned auf true setzen.\n1+++ 2title = \u0026#34;Pinned Post\u0026#34; 3pinned = true 4pinnedWeight = 100 5+++ Wenn es mehrere angepinnte Beiträge gibt, werden diese in absteigender Reihenfolge nach pinnedWeight sortiert.\n1pinnedPost = false # Disable pinned posts globally. 2pinnedPostCount = 2 # The number of pinned posts shown on home page. Karussell Beiträge im Karussell werden angezeigt.\n1+++ 2carousel = true 3+++ Autoren HBS unterstützt die Taxonomie des Autors. Zuerst müssen Sie es aktivieren, indem Sie die folgende Konfiguration festlegen.\nTOML YAML JSON config.toml\n1[taxonomies] 2 author = \u0026#39;authors\u0026#39; config.yaml\n1taxonomies: 2 author: authors config.json\n1{ 2 \u0026#34;taxonomies\u0026#34;: { 3 \u0026#34;author\u0026#34;: \u0026#34;authors\u0026#34; 4 } 5} Und dann definieren Sie das authors in Ihren Beiträgen.\n1+++ 2authors = [ 3 \u0026#34;Foo\u0026#34;, 4 \u0026#34;Bar\u0026#34; 5] 6+++ Jetzt werden die Autoren in den Post-Meta- und Sidebar-Taxonomien präsent sein.\nAbschließend müssen wir den Autor möglicherweise genauer vorstellen. Nehmen Sie als Beispiel Foo. Erstellen Sie einfach eine Seite mit dem folgenden Inhalt und speichern Sie sie als /content/authors/foo/index.md.\n1--- 2title: Razon Yang 3description: Gopher, PHPer, Full Stack Engineer. 4social: 5 github: razonyang 6 twitter: razonyang 7--- title: Der Anzeigename des Autors. description: Die Einleitung. social: Soziale Links. Das Bild des Autors sollte im selben Ordner mit dem Muster avatar* abgelegt werden, z. B. /content/authors/foo/avatar.png. Wenn kein Avatar vorhanden ist, wird social.email zum Generieren des Gravatar-Avatars verwendet.\nAls Nächstes Konfiguration optimieren Speisekarte Schauen und fühlen ","date":"4. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/content/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Authoring","url":"/de/tags/authoring/"},{"title":"Articles","url":"/de/tags/articles/"}],"timestamp":1638585819,"title":"Inhalte Hinzufügen"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"Dieser Artikel bezieht sich auf die traditionelle Installationsmethode, bei der das Theme lokal als Git-Submodul geklont wird. Obwohl diese Installationsmethode immer noch weit verbreitet ist, empfehlen wir, das Theme als Hugo-Modul zu installieren.\nErstellen Sie eine neue Site von Grund auf 1$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton myblog 2$ cd myblog 3$ git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap 4$ sed -i \u0026#34;s/theme:.*/theme: hugo-theme-bootstrap/g\u0026#34; config/_default/config.yaml 5$ rm go.mod go.sum 6$ hugo mod npm pack 7$ npm install 8$ hugo server Wenn Sie Windows verwenden, verwenden Sie stattdessen xcopy .\\themes\\hugo-theme-bootstrap\\exampleSite /E.\nsed ersetzt theme: github.com/razonyang/hugo-theme-bootstrap durch theme: hugo-theme-bootstrap.\nAuf einer vorhandenen Site installieren 1$ cd myblog 2$ git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap 3$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton 4$ mkdir config 5$ cp -a /tmp/hbs-skeleton/config/* ./config 6$ cp -r /tmp/hbs-skeleton/content/* ./content 7$ cp -r /tmp/hbs-skeleton/archetypes/* ./archetypes 8$ cp -r /tmp/hbs-skeleton/static/* ./static 9$ cp -r /tmp/hbs-skeleton/assets/* ./assets 10$ sed -i \u0026#34;s/theme:.*/theme: hugo-theme-bootstrap/g\u0026#34; config/_default/config.yaml 11$ hugo mod npm pack 12$ npm install 13$ hugo server Wenn Sie einen neuen Klon erstellen, müssen Sie Ihr Submodul über git submodule update --init --recursive aktualisieren oder mit dem Submodul git clone --recursive \u0026lt;repo\u0026gt; klonen.\n","date":"4. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/getting-started/installation/git-submodule/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Installation","url":"/de/tags/installation/"},{"title":"Upgrade","url":"/de/tags/upgrade/"},{"title":"Git Submodule","url":"/de/tags/git-submodule/"}],"timestamp":1638585819,"title":"Installation Über Git-Submodul"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Image Viewer","url":"/de/categories/image-viewer/"}],"content":"Der Bildbetrachter ist eine Bildergalerie, die angezeigt wird, wenn Sie auf ein nicht verlinkbares Bild klicken.\nEs bietet auch viele Werkzeuge wie Vergrößern, Verkleinern und Drehen.\nDer Autor-Avatar wurde standardmäßig gefiltert.\nSite-Parameter Der Bildbetrachter war standardmäßig aktiviert. Sie können ihn deaktivieren, indem Sie den Parameter viewer auf false setzen.\nOptionen Sie können die Optionen optimieren, indem Sie assets/viewer/js/options.ts erstellen.\n1const options = { 2 className: \u0026#34;image-viewer\u0026#34;, 3 // ... 4}; 5export default options; Die verfügbaren Optionen sind unter Viewer.js-Optionen aufgeführt.\n","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/image-viewer/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638535610,"title":"Bildbetrachter"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"Standardmäßig verfügt eine Website, die dieses Design verwendet, über die Standardschriftarten, -farben und das allgemeine Erscheinungsbild. Allerdings kann das Standardschema nicht jeden zufriedenstellen, aber keine Sorge, Sie können die Theme-Standardeinstellungen wie Palettenfarben, Schriftarten und Syntaxhervorhebung problemlos überschreiben.\nFavoriten HBS generiert Symbole in mehreren Größen basierend auf der Datei assets/favicon.webp (höhere Priorität) oder assets/favicon.png. Speichern Sie einfach Ihr eigenes Favicon-Bild unter demselben Pfad, um die Standardeinstellungen zu überschreiben.\nSie müssen auch das Maskensymbol assets/safari-pinned-tab.svg überschreiben.\nDie statischen Symbole static/images/icons/icon-{size}.png haben aus Gründen der Abwärtskompatibilität eine höhere Priorität.\nBenutzerdefinierte Größen Sie können die gewünschten Größen über die Datei params ändern.\nTOML YAML JSON 1[favicon] 2 [[favicon.sizes]] 3 size = \u0026#39;16x16\u0026#39; 4 [[favicon.sizes]] 5 size = \u0026#39;32x32\u0026#39; 6 [[favicon.sizes]] 7 size = \u0026#39;150x150\u0026#39; 8 [[favicon.sizes]] 9 rel = \u0026#39;apple-touch-icon\u0026#39; 10 size = \u0026#39;180x180\u0026#39; 11 [[favicon.sizes]] 12 size = \u0026#39;192x192\u0026#39; 1favicon: 2 sizes: 3 - size: 16x16 4 - size: 32x32 5 - size: 150x150 6 - rel: apple-touch-icon 7 size: 180x180 8 - size: 192x192 1{ 2 \u0026#34;favicon\u0026#34;: { 3 \u0026#34;sizes\u0026#34;: [ 4 { 5 \u0026#34;size\u0026#34;: \u0026#34;16x16\u0026#34; 6 }, 7 { 8 \u0026#34;size\u0026#34;: \u0026#34;32x32\u0026#34; 9 }, 10 { 11 \u0026#34;size\u0026#34;: \u0026#34;150x150\u0026#34; 12 }, 13 { 14 \u0026#34;rel\u0026#34;: \u0026#34;apple-touch-icon\u0026#34;, 15 \u0026#34;size\u0026#34;: \u0026#34;180x180\u0026#34; 16 }, 17 { 18 \u0026#34;size\u0026#34;: \u0026#34;192x192\u0026#34; 19 } 20 ] 21 } 22} Hintergrundbild 1# Use the same image on light and dark modes. 2backgroundImage = [\u0026#39;/images/bg.png\u0026#39;] 3 4# Use different images on light and dark modes. 5backgroundImage = [\u0026#39;/images/bg-light.png\u0026#39;, \u0026#39;/images/bg-dark.png\u0026#39;] Paletten HBS bietet zahlreiche Paletten: blue, blue-gray, brown, cyan, green, indigo, orange, pink, purple, red, teal, yellow.\nVerfügbare Paletten Die Palettenauswahl im Einstellungsfeld basiert auf dem Parameter palettes.\n1palettes = [\u0026#34;blue\u0026#34;, \u0026#34;blue-gray\u0026#34;, \u0026#34;indigo\u0026#34;] Sie können die Palettenauswahl auch deaktivieren, indem Sie den Parameter palettes auf ein leeres Array [] setzen.\nStandardpalette 1palette = \u0026#34;indigo\u0026#34; Sie müssen den Browser-Cache leeren, nachdem Sie die Standardpalette geändert haben.\nPalettenfarbe überschreiben 1$palette-blue: darkblue; Nach der Änderung der SCSS-Variablen auf assets/main/scss/_variables.scss wird die Farbe der blue-Palette in darkblue geändert. Weitere Informationen finden Sie im SCSS-Variablen.\nSchriftarten Schriftfamilie Wir geben keine Schriftart an, sodass system-ui in den meisten Browsern verwendet wird.\nSie können problemlos andere Web-Schriftarten verwenden, z. B. Google-Schriftarten. Nehmen wir als Beispiel die Schriftart Roboto.\nZuerst importieren wir die Schriftart und überschreiben dann die Variable body-font-family in assets/main/scss/_custom.scss:\n1@import url(\u0026#39;https://fonts.googleapis.com/css2?family=Roboto\u0026amp;display=swap\u0026#39;); 2:root { 3 --#{$prefix}body-font-family: \u0026#39;Roboto\u0026#39;, sans-serif; 4} Syntaxhervorhebung Für das Design müssen die folgenden Markup-Parameter auf bestimmte Werte festgelegt werden.\nlineNos: true lineNumbersInTable: false noClasses: false Siehe auch Hervorhebung konfigurieren.\nStil 1$ hugo gen chromastyles --style=solarized-dark \u0026gt; assets/main/scss/_highlight.scss Siehe auch Alle unterstützten Stile.\nSymbole HBS verwendet einen benutzerdefinierten FontAwesome v5-Symbolsatz, der nur die vom Thema verwendeten Symbole enthält, um die Größe der Symboldatei zu reduzieren.\nSymbole hinzufügen Da benutzerdefinierte Symbole erforderlich sind, bietet HBS eine Funktion für benutzerdefinierte Symbole. Erstellen Sie einfach eine assets/icons/custom.js-Datei im Stammverzeichnis der Site und importieren Sie die gewünschten Symbole.\n1// import { faClock } from \u0026#39;@fortawesome/free-solid-svg-icons\u0026#39;; 2// import { faAddressBook } from \u0026#39;@fortawesome/free-regular-svg-icons\u0026#39;; 3// import { faAmazon, faGoogle } from \u0026#39;@fortawesome/free-brands-svg-icons\u0026#39;; 4 5const icons = [ 6 // faClock, 7 // faAddressBook, 8 // faAmazon, faGoogle, 9]; 10export default icons; Damit dies funktioniert, müssen Sie den Kommentar entfernen, d. h. das Präfix // entfernen.\nWörtlich stehen @fortawesome/free-solid-svg-icons, @fortawesome/free-regular-svg-icons und @fortawesome/free-brands-svg-icons für die Symbole Solid, Regular und Brand.\nJS-Variablen JS-Variablen werden mit camelCase benannt, und ihre entsprechenden Klassennamen sind in Kleinbuchstaben geschrieben und durch eine horizontale Linie voneinander getrennt.\nKlasse JS-Variable fa-clock faClock fa-address-book faAddressBook fa-amazon faAmazon fa-google faGoogle Nutzung Abhängig von der Art des Symbols sind auch ihre Klassenpräfixe unterschiedlich. Die entsprechende Beziehung ist wie folgt:\nFreundlich Klassenpräfix Solide fas Regelmäßig far Marke fab Nimmt als Beispiel die zuvor importierten Symbole:\nHTML \u0026lt;i class=\u0026quot;fas fa-clock\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;far fa-address-book\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;fab fa-amazon\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;fab fa-google\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; Wenn das Symbol nicht richtig angezeigt wird, überprüfen Sie bitte, ob das Präfix korrekt ist.\nSymbolfarbe Sie können entweder die Farb-CSS-Dienstprogramme oder das style-Attribut zum Festlegen der Symbolfarbe angeben.\nHTML \u0026lt;i class=\u0026quot;fas fa-clock text-success\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;fas fa-clock text-danger\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;far fa-clock\u0026quot; style=\u0026quot;color: blue\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;far fa-clock\u0026quot; style=\u0026quot;color: pink\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; Wenn Sie es in Konfigurationen, im Titelblatt usw. verwenden, sollten Sie den Code in Anführungszeichen/Escapezeichen setzen müssen, da sonst die YAML/TOML/JSON-Analyse möglicherweise fehlschlägt. Zum Beispiel,\n1--- 2menu: 3 main: 4 params: 5 icon: \u0026#39;\u0026lt;i class=\u0026#34;far fa-clock\u0026#34; style=\u0026#34;color: blue\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 6--- ","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/look-and-feel/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Color","url":"/de/tags/color/"},{"title":"Palette","url":"/de/tags/palette/"},{"title":"Fonts","url":"/de/tags/fonts/"},{"title":"Syntax Highlighting","url":"/de/tags/syntax-highlighting/"},{"title":"Icons","url":"/de/tags/icons/"}],"timestamp":1638531777,"title":"Schauen Und Fühlen"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"PWA","url":"/de/categories/pwa/"}],"content":"PWAs(Progressive Web-Apps) sind Web-Apps, die mithilfe einer Reihe spezifischer Technologien und Standardmuster entwickelt wurden, damit sie sowohl Web- als auch native App-Funktionen nutzen können.\nHBS bietet einige grundlegende Funktionen, wie z. B. die Installation der Site auf dem Startbildschirm, das Vorcache von Dateien und die Offline-Verfügbarkeit.\nSite-Parameter Zuerst müssen wir den Parameter pwa angeben, auch wenn er leer ist.\nName Geben Sie ein Standard Beschreibung pwa Objekt - pwa.manifest Objekt - Web-App-Manifest pwa.manifest.name Zeichenfolge - Standardmäßig wird der Site-Titel verwendet pwa.manifest.short_name Zeichenfolge - Kurzname Ihrer Website. pwa.manifest.display Zeichenfolge standalone pwa.manifest.description Zeichenfolge - Standardmäßig wird die Site-Beschreibung verwendet. pwa.manifest.theme_color Zeichenfolge - pwa.manifest.background_color Zeichenfolge - pwa.manifest.icons Array - pwa.manifest.icons.sizes Zeichenfolge - Symbolgrößen, z. B. „96 x 96 Zoll“ pwa.manifest.icons.src Zeichenfolge - URL des Symbols pwa.precache Objekt - Assets vorab zwischenspeichern pwa.precache.fonts Array - Schriftarten vorab zwischenspeichern pwa.precache.images Array - Bilder vorab zwischenspeichern pwa.precache.pages Array - Seiten vorab zwischenspeichern pwa.precache.scripts Array - Skripte vorab zwischenspeichern pwa.precache.styles Array - Precache-Stile Manifestieren Das manifest.json wird automatisch generiert.\nOffline Offline-Seite Wenn Sie eine neue Seite ohne Netzwerk anfordern, wird die Offline-Seite angezeigt.\nWir müssen eine Offline-Seite namens offline/_index.md im Verzeichnis content mit dem folgenden Titelthema erstellen.\n1+++ 2title = \u0026#39;Offline\u0026#39; 3+++ Offline-Bild Wie bei der Offline-Seite gibt es ein Offline-Bild zum Anfordern von Bildern ohne Netzwerk. HBS stellt ein integriertes Offline-Image mit dem Dateinamen assets/images/offline.png bereit. Sie können es überschreiben, indem Sie im Stammverzeichnis Ihrer Website ein eigenes Offline-Image mit demselben Dateinamen erstellen.\nVorcache TOML YAML JSON params.toml\n1[pwa] 2 [pwa.precache] 3 fonts = [\u0026#39;/assets/katex/fonts/KaTeX_Math-Italic.woff2\u0026#39;] 4 images = [\u0026#39;/images/logo.webp\u0026#39;, \u0026#39;/images/Martijn_001.jpeg\u0026#39;] 5 pages = [\u0026#39;/\u0026#39;] 6 scripts = [\u0026#39;/assets/js/foo.js\u0026#39;] 7 styles = [\u0026#39;https://fonts.googleapis.com/css2?family=Roboto\u0026amp;display=swap\u0026#39;] params.yaml\n1pwa: 2 precache: 3 fonts: 4 - /assets/katex/fonts/KaTeX_Math-Italic.woff2 5 images: 6 - /images/logo.webp 7 - /images/Martijn_001.jpeg 8 pages: 9 - / 10 scripts: 11 - /assets/js/foo.js 12 styles: 13 - https://fonts.googleapis.com/css2?family=Roboto\u0026amp;display=swap params.json\n1{ 2 \u0026#34;pwa\u0026#34;: { 3 \u0026#34;precache\u0026#34;: { 4 \u0026#34;fonts\u0026#34;: [ 5 \u0026#34;/assets/katex/fonts/KaTeX_Math-Italic.woff2\u0026#34; 6 ], 7 \u0026#34;images\u0026#34;: [ 8 \u0026#34;/images/logo.webp\u0026#34;, 9 \u0026#34;/images/Martijn_001.jpeg\u0026#34; 10 ], 11 \u0026#34;pages\u0026#34;: [ 12 \u0026#34;/\u0026#34; 13 ], 14 \u0026#34;scripts\u0026#34;: [ 15 \u0026#34;/assets/js/foo.js\u0026#34; 16 ], 17 \u0026#34;styles\u0026#34;: [ 18 \u0026#34;https://fonts.googleapis.com/css2?family=Roboto\\u0026display=swap\u0026#34; 19 ] 20 } 21 } 22} ","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/pwa/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Manifest","url":"/de/tags/manifest/"},{"title":"Offline","url":"/de/tags/offline/"},{"title":"Precache","url":"/de/tags/precache/"}],"timestamp":1638531541,"title":"Progressive Web-App"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Archive","url":"/de/categories/archive/"}],"content":"Die Archivseite ist eine Sammlung von Beiträgen, gruppiert nach Jahr.\nVoraussetzungen Die Seiten werden nicht automatisch erstellt, wir müssen zuerst Archivabschnitte erstellen:\n1$ tree content/archives 2├── 2021 3│ ├── _index.md 4├── 2022 5│ ├── _index.md 6├── _index.md Der Inhalt dieser Dateien enthält lediglich einen title Parameter.\nSite-Parameter Name Geben Sie ein Standard Beschreibung archive Objekt - Archiv. archive.dateFormat Zeichenfolge Jan 2 Archivdatumsformat. archive.monthFormat Zeichenfolge January Archiv-Monatsformat, z.B. 1, 01, Jan und January. archive.basePath Zeichenfolge /archives ","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/layouts/archives/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501411,"title":"Archivlayout"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Search","url":"/de/categories/search/"}],"content":"Wenn Ihre Website viele Artikel enthält, kann es für Leser schwierig sein, einen Artikel aufzurufen. Aus diesem Grund haben wir die Suchfunktion hinzugefügt.\nVoraussetzungen Sie müssen lediglich eine Seite mit dem Namen search/_index.md im Verzeichnis content erstellen.\n1+++ 2title = \u0026#34;Search\u0026#34; 3+++ Site-Parameter Name Geben Sie ein Standard Beschreibung search Objekt - Suchkonfiguration. search.paginate Ganzzahl 10 Pagination. search.indexPaginate Ganzzahl 1000 Paginierung der Indexdatei. search.indexPreload Boolescher Wert true Ob die Suchindizes vorab geladen werden sollen. search.maxResults Nummer 100 Die maximale Anzahl an Suchergebnissen. search.resultContentCharactersCount Ganzzahl 240 Die maximale Zeichenanzahl des Ergebnisinhalts für die Anzeige. search.shortcut Array [\u0026quot;/\u0026quot;] Die Suchverknüpfung, d. h. [\u0026quot;Control\u0026quot;, \u0026quot;/\u0026quot;], deaktiviert sie durch ein leeres Array []. search.fuse Objekt - Fuse.js-Optionen. search.fuse.ignoreLocation Boolescher Wert true search.fuse.location Ganzzahl - search.fuse.isCaseSensitive Boolescher Wert - search.fuse.minMatchCharLength Ganzzahl - search.fuse.threshold Doppelt - search.fuse.distance Ganzzahl - search.fuse.useExtendedSearch Boolescher Wert - ","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/layouts/search/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501411,"title":"Suchlayout"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/de/categories/widget/"}],"content":"The author widget is located in the sidebar, in order to introduce yourself briefly.\nSite Parameters config/_default/author.toml is deprecated, please use params.author instead.\n1// params.toml 2[author] 3name = \u0026#34;Foobar\u0026#34; 4[author.params] 5[author.social] Name Type Default Description author Object - Author profile shown in sidebar. author.name String - Name. author.avatar String /images/Martijn_001.jpeg Avatar. author.bio Object - Bio. author.company String - Company. author.location String - Location. author.about String - The external about page. The internal about page will be used if not set. author.params Object - author.params.layout String - Optional values: compact. author.social Object - Social Links. ","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/widgets/author/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501019,"title":"Author Widget"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/de/categories/widget/"}],"content":"The reward widget, AKA buy me a coffee widget, gives the readers a way to support a creator through the use of donations or tips.\nHowever, it limited to the QR code image, please take a look at the funding widget.\nSite Parameters The reward is a key value pair that mapping from platform to their QR Code image, therefore, any platform that supports QR code is supported.\nName Type Default Description reward Object - reward.alipay String - Alipay QR Code Image. reward.wechat String - Wechat QR Code Image. Page Parameter Name Type Default Description reward Boolean true Turn on/off reward widget. ","date":"3. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/widgets/reward/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Buy Me a Coffee","url":"/de/tags/buy-me-a-coffee/"}],"timestamp":1638501019,"title":"Reward Widget"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Social Links","url":"/de/categories/social-links/"}],"content":"The social parameter is a set of key value pairs of social links that mapping from platform to their user identifier. It supports many popular social platforms, such as Twitter, Facebook, Reddit, GitHub. This article lists all supported platforms and how to use them.\nUsage There are three places you can put social links to: top app bar, Author Widget and footer.\nTop App Bar TOML YAML JSON params.toml\n1[topAppBar] 2 [topAppBar.social] 3 github = \u0026#39;foobar\u0026#39; params.yaml\n1topAppBar: 2 social: 3 github: foobar params.json\n1{ 2 \u0026#34;topAppBar\u0026#34;: { 3 \u0026#34;social\u0026#34;: { 4 \u0026#34;github\u0026#34;: \u0026#34;foobar\u0026#34; 5 } 6 } 7} Author Widget Set up social links by editing a file config/_default/params.toml with the following content:\n1[author.social] 2 email = \u0026#34;user@domain.tld\u0026#34; 3 github = \u0026#34;githubusername\u0026#34; Footer Set up social links by putting the following content in config/_default/params.toml.\n1[social] 2email = \u0026#34;user@domain.tld\u0026#34; 3github = \u0026#34;githubusername\u0026#34; Platforms The value can be changed to a full URL if necessary.\nPlatform User Identifier email Email Address facebook Facebook Username facebookgroup Facebook Group Name github GitHub Username gitlab GitLab Username instagram Instagram Username itchio itch.io Username linkedin LinkedIn Username quora Quora Username stackoverflow Stack Overflow User ID tumblr Tumblr Username twitter Twitter Username weibo Weibo Username zhihu Zhihu Username reddit Reddit Username telegram Telegram Username qq QQ Number dockerhub Docker Hub Username bitbucket Bitbucket Workspace ID kaggle Kaggle Username medium Medium Username or custom domain(e.g. https://razonyang.com) lastfm Last.fm Username bibibili BiliBili User ID youtube Youtube Channel ID discord Discord Invite Code discourse Forum URL tiktok TikTok Username pinterest Pinterest Username mastodon Mastodon Username liberapay Liberapay Username paypal Paypal Username patreon Patreon Username tipeee Tipeee Username rss Empty string for disabling the RSS link website Website URL ","date":"2. Dezember 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/widgets/social-links/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638433665,"title":"Social Links"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Contact Form","url":"/de/categories/contact-form/"}],"content":"Wir können unsere E-Mail-Adresse auf soziale Links setzen, damit Leser mit uns Kontakt aufnehmen können. Leider werden E-Mails mehr oder weniger als Spam behandelt und sogar gefiltert. Aus diesem Grund bieten wir eine Funktion namens Kontaktformular an.\nVoraussetzungen Wir müssen eine Kontaktseite mit dem Namen contact/index.md im Verzeichnis content erstellen, damit wir auf das Kontaktformular zugreifen können.\n1+++ 2title = \u0026#34;Contact Us\u0026#34; 3layout = \u0026#34;contact\u0026#34; 4+++ Nach der Erstellung erscheint der Link im Profil-Widget.\nParameter Name Geben Sie ein Standard Beschreibung contact Objekt - contact.endpoint Zeichenfolge - Siehe auch Backends. contact.file Boolescher Wert false Datei-Upload aktivieren/deaktivieren. contact.fileField Zeichenfolge - Der Name des Dateifelds. contact.reCaptcha Objekt - Google reCAPTCHA contact.reCaptcha.siteKey Zeichenfolge - Backends Es ist so konzipiert, dass es mit den meisten Backends kompatibel ist, z. B. Netlify-Formular, Getform, Formspree und Fabform.io. Funktioniert auch mit der selbstgehosteten Alternative Formailer.\nNetlify Netlify-Formular werden standardmäßig unterstützt, daher müssen Sie den Parameter contact.endpoint nicht angeben.\nDie Demo-Site verwendet Getform anstelle des Netlify-Formulars, da Netlify Ihre Formularebene automatisch aktualisiert, wenn Sie das Limit des aktuellen Plans überschreiten, was zu zusätzlichen Kosten führt.\nBitte stellen Sie sicher, dass der Parameter contact.endpoint leer ist, wenn Sie das Netlify-Formular verwenden möchten.\nFormailer Formailer wird mit einem Kontaktformular-Haken unterstützt, um eine fehlende Eingabe in das Formular einzufügen.\nSiehe auch Beispiel für Google Cloud Functions Upstream.\nAndere Nehmen wir Getform als Beispiel:\n1[contact] 2 endpoint = \u0026#34;YOUR_ENDPOINT\u0026#34; reCAPTCHA Zusätzlich zum Festlegen des Parameters contact.reCaptcha.siteKey müssen Sie je nach Backend weitere Schritte ausführen:\nNetlify GetForm ","date":"30. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/layouts/contact/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Netlify","url":"/de/tags/netlify/"},{"title":"Getform","url":"/de/tags/getform/"}],"timestamp":1638287760,"title":"Kontaktformular"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Assets","url":"/de/categories/assets/"}],"content":"Als anpassbares Theme bietet es die Möglichkeit, Assets anzupassen, sei es die Anpassung von CSS und JS oder die Einführung von CSS und JS von Drittanbietern.\nInterne Vermögenswerte Erstellen und bearbeiten Sie einfach die Dateien assets/main/scss/_variables.scss, assets/main/scss/_custom.scss und assets/main/js/custom.ts.\nDiese Dateien werden in einer gebündelt, um HTTP-Anfragen zu reduzieren.\nExterne Vermögenswerte Alle externen CSS- und JS-Ressourcen können über die Parameter customCSS und customJS importiert werden.\n1customCSS = [ 2 \u0026#34;external-foo.css\u0026#34;, 3 \u0026#34;external-bar.css\u0026#34; 4] 5 6customJS = [ 7 \u0026#34;external-foo.js\u0026#34;, 8 \u0026#34;external-bar.js\u0026#34; 9] ","date":"28. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/custom-assets/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"CSS","url":"/de/tags/css/"},{"title":"JS","url":"/de/tags/js/"}],"timestamp":1638086449,"title":"Benutzerdefinierte Assets"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Comments","url":"/de/categories/comments/"},{"title":"Widget","url":"/de/categories/widget/"}],"content":"Disqus, Utterances and Giscus comments widgets are supported out of box. This article shows how to configure them and even customize your own comment widgets.\nDisqus Disqus comments widget is supported by Hugo.\n1disqusShortname = \u0026#34;yourdiscussshortname\u0026#34; Please keep in mind that disqusShortname is a site\u0026rsquo;s configuration, not a parameter. Put it in the params won\u0026rsquo;t work.\nUtterances Utterances is a lightweight comments widget built on GitHub issues.\n1[utterances] 2 repo = \u0026#34;user/repo\u0026#34; 3 #issueTerm = \u0026#34;pathname\u0026#34; # pathname, url, title, og:title. 4 #label = \u0026#34;comment\u0026#34; # Optional. 5 #theme = \u0026#34;\u0026#34; Unlike Disqus, Utterances is a parameter. You should put it in the params.\nParameters Name Type Default Description utterances.repo String - GitHub repository. utterances.issueTerm String pathname The mapping between blog posts and GitHub issues: pathname utterances.label String - The label that will be assigned to issues created by Utterances. utterances.theme String - github-light and github-dark will be used in light and dark mode respectively if not set. Optional values: github-light, github-dark, preferred-color-scheme, github-dark-orange, icy-dark, dark-blue and photon-dark. Troubleshooting Make sure the repo is public, otherwise your readers will not be able to view the issues/comments. Make sure the utterances app is installed on the repo, otherwise users will not be able to post comments. If your repo is a fork, navigate to its settings tab and confirm the issues feature is turned on. Giscus Giscus is a lightweight comments widget built on GitHub discussions.\n1[giscus] 2 repo = \u0026#34;user/repo\u0026#34; 3 repoId = \u0026#34;\u0026#34; 4 category = \u0026#34;\u0026#34; 5 categoryId = \u0026#34;\u0026#34; Parameters Name Type Default Description giscus.repo String - GitHub repository. Required. giscus.repoId String - GitHub repository ID. Required. giscus.category String - Discussions category. Required. giscus.categoryId String - Discussions category ID. Required. giscus.theme String - Left it empty if you want to follow the theme mode. giscus.mapping String pathname The mapping between blog posts and GitHub discussions: pathname, url, title and og:title. giscus.inputPosition String top The input position: top or bottom. giscus.reactions Boolean true Turn on/off the reactions. giscus.metadata Boolean false Emit discussion metadata. giscus.lang String - Specify language, default to site language. giscus.lazyLoading Boolean true Enable lazy loading. Staticman Staticman is also supported out of box, but it may be too complex to set it up.\nAdvantages The comments files are stored inside your repository, that is, the comments are rendered during the site build. It maybe useful for SEO, since it doesn\u0026rsquo;t rely JS to load data dynamically, it\u0026rsquo;s truly static. Handling spam: approve or reject comment via Git provider pull request, Google reCaptcha. Native theme style. Disadvantages The user information are untrusted, such as email. User unable to delete their comments directly, it\u0026rsquo;s able to do that via Pull Request. Preparations Staticman instance Firstly, we should set up a Staticman instance for handling comments requests.\nSelf-Hosted Staticman instance Please see https://staticman.net/docs/getting-started.html#step-2-deploy-staticman for details.\nPublic Staticman instance I set up a public staticman instance for testing, it should works with GitHub repositories only.\nYou\u0026rsquo;ll need to install the GitHub App for your repo, so that the instance has access to write comments files to your repo.\nEndpoint: https://hbs-staticman.herokuapp.com Staticman Configuration Secondary, we need to create the staticman.yml under your site/repository root, so that Staticman instance can read the configuration and process comments requests.\nThe filename, path are fixed, please DO NOT modify those parameters.\nThe allowedFields MUST include name, email, message, reply_to, root_id fields.\n1# Name of the property. You can have multiple properties with completely 2# different config blocks for different sections of your site. 3# For example, you can have one property to handle comment submission and 4# another one to handle posts. 5comments: 6 # (*) REQUIRED 7 # 8 # Names of the fields the form is allowed to submit. If a field that is 9 # not here is part of the request, an error will be thrown. 10 allowedFields: [\u0026#34;name\u0026#34;, \u0026#34;email\u0026#34;, \u0026#34;url\u0026#34;, \u0026#34;message\u0026#34;, \u0026#34;reply_to\u0026#34;, \u0026#34;root_id\u0026#34;] 11 12 # (*) REQUIRED 13 # 14 # Name of the branch being used. Must match the one sent in the URL of the 15 # request. 16 branch: \u0026#34;main\u0026#34; 17 18 # Text to use as the commit message or pull request title. Accepts placeholders. 19 commitMessage: \u0026#34;Add Staticman comment\u0026#34; 20 21 # (*) REQUIRED 22 # 23 # Destination path (filename) for the data files. Accepts placeholders. 24 filename: \u0026#34;{@id}\u0026#34; # DO NOT MODIFY 25 26 # The format of the generated data files. Accepted values are \u0026#34;json\u0026#34;, \u0026#34;yaml\u0026#34; 27 # or \u0026#34;frontmatter\u0026#34; 28 format: \u0026#34;yaml\u0026#34; 29 30 # List of fields to be populated automatically by Staticman and included in 31 # the data file. Keys are the name of the field. The value can be an object 32 # with a `type` property, which configures the generated field, or any value 33 # to be used directly (e.g. a string, number or array) 34 generatedFields: 35 date: 36 type: date 37 options: 38 format: \u0026#34;timestamp-seconds\u0026#34; 39 40 # Whether entries need to be appproved before they are published to the main 41 # branch. If set to `true`, a pull request will be created for your approval. 42 # Otherwise, entries will be published to the main branch automatically. 43 moderation: false 44 45 # Name of the site. Used in notification emails. 46 name: \u0026#34;vandenboom.online\u0026#34; 47 48 # Notification settings. When enabled, users can choose to receive notifications 49 # via email when someone adds a reply or a new comment. This requires an account 50 # with Mailgun, which you can get for free at http://mailgun.com. 51 #notifications: 52 # Enable notifications 53 #enabled: true 54 55 # (!) ENCRYPTED 56 # 57 # Mailgun API key 58 #apiKey: \u0026#34;1q2w3e4r\u0026#34; 59 60 # (!) ENCRYPTED 61 # 62 # Mailgun domain (encrypted) 63 #domain: \u0026#34;4r3e2w1q\u0026#34; 64 65 # (*) REQUIRED 66 # 67 # Destination path (directory) for the data files. Accepts placeholders. 68 path: \u0026#34;data/{options.slug}\u0026#34; # DO NOT MODIFY 69 70 # Names of required fields. If any of these isn\u0026#39;t in the request or is empty, 71 # an error will be thrown. 72 requiredFields: [\u0026#34;name\u0026#34;, \u0026#34;message\u0026#34;] 73 74 # List of transformations to apply to any of the fields supplied. Keys are 75 # the name of the field and values are possible transformation types. 76 transforms: 77 email: md5 # DO NOT MODIFY, REQUIRED BY AVATAR. 78 79 reCaptcha: 80 enabled: false 81 siteKey: \u0026#34;\u0026#34; 82 secret: Site Parameters Finally, tweak the following staticman parameters in params.toml.\nName Type Default Description staticman Object staticman.endpoint String - THe Staticman instance endpoint. Required. staticman.repo String - Repository that with form user/repo. Required. staticman.service String github staticman.branch String master Repository branch. staticman.property String comments staticman.sorting String asc Sorting comments, available options: desc. staticman.reCaptchaKey String - The reCaptcha site key. staticman.reCaptchaSecret String - The reCaptcha encrypted secret. You\u0026rsquo;ll need to encrypt plain secret via https://yourstaticmaninstance/v3/encrypt/plainsecret. staticman.extraFields Array - Extra fields. Available fields: url. staticman.requiredFields Array - Extra required fields. Available fields: email and the extra fields. name and message are always required. staticman.paginate Integer 10 The number of comments per page. staticman.moderation Boolean true Same as Staticman\u0026rsquo;s moderation. reCaptcha The reCaptcha secret is not the plain text version, you\u0026rsquo;ll need to encrypt it via your Staticman instance https://yourstaticmaninstance/v3/encrypt/PLAINSECRET.\nCustom Comments Widget We don\u0026rsquo;t intend to support all comments widgets, but don\u0026rsquo;t worry, you can customize your own comments widget.\nYou will need to disable the others before creating your own comments widget.\n1mkdir -p layouts/partials/post/comments 2echo \u0026#34;MY COMMENTS WIDGET\u0026#34; \u0026gt; layouts/partials/post/comments/custom.html In the meantime, you may need to introduce third-party assets, which can be solved by customizing assets or Hooks easily.\n","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/widgets/comments/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Disqus","url":"/de/tags/disqus/"},{"title":"Utterances","url":"/de/tags/utterances/"},{"title":"Giscus","url":"/de/tags/giscus/"},{"title":"Staticman","url":"/de/tags/staticman/"}],"timestamp":1638014069,"title":"Comments Widget"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Hook","url":"/de/categories/hook/"}],"content":"Als flexibles Theme sollte es die Möglichkeit haben, Code anzupassen und Dienste von Drittanbietern zu integrieren. Aus diesem Grund haben wir eine Funktion namens Hook eingeführt.\nIn diesem Artikel stellen wir alle Hooks vor und stellen einige Anwendungsfälle bereit.\nÜbersicht Haken Beschreibung head-end Vor dem \u0026lt;head\u0026gt; Ende body-begin Folgen Sie dem \u0026lt;body\u0026gt; body-end Vor dem Ende von \u0026lt;body\u0026gt; main-begin Oberhalb des \u0026lt;main\u0026gt; main-end Folgen Sie dem \u0026lt;main\u0026gt; list-begin Oberhalb der Beitragsliste list-end Folgen Sie der Beitragsliste sidebar-begin Ganz oben in der Seitenleiste sidebar-end Vor dem Ende der Seitenleiste content-begin Oberhalb des Beitragsinhalts content-end Folgen Sie dem Beitragsinhalt comments-begin Über den Kommentaren comments-end Folgen Sie den Kommentaren footer-begin Ganz oben in der Fußzeile footer-end Vor dem Ende der Fußzeile post-panel-begin Ganz oben im Beitragsbereich post-panel-end Vor dem Ende des Beitragspanels docs/sidebar-begin Ganz oben in der docs Seitenleiste docs/sidebar-end Vor dem Ende der docs Seitenleiste docs/nav-begin Ganz oben in der Navigation docs/nav-end Vor dem Navigationsende contact/form-field-begin Ganz oben im Kontaktformularfeld contact/form-field-end Vor dem Ende des Kontaktformularfeldes search/sidebar-begin Ganz oben in der search Seitenleiste search/sidebar-end Vor dem Ende der search Seitenleiste Verwendungen Es ist einfach, einen Hook zu verwenden. Sie müssen lediglich eine HTML-Datei mit demselben Namen wie der Hook im Verzeichnis layouts/partials/hooks erstellen.\nNehmen wir sidebar-begin als Beispiel:\n1echo \u0026#39;\u0026lt;section class=\u0026#34;row card component text-center\u0026#34;\u0026gt;\u0026lt;div class=\u0026#34;card-body\u0026#34;\u0026gt;SIDEBAR BEGIN\u0026lt;/div\u0026gt;\u0026lt;/section\u0026gt;\u0026#39; \\ 2 \u0026gt; layouts/partials/hooks/sidebar-begin.html ","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/advanced/hooks/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014069,"title":"Haken"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[],"content":"Wir freuen uns über Ihre Meinung und Ihr Feedback und heißen Sie herzlich willkommen, sich zu engagieren.\nGemeinschaft Funktionsanfrage Fehlerbericht Diskussionen: Fragen stellen, Ideen austauschen usw. Mitmachen Alle Beiträge sind willkommen, z. B. Dokumente, Fehlerbehebungen und neue Funktionen.\nRegeln Im Hinblick auf die Wartungsfreundlichkeit stellen wir einige Regeln auf.\nKonventionelle Commits-Spezifikation Bitte folgen Sie dem Konventionelle Commits-Spezifikation.\nZum Beispiel:\nFehlerbehebung: fix: correct typos Neue Funktion: feat: add the foobar parameter Dokumente: docs: document the foobar parameter Stil: style: change the background color to blue Assets neu aufbauen: chore: rebuild assets Entwickeln Das Theme basiert auf npm und Hugo Pipes zum Erstellen von Assets: JS, CSS, Schriftarten usw.\nDer Quellcode wurde im Verzeichnis assets abgelegt.\nAbhängigkeiten installieren 1$ cd exampleSite 2$ npm install Vorschau 1$ npm run serve ","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/get-involved/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014069,"title":"Machen Sie Mit"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/de/categories/configuration/"}],"content":"Seitenparameter befinden sich im Vordere Angelegenheit der Seite.\nName Geben Sie ein Standard Beschreibung Seite title Zeichenfolge - Seitentitel. description Zeichenfolge - Seitenbeschreibung. keywords Array - Seitenschlüsselwörter. comment Boolescher Wert true Ob Kommentare aktiviert werden sollen. Es funktioniert nicht, wenn comment global deaktiviert wurde. toc Boolescher Wert true Ob TOC aktiviert werden soll. Es funktioniert nicht, wenn toc global deaktiviert wurde. math Boolescher Wert false Ob Mathematik aktiviert werden soll. diagram Boolescher Wert false Ob das Diagramm aktiviert werden soll. reward Boolescher Wert true Ob die Belohnung aktiviert werden soll. breadcrumb Boolescher Wert true Ob Breadcrumb aktiviert werden soll. breadcrumbDivider Zeichenfolge / Brotkrümelteiler. readingTime Boolescher Wert true Ob die Lesezeit angezeigt werden soll. postDate Boolescher Wert true Ob das Postdatum im Post-Meta-Bereich angezeigt werden soll. copyright Boolescher Wert true Ob der Copyright-Bereich angezeigt werden soll. carousel Boolescher Wert false Auf Karussell anzeigen. nav Boolescher Wert true Schalten Sie die Navigation ein/aus. sidebar Boolescher Wert true Seitenleiste ein-/ausblenden. index Boolescher Wert true Indizieren Sie diese Seite in der Kundensuchmaschine oder nicht. Creative Commons-Lizenz creativeCommons Objekt - creativeCommons.by Boolescher Wert true Die Anerkennung muss Ihnen, dem Schöpfer, zuteil werden. creativeCommons.nc Boolescher Wert true Lediglich die nichtkommerzielle Nutzung Ihrer Arbeit ist gestattet. creativeCommons.nd Boolescher Wert true Es sind keine Derivate oder Adaptionen Ihrer Arbeit gestattet. creativeCommons.sa Boolescher Wert true Anpassungen müssen unter denselben Bedingungen weitergegeben werden. Meta-Tag metaRobots Zeichenfolge - Leer bedeutet, dass es ausgeschaltet ist. pinned Boolescher Wert false Beiträge pinnen. pinnedWeight Nummer - Geringeres Gewicht erhält höhere Priorität. featuredPostCount Ganzzahl/Boolescher Wert 5 Die Anzahl der in der Seitenleiste angezeigten hervorgehobenen Beiträge. Schalten Sie es aus, indem Sie es auf false setzen. recentPostCount Ganzzahl/Boolescher Wert 5 Die Anzahl der letzten Beiträge, die in der Seitenleiste angezeigt werden. Schalten Sie es aus, indem Sie es auf false setzen. relatedPostCount Ganzzahl/Boolescher Wert 5 Die Anzahl verwandter Beiträge. Schalten Sie es aus, indem Sie es auf false einstellen. featuredImageAlt Zeichenfolge - Der alternative Text für vorgestellte Bilder. Falls nicht vorhanden, wird auf den Seitentitel zurückgegriffen. numberifyHeadings Boolescher Wert true Bei false werden Überschriften nicht nummeriert. ","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/configuration/page-params/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Seitenparameter"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/de/categories/configuration/"}],"content":"Die Site-Konfiguration befindet sich standardmäßig in config/_default/config.toml.\nName Geben Sie ein Standard Beschreibung title Zeichenfolge - Titel der Website. baseURL Zeichenfolge - Basis-URL der Website. copyright Zeichenfolge - Urheberrecht der Website. Der Platzhalter {year} wird durch das aktuelle Jahr ersetzt. defaultContentLanguage Zeichenfolge en Die Sprache der Standard-Site. defaultContentLanguageInSubdir Boolescher Wert false paginate Ganzzahl 10 paginatePath Zeichenfolge page enableRobotsTXT Boolescher Wert true disqusShortname Zeichenfolge - Disqus Kurzname. services Objekt - services.googleAnalytics Objekt - Google Analytics unterstützt nur GA4. services.googleAnalytics.ID Zeichenfolge - Mess-ID. author Objekt - Autoren-Widget. Siehe auch Alle Konfigurationseinstellungen.\n","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/configuration/site/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Site-Konfiguration"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/de/categories/configuration/"}],"content":"Die Site-Parameter befinden sich standardmäßig in config/_default/params.toml.\nName Geben Sie ein Standard Beschreibung sass_transpiler Zeichenfolge libsass dartsass wird empfohlen, da libsass veraltet ist. Seite mainSections Array [\u0026quot;posts\u0026quot;] Hauptabschnitte titleCase Boolescher Wert false Großgeschriebener Titel oder nicht titleSeparator Zeichenfolge - Titeltrennzeichen backgroundImage Array [] Hintergrundbild, z. B. ['/images/bg.png'], ['/images/bg-light.png', '/images/bg-dark.png']. comment Boolescher Wert true Ob Kommentare aktiviert werden sollen toc Boolescher Wert true Ob TOC aktiviert werden soll tocWordCount Ganzzahl 280 Das Inhaltsverzeichnis wird nur angezeigt, wenn die Wortanzahl des Beitrags diesen Wert überschreitet. tocPosition Zeichenfolge sidebar Verfügbare Werte: sidebar und content, nur das Layout posts ist betroffen. breadcrumb Boolescher Wert true Ob Breadcrumb aktiviert werden soll dateFormat Zeichenfolge Jan 2, 2006 Datumsformat. Weitere Informationen finden Sie im Hugo-Referenz für Datums- und Uhrzeitvorlagen. poweredBy Boolescher Wert true Ob angezeigt werden soll powered by. readingTime Boolescher Wert true Ob die Lesezeit angezeigt werden soll. postDate Boolescher Wert true Ob das Postdatum im Post-Meta-Bereich angezeigt werden soll. math Boolescher Wert false Ob Mathematik global aktiviert werden soll. diagram Boolescher Wert false Ob das Diagramm global aktiviert werden soll. logo String/Boolean images/logo.webp Logobild. Deaktivieren Sie das Logo, indem Sie es auf false setzen. brand Zeichenfolge - Markentext. description Zeichenfolge - Beschreibung der Website. keywords Zeichenfolge - Website-Schlüsselwörter. color Zeichenfolge - Farbmodus, light, dark oder auto. Standardmäßig ist auto. palette Zeichenfolge - Standardpalette. Dies wird nach dem Löschen des Cookies wirksam. palettes Array ALLE Verfügbare Paletten. Sie können es deaktivieren, indem Sie es auf leer setzen []. carouselPostCount Ganzzahl 5 Die Anzahl der im Homepage-Karussell angezeigten Beiträge. featuredPostCount Ganzzahl/Boolescher Wert 5 Die Anzahl der in der Seitenleiste angezeigten hervorgehobenen Beiträge. Schalten Sie es aus, indem Sie es auf false setzen. recentPostCount Ganzzahl/Boolescher Wert 5 Die Anzahl der letzten Beiträge, die in der Seitenleiste angezeigt werden. Schalten Sie es aus, indem Sie es auf false setzen. relatedPostCount Ganzzahl/Boolescher Wert 5 Die Anzahl verwandter Beiträge. Schalten Sie es aus, indem Sie es auf false setzen. categoryCount Ganzzahl/Boolescher Wert 10 Die Anzahl der in der Seitenleiste angezeigten Kategorien. Schalten Sie es aus, indem Sie es auf false setzen. tagCount Ganzzahl/Boolescher Wert 10 Die Anzahl der in der Seitenleiste angezeigten Tags. Schalten Sie es aus, indem Sie es auf false einstellen. seriesCount Ganzzahl 10 Die Anzahl der in der Seitenleiste angezeigten Serien. taxonomyPaginate Ganzzahl 10 taxonomyPostCount Ganzzahl 3 Die Anzahl der Beiträge zur Taxonomie. Deaktivieren Sie es, indem Sie es auf „false“ setzen. taxonomySortingMethod Zeichenfolge - Taxonomien nach popularity sortieren, standardmäßig alphabetisch sortieren. countTaxonomyPosts Boolescher Wert false Zählen Sie Taxonomiebeiträge. sidebarTaxonomies Array [\u0026quot;series\u0026quot;, \u0026quot;categories\u0026quot;, \u0026quot;tags\u0026quot;] Die Taxonomien in der Seitenleiste. fullWidth Boolescher Wert false Volle Breite. fullWidthInSections Objekt - Geben Sie die volle Breite für bestimmte Abschnitte an, z. B. posts, docs. fixedHeader Boolescher Wert true Festen Header ein-/ausschalten. reward Objekt - Belohnungs-Widget, AKA Buy Me a Coffee Widget. externalLinkIcon Boolescher Wert true Ob die Symbole nach den externen Links angezeigt werden sollen. share Objekt - Schaltflächen zum Teilen share.addThis Zeichenfolge - AddThis ist pubid. fontSize Objekt Schriftgrößen Kommentieren Sie diesen Parameter oder entfernen Sie ihn, um den Schriftgrößenumschalter zu deaktivieren. fontSize.small Zeichenfolge .9rem Kleine Schriftgröße. fontSize.extraSmall Zeichenfolge .8rem Extra kleine Schriftgröße. fontSize.large Zeichenfolge 1.1rem Große Schriftgröße. fontSize.extraLarge Zeichenfolge 1.2rem Extra große Schriftgröße. social Objekt - Soziale Links. socialAnimation Boolescher Wert true Entfernen Sie Animationen aus sozialen Links, wenn false. socialColor Boolescher Wert true Entfernen Sie die Farbe aus sozialen Links, wenn false. socialShare Boolescher Wert true Aktivieren/deaktivieren Sie die integrierte Social-Share-Schaltfläche. searchBar Boolescher Wert true Integrierte Suchleiste ein-/ausschalten. archive Objekt - Archiv. search Objekt - Suchen. docsearch Objekt - DocSearch docsearch.container Zeichenfolge .search-button docsearch.appId Zeichenfolge - docsearch.indexName Zeichenfolge - docsearch.apiKey Zeichenfolge - docsearch.debug Boolescher Wert false docsearch.* Boolescher Wert/Zeichenfolge/Zahl - https://docsearch.algolia.com/docs/api/ algolia Objekt - Siehe Algolie Top-App-Leiste topAppBar Objekt - topAppBar.social Objekt - Soziale Links. topAppBar.colorToggle Boolescher Wert true Schalten Sie den Farb-/Modus-Schalter ein/aus. topAppBar.coloredInDark Boolescher Wert false Im Dunkelmodus gefärbt. topAppBar.dropdownMenuToggle Boolescher Wert true Blenden Sie den Dropdown-Menüschalter aus. topAppBar.expandBreakpoint Zeichenfolge xxl Erweitern Sie den Inhalt oberhalb dieses Haltepunkts, z. B. lg, xl, xxl. Webmaster-Site-Verifizierung siteVerification Objekt - siteVerification.google Zeichenfolge - Google siteVerification.bing Zeichenfolge - Bing siteVerification.baidu Zeichenfolge - Baidu siteVerification.baiduUnion Zeichenfolge - Baidu-Union siteVerification.so Zeichenfolge - Qihoo 360 siteVerification.sogou Zeichenfolge - Sogou siteVerification.shenma Zeichenfolge - Shenma Analyse analytics Objekt - Analytics-Konfiguration. analytics.baidu Zeichenfolge - Baidu Analytics. analytics.plausible Zeichenfolge - Plausible Analytics-Domänen. Mehrere Domänen durch Komma trennen. analytics.plausibleScript Zeichenfolge https://plausible.io/js/script.js Geben Sie das selbstgehostete Plausible Analytics-Skript oder erweitertes Skript an. googleAdsense Zeichenfolge - Google Adsense. customCSS Array - Siehe auch benutzerdefinierte Assets. customJS Array - Siehe auch benutzerdefinierte Assets. utterances Objekt - Äußerungen Konfiguration. giscus Objekt - Giscus Konfiguration. Creative Commons-Lizenz creativeCommons Objekt - creativeCommons.by Boolescher Wert true Die Anerkennung muss Ihnen, dem Schöpfer, zuteil werden. creativeCommons.nc Boolescher Wert true Lediglich die nichtkommerzielle Nutzung Ihrer Arbeit ist gestattet. creativeCommons.nd Boolescher Wert true Es sind keine Derivate oder Adaptionen Ihrer Arbeit gestattet. creativeCommons.sa Boolescher Wert true Anpassungen müssen unter denselben Bedingungen weitergegeben werden. Codeblock codeBlock Objekt - codeBlock.maxLines Ganzzahl 7 codeBlock.lineNos Boolescher Wert true true/false steht für das standardmäßige Ein-/Ausblenden der Zeilennummern. Beitrag post Objekt - post.excerpt Zeichenfolge Description Die Beschreibung wird als Auszug verwendet, wenn sie nicht leer ist. Um Zusammenfassungen als Auszug zu verwenden, müssen Sie sie explizit als leere Zeichenfolge festlegen. post.excerptMaxLength Ganzzahl 320 post.copyright Boolescher Wert true Legt fest, ob in jedem Beitrag ein Abschnitt zum Urheberrecht angezeigt werden soll. post.plainifyExcerpt Boolescher Wert true Formatieren Sie den Auszug in HTML, wenn false. post.featuredImage Boolescher Wert false Zeigen Sie das vorgestellte Bild über dem Inhalt an. post.numberifyHeadings Boolescher Wert false Überschriften automatisch zählen. post.numberifyHeadingsEndLevel Nummer 6 Die Tiefe der zu zählenden Überschriften. post.numberifyHeadingsSeparator Zeichenfolge - Das Trennzeichen zwischen Nummer und Überschriften. post.tocStyleType Zeichenfolge none Die CSS-Eigenschaft list-style-type des Inhaltsverzeichnisses. post.imageTitleAsCaption Boolescher Wert false Verwenden Sie den Bildtitel als Bildunterschrift. post.panel Boolescher Wert true Schalten Sie das Post-Panel ein/aus. post.nav Boolescher Wert true Schalten Sie die Navigation ein/aus. post.readMoreFromContent Boolescher Wert false Die Seitenposition nach dem Klicken auf die Schaltfläche „Weiterlesen“. Wenn „true“ zutrifft, lesen Sie mehr vom Inhalt. Standardmäßig der Seitenanfang. Es unterstützt nur die manuelle Aufteilung der Zusammenfassungen über \u0026lt;!--more--\u0026gt;. viewer Boolescher Wert wahr Bildbetrachter pwa Objekt - Progressive Web-Apps Seitenleiste sidebar Objekt - sidebar.fixed Boolescher Wert false Korrigieren Sie die Standardseitenleiste. sidebar.taxonomiesToggle Boolescher Wert true Zeigen Sie das Taxonomie-Umschalt-Widget in der Seitenleiste an. sidebar.taxonomiesToggleArchives Boolescher Wert true Ein-/Ausblenden der Archive aus den Taxonomien. sidebar.series Boolescher Wert false Zeigen Sie das Serien-Widget in der Seitenleiste an. sidebar.categories Boolescher Wert false Zeigen Sie das Kategorien-Widget in der Seitenleiste an. sidebar.tags Boolescher Wert false Zeigen Sie das Tag-Widget in der Seitenleiste an. sidebar.archives Boolescher Wert false Zeigen Sie das Archiv-Widget in der Seitenleiste an. sidebar.authors Boolescher Wert false Zeigen Sie das Autoren-Widget in der Seitenleiste an. sidebar.postsToggle Boolescher Wert true Zeigen Sie den Beitragsschalter in der Seitenleiste an. sidebar.featuredPosts Boolescher Wert false Zeigen Sie das Widget „Empfohlene Beiträge“ in der Seitenleiste an. sidebar.recentPosts Boolescher Wert false Zeigen Sie das Widget „Letzte Beiträge“ in der Seitenleiste an. sidebar.collapsed Boolescher Wert flase Seitenleisten-Widgets auf kleinen Bildschirmen standardmäßig einklappen. Meta-Tag metaRobots Zeichenfolge - Leer bedeutet, dass es ausgeschaltet ist. contact Objekt - Kontaktformular pinnedPost Boolescher Wert true Angepinnte Beiträge aktivieren/deaktivieren. pinnedPostCount Ganzzahl 1 Die Anzahl der angepinnten Beiträge. rss String/Boolean true Zeigen Sie den RSS-Button in den sozialen Links an. Schalten Sie es mit false aus und verknüpfen Sie es immer mit der Startseite, indem Sie es auf home setzen. feeds Objekt - RSS-Feeds feeds.content Boolescher Wert false Zeigt den vollständigen Inhalt an, wenn er verfügbar ist. actionsPanel Objekt - actionsPanel.disabled Boolescher Wert false Aktionsfeld deaktivieren. repo Objekt - Siehe Repository-Widget. docs.nav Objekt - Navigation im Dokumentenlayout. docs.nav.reduceFontSize Boolescher Wert true Wenn false, reduzieren Sie nicht die Schriftgröße der Kindernavigation. Mit Ausnahme des Google Webmaster-Tools können die anderen Webmaster-Tools nicht mit hugo --minify arbeiten, da sie das minimierte Meta-Tag nicht erkennen können.\n","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/configuration/site-params/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Site-Parameter"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/de/categories/configuration/"}],"content":"Wie auf der Beispiel-Site gezeigt, verwenden wir Konfigurationsverzeichnis, um die Organisation und umgebungsspezifische Einstellungen einfacher zu verwalten. Dies ist besonders nützlich bei mehrsprachigen Sites.\n1├── _default 2│ ├── config.toml 3│ ├── config.zh-hans.toml 4│ ├── config.zh-hant.toml 5│ ├── languages.toml 6│ ├── markup.toml 7│ ├── menu.toml 8│ ├── menu.zh-hans.toml 9│ ├── menu.zh-hant.toml 10│ ├── params.toml 11│ ├── params.zh-hans.toml 12│ ├── params.zh-hant.toml 13│ ├── server.toml 14└── production 15 ├── config.toml 16 └── params.toml Hugo unterstützt mehrere Konfigurationsformate: TOML, YAML und JSON, ändern Sie es nach Belieben.\n_default enthält die Standardkonfigurationen. production-Konfigurationen überschreiben die Standardkonfigurationen in der Produktionsumgebung. Sie können auch weitere Umgebungskonfigurationen definieren, z. B. development (die Standardumgebung von hugo server), testing, staging. Und geben Sie dann die Umgebung über das Flag -e an. Der Name der Konfigurationsdatei mit dem betroffenen Sprachcode wird nur auf dieser Sprachseite wirksam, z. B. config.zh-hans.toml. Es ist nützlich, Konfigurationen und Parameter aus verschiedenen Sprachen zu trennen. Die mehrsprachigen Konfigurationen funktionieren nicht bei author Konfigurationen, d. h. author.zh-hans.toml wird nicht wirksam. Es sind die config, params, menu und menus bekannt, die eine mehrsprachige Projektierung unterstützen.\n","date":"27. November 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/configuration/structure/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Konfigurationsstruktur"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Markdown","url":"/de/categories/markdown/"}],"content":"This article offers a sample of basic diagram usage that can be used in Hugo content files.\nPlease see also Mermaid.\nUsage Via Shortcode 1{{\u0026lt; mermaid \u0026gt;}} 2YOUR DIAGRAM INSTRUCTIONS 3{{\u0026lt; /mermaid \u0026gt;}} You can also wrap the shortcode with other shortcodes, such as text/align-center.\n1{{% text/align-center %}} 2{{\u0026lt; mermaid \u0026gt;}} 3YOUR DIAGRAM INSTRUCTIONS 4{{\u0026lt; /mermaid \u0026gt;}} 5{{% /text/align-center %}} Mermaid code block 1```mermaid 2YOUR DIAGRAM INSTRUCTIONS 3``` Examples Flow Chart 1{{\u0026lt; mermaid \u0026gt;}} 2graph TD 3 A[Christmas] --\u0026gt;|Get money| B(Go shopping) 4 B --\u0026gt; C{Let me think} 5 C --\u0026gt;|One| D[Laptop] 6 C --\u0026gt;|Two| E[iPhone] 7 C --\u0026gt;|Three| F[fas:fa-car Car] 8{{\u0026lt; /mermaid \u0026gt;}} graph TD A[Christmas] --\u003e|Get money| B(Go shopping) B --\u003e C{Let me think} C --\u003e|One| D[Laptop] C --\u003e|Two| E[iPhone] C --\u003e|Three| F[fas:fa-car Car] We need to import the faCar solid icon first, in order to use the fas:fa-car FontAwesome icon.\nSequence Diagram 1{{\u0026lt; mermaid \u0026gt;}} 2sequenceDiagram 3 Alice-\u0026gt;\u0026gt;+John: Hello John, how are you? 4 Alice-\u0026gt;\u0026gt;+John: John, can you hear me? 5 John--\u0026gt;\u0026gt;-Alice: Hi Alice, I can hear you! 6 John--\u0026gt;\u0026gt;-Alice: I feel great! 7{{\u0026lt; /mermaid \u0026gt;}} sequenceDiagram Alice-\u003e\u003e+John: Hello John, how are you? Alice-\u003e\u003e+John: John, can you hear me? John--\u003e\u003e-Alice: Hi Alice, I can hear you! John--\u003e\u003e-Alice: I feel great! Class Diagram 1```mermaid 2classDiagram 3 Animal \u0026lt;|-- Duck 4 Animal \u0026lt;|-- Fish 5 Animal \u0026lt;|-- Zebra 6 Animal : +int age 7 Animal : +String gender 8 Animal: +isMammal() 9 Animal: +mate() 10 class Duck{ 11 +String beakColor 12 +swim() 13 +quack() 14 } 15 class Fish{ 16 -int sizeInFeet 17 -canEat() 18 } 19 class Zebra{ 20 +bool is_wild 21 +run() 22 } 23``` classDiagram Animal \u0026lt;|-- Duck Animal \u0026lt;|-- Fish Animal \u0026lt;|-- Zebra Animal : \u0026#43;int age Animal : \u0026#43;String gender Animal: \u0026#43;isMammal() Animal: \u0026#43;mate() class Duck{ \u0026#43;String beakColor \u0026#43;swim() \u0026#43;quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ \u0026#43;bool is_wild \u0026#43;run() }","date":"1. September 2021","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/diagram/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Diagram","url":"/de/tags/diagram/"}],"timestamp":1630467410,"title":"Diagram Guide"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Markdown","url":"/de/categories/markdown/"}],"content":"Dieser Artikel bietet einige Anwendungsfälle, um zu zeigen, wie man Bilder in der Größe ändert, zuschneidet, einpasst, füllt und ausrichtet.\nGrößenänderung von Bildern Wir verwenden die URL-Abfrage von Bildern, um die Größe von Bildern zu ändern. Zum Beispiel:\nGeben Sie die Breite und das Beibehaltungsverhältnis an 1![Resize](featured-sample.webp?width=300px) Geben Sie die Höhe und das Beibehaltungsverhältnis an 1![Resize](featured-sample.webp?height=200px) Geben Sie die Breite und Höhe an 1![Resize](featured-sample.webp?width=300px\u0026amp;height=200px) Es kann nicht nur für Seitenressourcen verwendet werden, sondern auch für statische Bilder und externe Bilder. Zusätzlich zu den Seitenressourcen werden jedoch auch andere durch den Inline-Stil in der Größe geändert, d. h. ihre ursprüngliche Größe ändert sich nicht.\nBilder ausrichten Wir können Bilder einfach ausrichten, indem wir URL-Fragmente hinzufügen. Beispielsweise stehen #center, #float-start und #float-end für die Ausrichtungsmitte, den Float-Anfang und das Float-Ende.\nMitte Hinzufügen des #center-Fragments zum Ausrichten von Bildern in der Mitte.\nZum Beispiel: @@P2@@.\nFloat-Start Wenn wir das Fragment #float-start für schwebende Bilder am Anfang hinzufügen, müssen wir es in den Shortcode clearfix einschließen, um eine Beschädigung des Layouts zu vermeiden.\nBitte beachten Sie, dass Sie %% anstelle von \u0026lt;\u0026gt; verwenden, um Inhalte vollständig als Markdown darzustellen.\nZum Beispiel.\n1{{/% clearfix %/}} 2![Float Start](/featured-sample.webp#float-start) TEXTS AROUNDS THE IMAGE. 3{{/% /clearfix %/}} Float-Ende Ebenso können wir Bilder auch ans Ende verschieben, indem wir das Fragment #float-end hinzufügen.\nZum Beispiel.\n1{{/% clearfix %/}} 2![Float End](/featured-sample.webp#float-end) TEXTS AROUNDS THE IMAGE. 3{{/% /clearfix %/}} Bildunterschrift HBS erlaubt die Verwendung von Bildtiteln als Bildunterschrift. Diese Funktion ist standardmäßig deaktiviert. Sie müssen den Parameter post.imageTitleAsCaption aktivieren:\nTOML YAML JSON params.toml\n1[Beitrag] 2 imageTitleAsCaption = \u0026#39;wahr\u0026#39; params.yaml\n1Beitrag: 2 imageTitleAsCaption: wahr params.json\n1{ 2 \u0026#34;Beitrag\u0026#34;: { 3 \u0026#34;imageTitleAsCaption\u0026#34;: \u0026#34;wahr\u0026#34; 4 } 5} 1![Image Caption](/featured-sample.webp \u0026#34;Use Image Title as Caption\u0026#34;) Use Image Title as Caption Bilder zuschneiden Schneiden Sie ein Bild zu, um es an die angegebenen Abmessungen anzupassen, ohne die Größe zu ändern. Sie müssen sowohl Breite als auch Höhe angeben. Verwenden Sie die Option „Anker1“, um den Ankerpunkt des Zuschneidefelds zu ändern.\n1![Crop Image](/featured-sample.webp?crop=[width]x[height],[anchor]) Die Größe [width]x[height] ist erforderlich. [anchor] ist optional, das , wird verwendet, um die Größe und den Anker zu trennen. Beispiele crop=200x200,TopLeft crop=200x200,Top crop=200x200,TopRight crop=200x200,Left crop=200x200,Center crop=200x200,Right crop=200x200,BottomLeft crop=200x200,Bottom crop=200x200,BottomRight Bilder füllen Schneiden Sie ein Bild zu und ändern Sie seine Größe, damit es den angegebenen Abmessungen entspricht. Sie müssen sowohl Breite als auch Höhe angeben. Verwenden Sie die Option „Anker1“, um den Ankerpunkt des Zuschneidefelds zu ändern.\n1![Fill Image](/featured-sample.webp?fill=[width]x[height],[anchor]) Die Größe [width]x[height] ist erforderlich. [anchor] ist optional, das , wird verwendet, um die Größe und den Anker zu trennen. Beispiele fill=150x200,TopLeft fill=150x200,Top fill=150x200,TopRight fill=150x200,Left fill=150x200,Center fill=150x200,Right fill=150x200,BottomLeft fill=150x200,Bottom fill=150x200,BottomRight Bilder anpassen Skalieren Sie ein Bild herunter, um es an die angegebenen Abmessungen anzupassen und dabei das Seitenverhältnis beizubehalten. Sie müssen sowohl Breite als auch Höhe angeben.\n1![Fit Image](/featured-sample.webp?fit=[width]x[height]) Filter Helligkeit Das brightness muss im Bereich (-100, 100) liegen.\n1![Image Brightness](/featured-sample.webp?brightness=-30) Farbbalance ColorBalance erstellt einen Filter, der die Farbbalance eines Bildes ändert. Die prozentualen Parameter für jeden Farbkanal (Rot, Grün, Blau) müssen im Bereich (-100, 500) liegen.\n1![Image ColorBalance](/featured-sample.webp?colorBalance=-50,50,150) Einfärben Colorize erstellt einen Filter, der eine kolorierte Version eines Bildes erzeugt. Der Farbtonparameter ist der Winkel auf dem Farbkreis, typischerweise im Bereich (0, 360). Der Sättigungsparameter muss im Bereich (0, 100) liegen. Der Prozentparameter gibt die Stärke des Effekts an, er muss im Bereich (0, 100) liegen.\n1![Image Colorize](/featured-sample.webp?colorize=-100,50,150) Kontrast Das contrast muss im Bereich (-100, 100) liegen.\n1![Image Contrast](/featured-sample.webp?contrast=50) Gamma Gamma erstellt einen Filter, der eine Gammakorrektur an einem Bild durchführt. Der Gamma-Parameter muss positiv sein. Gamma = 1 ergibt das Originalbild. Bei einem Gammawert unter 1 wird das Bild dunkler, bei einem Gammawert über 1 wird es heller.\n1![Image Gamma](/featured-sample.webp?gamma=2) GaussianBlur Wendet eine Gaußsche Unschärfe auf ein Bild an.\n1![Image GaussianBlur](/featured-sample.webp?gaussianBlur=2) Graustufen Grayscale erstellt einen Filter, der eine Graustufenversion eines Bildes erzeugt.\n1![Image Grayscale](/featured-sample.webp?grayscale) Farbton „Hue“ erstellt einen Filter, der den Farbton eines Bildes dreht. Die Farbtonwinkelverschiebung liegt typischerweise im Bereich -180 bis 180.\n1![Image Hue](/featured-sample.webp?hue=90) Invertieren Invertieren erstellt einen Filter, der die Farben eines Bildes negiert.\n1![Image Invert](/featured-sample.webp?invert) Pixelieren Pixelate erstellt einen Filter, der einen Pixelierungseffekt auf ein Bild anwendet.\n1![Image Pixelate](/featured-sample.webp?pixelate=8) Sättigung „Sättigung“ erstellt einen Filter, der die Sättigung eines Bildes ändert.\n1![Image Saturation](/featured-sample.webp?saturation=100) Sepia Sepia erstellt einen Filter, der eine sepiafarbene Version eines Bildes erzeugt.\n1![Image Sepia](/featured-sample.webp?sepia=200) Sigmoid Sigmoid erstellt einen Filter, der den Kontrast eines Bildes mithilfe einer Sigmoidfunktion ändert und das angepasste Bild zurückgibt. Es handelt sich um eine nichtlineare Kontraständerung, die für Fotoanpassungen nützlich ist, da sie die Details von Lichtern und Schatten beibehält.\n1![Image Sigmoid](/featured-sample.webp?sigmoid=2,5) UnsharpMask UnsharpMask erstellt einen Filter, der ein Bild schärfer macht. Der Sigma-Parameter wird in einer Gaußschen Funktion verwendet und beeinflusst den Wirkungsradius. Sigma muss positiv sein. Der Schärfradius entspricht ungefähr 3 * Sigma. Der Parameter „Menge“ steuert, wie viel dunkler und wie viel heller die Kantenränder werden. Typischerweise zwischen 0.5 und 1.5. Der Schwellenwertparameter steuert die minimale Helligkeitsänderung, die geschärft wird. Typischerweise zwischen 0 und 0.05.\n1![Image UnsharpMask](/featured-sample.webp?unsharpMask=10,1,0.05) Bei Verwendung der Methode Crop oder Fill bestimmt der Anker die Platzierung des Zuschneiderahmens. Sie können TopLeft, Top, TopRight, Left, Center, Right, BottomLeft, Bottom, BottomRight oder Smart angeben. Der Standardwert ist Smart.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"15. August 2021","img":"/docs/image-processing/featured-sample.webp","lang":"de","langName":"Deutsch","largeImg":"/docs/image-processing/featured-sample_hu_1fde8481ba13bdfe.webp","permalink":"/de/docs/image-processing/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"/docs/image-processing/featured-sample_hu_83bcf2b9437c7b6a.webp","tags":[{"title":"Image","url":"/de/tags/image/"},{"title":"Caption","url":"/de/tags/caption/"},{"title":"Resize","url":"/de/tags/resize/"},{"title":"Crop","url":"/de/tags/crop/"},{"title":"Fill","url":"/de/tags/fill/"},{"title":"Fit","url":"/de/tags/fit/"},{"title":"Brightness","url":"/de/tags/brightness/"},{"title":"ColorBalance","url":"/de/tags/colorbalance/"},{"title":"Colorize","url":"/de/tags/colorize/"},{"title":"Contrast","url":"/de/tags/contrast/"},{"title":"Gamma","url":"/de/tags/gamma/"},{"title":"GaussianBlur","url":"/de/tags/gaussianblur/"},{"title":"Grayscale","url":"/de/tags/grayscale/"},{"title":"Hue","url":"/de/tags/hue/"},{"title":"Invert","url":"/de/tags/invert/"},{"title":"Pixelate","url":"/de/tags/pixelate/"},{"title":"Saturation","url":"/de/tags/saturation/"},{"title":"Sepia","url":"/de/tags/sepia/"},{"title":"Sigmoid","url":"/de/tags/sigmoid/"},{"title":"UnsharpMask","url":"/de/tags/unsharpmask/"}],"timestamp":1629008346,"title":"Bildverarbeitung"},{"authors":[{"title":"Hugo Authors","url":"/de/authors/hugo/"}],"categories":[],"content":" Headings The following HTML \u0026lt;h1\u0026gt;—\u0026lt;h6\u0026gt; elements represent six levels of section headings. \u0026lt;h1\u0026gt; is the highest section level while \u0026lt;h6\u0026gt; is the lowest.\nH1 H2 H3 H4 H5 H6 Paragraph Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.\nItatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.\nBlockquotes The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations.\nBlockquote without attribution Tiam, ad mint andaepu dandae nostion secatur sequo quae.\nNote that you can use Markdown syntax within a blockquote.\nBlockquote with attribution Don\u0026rsquo;t communicate by sharing memory, share memory by communicating.\n— Rob Pike1\nBlockquote Alerts 1\u0026gt; [!NOTE] 2\u0026gt; Useful information that users should know, even when skimming content. 3 4\u0026gt; [!TIP] 5\u0026gt; Helpful advice for doing things better or more easily. 6 7\u0026gt; [!IMPORTANT] 8\u0026gt; Key information users need to know to achieve their goal. 9 10\u0026gt; [!WARNING] 11\u0026gt; Urgent info that needs immediate user attention to avoid problems. 12 13\u0026gt; [!CAUTION] 14\u0026gt; Advises about risks or negative outcomes of certain actions. 15 16\u0026gt; [!QUESTION]+ Can alerts be foldable? 17\u0026gt; Yes, they can, you just need to append the `+` or `-` sign to the type. 18\u0026gt; 19\u0026gt; Click the heading to preview. Hinweis Useful information that users should know, even when skimming content.\nTipp Helpful advice for doing things better or more easily.\nWichtig Key information users need to know to achieve their goal.\nWarnung Urgent info that needs immediate user attention to avoid problems.\nAchtung Advises about risks or negative outcomes of certain actions.\nCan alerts be foldable? Yes, they can, you just need to append the + or - sign to the type.\nClick the heading to preview.\nTables Tables aren\u0026rsquo;t part of the core Markdown spec, but Hugo supports supports them out-of-the-box.\nName Age Bob 27 Alice 23 Inline Markdown within tables Italics Bold Code italics bold code Code Blocks Code block with backticks 1\u0026lt;!doctype html\u0026gt; 2\u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; 3\u0026lt;head\u0026gt; 4 \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; 5 \u0026lt;title\u0026gt;Example HTML5 Document\u0026lt;/title\u0026gt; 6\u0026lt;/head\u0026gt; 7\u0026lt;body\u0026gt; 8 \u0026lt;p\u0026gt;Test\u0026lt;/p\u0026gt; 9\u0026lt;/body\u0026gt; 10\u0026lt;/html\u0026gt; Code block with Hugo’s internal highlight shortcode 1\u0026lt;!doctype html\u0026gt; 2\u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; 3\u0026lt;head\u0026gt; 4 \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; 5 \u0026lt;title\u0026gt;Another Example HTML5 Document\u0026lt;/title\u0026gt; 6\u0026lt;/head\u0026gt; 7\u0026lt;body\u0026gt; 8 \u0026lt;p\u0026gt;A looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong text\u0026lt;/p\u0026gt; 9\u0026lt;/body\u0026gt; 10\u0026lt;/html\u0026gt; List Types Ordered List First item Second item Third item Unordered List List item Another item And another item Nested List Fruit Apple Orange Banana Dairy Milk Cheese TODO List Done WIP Other Elements — abbr, sub, sup, kbd, mark GIF is a bitmap image format.\nH2O\nXn + Yn = Zn\nPress CTRL+ALT+Delete to end the session.\nMost salamanders are nocturnal, and hunt for insects, worms, and other small creatures.\nThe above quote is excerpted from Rob Pike\u0026rsquo;s talk during Gopherfest, November 18, 2015.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"9. November 2020","img":"https://1552afcb.notes-6if.pages.dev/images/markdown.png","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/markdown-syntax/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Markdown","url":"/de/tags/markdown/"},{"title":"CSS","url":"/de/tags/css/"},{"title":"HTML","url":"/de/tags/html/"}],"timestamp":1604880000,"title":"Markdown Syntax Guide"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Dieser Artikel zeigt, wie Sie den Shortcode alert verwenden.\nWichtig Seit v1.8.0 können Sie Benachrichtigungen ohne Shortcode erstellen, siehe Blockquote-Warnungen.\nSyntax Inline 1{{\u0026lt; alert [type] \u0026gt;}}INLINE ALERT{{\u0026lt; /alert \u0026gt;}} Blockieren 1{{\u0026lt; alert [type] \u0026gt;}} 2BLOCK ALERT 3{{\u0026lt; /alert \u0026gt;}} Der Parameter type ist optional. Standardmäßig info, verfügbare Werte: info, success, warning und danger.\nMit Überschrift 1{{\u0026lt; alert [type] \u0026gt;}} 2{{\u0026lt; alert-heading \u0026gt;}}Well Done!{{\u0026lt; /alert-heading \u0026gt;}} 3ALERT MESSAGE 4{{\u0026lt; /alert \u0026gt;}} Mit Markdown-Syntax 1{{% alert warning %}} 2Alert Shortcode with Markdown Syntax: 3```bash 4$ echo \u0026#39;Ein Beispiel für einen Alarm-Shortcode mit der Markdown-Syntax\u0026#39; 5``` 6{{% /alert %}} Alert Shortcode with Markdown Syntax:\n1$ echo \u0026#39;An example of alert shortcode with the Markdown syntax\u0026#39; Bitte beachten Sie, dass Sie die markup.goldmark.renderer.unsafe-Konfiguration aktivieren müssen.\nTOML YAML JSON config.toml\n1[markup] 2 [markup.goldmark] 3 [markup.goldmark.renderer] 4 unsafe = true config.yaml\n1markup: 2 goldmark: 3 renderer: 4 unsafe: true config.json\n1{ 2 \u0026#34;markup\u0026#34;: { 3 \u0026#34;goldmark\u0026#34;: { 4 \u0026#34;renderer\u0026#34;: { 5 \u0026#34;unsafe\u0026#34;: true 6 } 7 } 8 } 9} Beispiele Primär Info Oh ja, Sie haben diese wichtige Warnmeldung erfolgreich gelesen. Dieser Beispieltext wird etwas länger laufen, damit Sie sehen können, wie die Abstände innerhalb einer Warnung bei dieser Art von Inhalten funktionieren. Warnung Gefahr Gut gemacht! Oh ja, Sie haben diese wichtige Warnmeldung erfolgreich gelesen. Dieser Beispieltext wird etwas länger laufen, damit Sie sehen können, wie die Abstände innerhalb einer Warnung bei dieser Art von Inhalten funktionieren. ","date":"22. Oktober 2020","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/alert/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Alert","url":"/de/tags/alert/"}],"timestamp":1603324800,"title":"Alarm-Shortcode"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Eine detaillierte Beschreibung von Medien-Shortcodes wie Bilibili, Tencent, Youku, iQiyi und Netease Music.\nBilibili 1{{\u0026lt; bilibili \u0026#34;video id\u0026#34; \u0026gt;}} Tencent 1{{\u0026lt; tencentvideo \u0026#34;vid\u0026#34; \u0026gt;}} Youku 1{{\u0026lt; youku \u0026#34;XNTQwMTgxMTE2\u0026#34; \u0026gt;}} iQiyi 1{{\u0026lt; iqiyi \u0026#34;vid\u0026#34; \u0026#34;tvid\u0026#34; \u0026gt;}} Netease-Musik 1{{\u0026lt; neteasemusic \u0026#34;id\u0026#34; [auto [type]] \u0026gt;}} Parameter Beschreibung auto Der auto steuert, ob die automatische Wiedergabe erfolgen soll. Boolesch und optional, standardmäßig false. type Der Parameter type ist optional. Standardmäßig ist 2. asciinema 1{{\u0026lt; asciinema id \u0026gt;}} ","date":"22. Oktober 2020","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/media/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"Bilibili","url":"/de/tags/bilibili/"},{"title":"Tencent","url":"/de/tags/tencent/"},{"title":"Youku","url":"/de/tags/youku/"},{"title":"IQiyi","url":"/de/tags/iqiyi/"},{"title":"Netease Music","url":"/de/tags/netease-music/"},{"title":"Asciinema","url":"/de/tags/asciinema/"}],"timestamp":1603324800,"title":"Medien-Shortcodes"},{"authors":[{"title":"Razon Yang","url":"/de/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/de/categories/shortcode/"}],"content":"Eine detaillierte Beschreibung von Online-IDE-Shortcodes wie JSFiddle, CodePen, JSRun.\nJSFiddle 1{{\u0026lt; jsfiddle \u0026#34;user/id\u0026#34; \u0026gt;}} CodePen 1{{\u0026lt; codepen \u0026#34;id\u0026#34; \u0026gt;}} JSRun 1{{\u0026lt; jsrun \u0026#34;id\u0026#34; \u0026gt;}} Wesentliches 1{{\u0026lt; gist razonyang f82a9399c2f682df36432f0ef828c451 \u0026gt;}} ","date":"22. Oktober 2020","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/docs/shortcodes/online-ide/","series":[{"title":"Docs","url":"/de/series/docs/"}],"smallImg":"","tags":[{"title":"JSFiddle","url":"/de/tags/jsfiddle/"},{"title":"CodePen","url":"/de/tags/codepen/"},{"title":"JSRun","url":"/de/tags/jsrun/"}],"timestamp":1603324800,"title":"Online-IDE-Shortcodes"},{"authors":[{"title":"Hugo Authors","url":"/de/authors/hugo/"}],"categories":[],"content":"Hugo ships with several Built-in Shortcodes for rich content, along with a Privacy Config and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.\nInstagram Simple Shortcode 1{{\u0026lt; instagram_simple BGvuInzyFAe hidecaption \u0026gt;}} YouTube Privacy Enhanced Shortcode 1{{\u0026lt; youtube ZJthWmvUzzc \u0026gt;}} Twitter Simple Shortcode 1{{\u0026lt; twitter_simple 1085870671291310081 \u0026gt;}} Vimeo Simple Shortcode 1{{\u0026lt; vimeo_simple 48912912 \u0026gt;}} ","date":"10. März 2019","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/rich-content/","series":[],"smallImg":"","tags":[{"title":"Instagram","url":"/de/tags/instagram/"},{"title":"YouTube","url":"/de/tags/youtube/"},{"title":"Twitter","url":"/de/tags/twitter/"},{"title":"Vimeo","url":"/de/tags/vimeo/"},{"title":"Privacy","url":"/de/tags/privacy/"}],"timestamp":1552176000,"title":"Rich Content"},{"authors":[{"title":"Hugo Authors","url":"/de/authors/hugo/"}],"categories":[],"content":"Lorem est tota propiore conpellat pectoribus de pectora summo.\nRedit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.\nExierant elisi ambit vivere dedere Duce pollice Eris modo Spargitque ferrea quos palude Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.\nComas hunc haec pietate fetum procerum dixit Post torum vates letum Tiresia Flumen querellas Arcanaque montibus omnes Quidem et Vagus elidunt The Van de Graaf Canon\nMane refeci capiebant unda mulcebat Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. Faces illo pepulere tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.\nIubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.\nEurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel mitis temploque vocatus, inque alis, oculos nomen non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides parte.\n","date":"9. März 2019","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/placeholder-text/","series":[],"smallImg":"","tags":[{"title":"Markdown","url":"/de/tags/markdown/"},{"title":"Text","url":"/de/tags/text/"}],"timestamp":1552089600,"title":"Placeholder Text"},{"authors":[{"title":"Hugo Authors","url":"/de/authors/hugo/"}],"categories":[],"content":"Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.\nThis theme supports KaTeX.\nWhen using a math code block or katex shortcode, KaTeX is activated automatically. To manually enable KaTeX globally set the parameter math to true in a project\u0026rsquo;s configuration file. To enable KaTeX on a per page basis include the parameter math: true in the frontmatter of the content files. Note: Use the online reference of Supported TeX Functions\nExamples Inline Such as \\\\(\\KaTeX\\\\)(\\(\\KaTeX\\)) and $\\LaTeX$($\\LaTeX$).\nBlock 1$$ 2FORMULA 3$$ $$ (\\varphi = \\dfrac{1+\\sqrt5}{2}= 1.6180339887…) $$\n\\[ \\varphi = 1+\\frac{1} {1+\\frac{1} {1+\\frac{1} {1+\\cdots} } } \\]\nMath code block(recommended) See GitLab Flavored Markdown.\n1```math 2FORMULA 3``` The probability of getting \\(k\\) heads when flipping \\(n\\) coins is:\n$$ \\tag*{(1)} P(E) = {n \\choose k} p^k (1-p)^{n-k} $$ Multiple lines via shortcode(recommended) 1{{\u0026lt; katex \u0026gt;}} 2FORMULA 3{{\u0026lt; /katex \u0026gt;}} $$ \\begin{array}{l} E_{o 1}=\\frac{1}{2}\\left( { target }_{o 1}- { out }_{o 1}\\right)^{2}=\\frac{1}{2}(0.01-0.75136507)^{2}=0.274811083 \\\\ E_{o 2}=0.023560026 \\\\ E_{ {total }}=E_{o 1}+E_{o 2}=0.274811083+0.023560026=0.298371109 \\end{array} $$ ","date":"8. März 2019","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/math-typesetting/","series":[],"smallImg":"","tags":[{"title":"Math","url":"/de/tags/math/"}],"timestamp":1552003200,"title":"Math Typesetting"},{"authors":[{"title":"Hugo Authors","url":"/de/authors/hugo/"}],"categories":[],"content":"Emoji can be enabled in a Hugo project in a number of ways.\nThe emojify function can be called directly in templates or Inline Shortcodes.\nTo enable emoji globally, set enableEmoji to true in your site\u0026rsquo;s configuration and then you can type emoji shorthand codes directly in content files; e.g.\n🙈 :see_no_evil: 🙉 :hear_no_evil: 🙊 :speak_no_evil:\nThe Emoji cheat sheet is a useful reference for emoji shorthand codes.\nN.B. The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.\n1.emoji { 2 font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols; 3}","date":"5. März 2019","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/posts/emoji-support/","series":[],"smallImg":"","tags":[{"title":"Emoji","url":"/de/tags/emoji/"}],"timestamp":1551744000,"title":"Emoji Support"},{"authors":[],"categories":[],"content":"","date":"1. Januar 1","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/archive/","series":[],"smallImg":"","tags":[],"timestamp":-62135596800,"title":"Beitragsarchiv"},{"authors":[],"categories":[],"content":"","date":"1. Januar 1","img":"","lang":"de","langName":"Deutsch","largeImg":"","permalink":"/de/faq/","series":[],"smallImg":"","tags":[],"timestamp":-62135596800,"title":"FAQs"}]
