{"id":2278,"date":"2026-05-03T19:30:45","date_gmt":"2026-05-03T17:30:45","guid":{"rendered":"https:\/\/grupp-web.de\/cms\/?p=2278"},"modified":"2026-05-03T19:30:45","modified_gmt":"2026-05-03T17:30:45","slug":"mein-stalwart-upgrade-von-version-0-15-5-auf-version-0-16-2","status":"publish","type":"post","link":"https:\/\/grupp-web.de\/cms\/2026\/05\/03\/mein-stalwart-upgrade-von-version-0-15-5-auf-version-0-16-2\/","title":{"rendered":"Mein Stalwart-Upgrade von Version 0.15.5 auf Version 0.16.2"},"content":{"rendered":"\n<p><strong>ACHTUNG:<\/strong> Die nachfolgende Beschreibung setzt voraus, dass diese beiden Schritte<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Account-Namen m\u00fcssen E-Mail-Adressen sein und<\/li>\n\n\n\n<li>Installations-Layout ist an den FHS angepasst<\/li>\n<\/ul>\n\n\n\n<p>vorab durchgef\u00fchrt wurden. Der Blog-Beitrag &#8222;<a href=\"https:\/\/grupp-web.de\/cms\/2026\/04\/28\/stalwart-verzeichnisse-anpassen-upgrade-v0-16-vorbereitung\/\" data-type=\"post\" data-id=\"2263\">Stalwart-Verzeichnisse anpassen \u2013 Upgrade-v0.16 Vorbereitung<\/a>&#8220; erl\u00e4utert die Erledigung dieser beiden Schritte.<\/p>\n\n\n\n<p>Dar\u00fcber hinaus bitte meine Installations-Variante als Grundlage beachten:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Direkte Installation ins System. Kein Docker!!!<\/li>\n\n\n\n<li>Die typischen Mailports sind direkt erreichbar.<\/li>\n\n\n\n<li>Port 443 wird von HAProxy &#8222;abgefangen&#8220; und je nach Server-Name weitergereicht:\n<ul class=\"wp-block-list\">\n<li>Stalwart, oder<\/li>\n\n\n\n<li>Apache<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Software f\u00fcr Migration herunterladen, ggf. patchen &#8230;<\/h2>\n\n\n\n<p>Dieser vorbereitende Schritt erfolgte mit folgender Kommando-Sequenz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Software-Verzeichnis f\u00fcr Upgrade anlegen\nmkdir -p ~\/software\/stalwart\/backups\nmkdir -p ~\/software\/stalwart\/upgrade-v0.15-to-v0.16\ncd ~\/software\/stalwart\/upgrade-v0.15-to-v0.16\n\n# Alte Stalwart-Binaries sichern\ncp \/usr\/local\/bin\/stalwart .\/stalwart.v015\ncp \/usr\/local\/bin\/stalwart-cli .\/stalwart-cli.v015\n\n# Neue Stalwart-Binaries downloaden (Versionsnummern ggf. anpassen)\n(cd \/tmp &amp;&amp; curl https:\/\/github.com\/stalwartlabs\/stalwart\/releases\/download\/v0.16.2\/stalwart-x86_64-unknown-linux-gnu.tar.gz -O -L &amp;&amp; tar zxf stalwart-x86_64-unknown-linux-gnu.tar.gz )\ncp \/tmp\/stalwart .\/stalwart.v0.16.2\n(cd \/tmp &amp;&amp; curl https:\/\/github.com\/stalwartlabs\/cli\/releases\/download\/v1.0.4\/stalwart-cli-x86_64-unknown-linux-gnu.tar.xz -O -L &amp;&amp; tar Jxf stalwart-cli-x86_64-unknown-linux-gnu.tar.xz )\ncp \/tmp\/stalwart-cli-x86_64-unknown-linux-gnu\/stalwart-cli .\/stalwart-cli.v1.0.4\n\n# Helper-Skript f\u00fcr Migration herunterladen\ncurl -fLO https:\/\/raw.githubusercontent.com\/stalwartlabs\/stalwart\/refs\/heads\/main\/resources\/scripts\/migrate_v016.py<\/code><\/pre>\n\n\n\n<p>Sofern in der bisherigen Installation als &#8222;In-Memory Store&#8220; ein Redis-Server verwendet wurde (ist bei mir der Fall) das Migrations-Skript <code>migrate_v016.py<\/code> mit <a href=\"https:\/\/github.com\/stalwartlabs\/stalwart\/discussions\/3004#discussioncomment-16747130\" data-type=\"link\" data-id=\"https:\/\/github.com\/stalwartlabs\/stalwart\/discussions\/3004#discussioncomment-16747130\" target=\"_blank\" rel=\"noreferrer noopener\">diesem Redis-relevanten Patch<\/a> anpassen. Beachten: Die Zeilennummern weichen vom aktuellen Skript ab &#8211; man findet aber manuell die passende Stelle an der Zeilen erg\u00e4nzt werden m\u00fcssen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einstellungen mit dem (gepatchten) Migrations-Skript extrahieren<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">cd ~\/software\/stalwart\/upgrade-v0.15-to-v0.16\napt install python3-venv\npython3 -m venv .venv\nsource .venv\/bin\/activate\npip install requests urllib3\n\n# Mit Server verbinden und v0.15.x Einstellungen, sowie \n# Principals (Berechtigungsinhaber) in zwei Dateien\n# auf Platte speichern\npython migrate_v016.py dump \\\n    --url https:\/\/mx01.grupp-web.de \\\n    --username admin \\\n    --password &lt;altes, bisheriges Admin-Passwort> \\\n    --settings settings.json \\\n    --principals principals.json\n\t\n# Die gerade extrahierten Daten in neues Format konvertieren\npython migrate_v016.py convert \\\n    --settings settings.json \\\n    --principals principals.json \\\n    --config config.json \\\n    --output export.json<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mail-Services in Firewall sperrren<\/h2>\n\n\n\n<p>Auf Firewall die Mail-Ports sperren. Damit k\u00f6nnen weder von Au\u00dfen neue Mails eingeliefert werden, noch k\u00f6nnen meine User Mails versenden oder auf ihr Konto zugreifen. Damit soll eine saubere Sicherung der Mail-Datenbank, ohne Verlust zwischenzeitlicher Ver\u00e4nderungen am Mail-Bestand erm\u00f6glicht werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">firewall-cmd --list-services\nfirewall-cmd --permanent --remove-service=imaps\nfirewall-cmd --permanent --remove-service=smtps\nfirewall-cmd --permanent --remove-service=smtp\nfirewall-cmd --reload\n# Kontrolle \/ Vergleich zum vorigen Zustand\nfirewall-cmd --list-services<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Stalwart stoppen und Mail-Datenbank sichern<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">systemctl stop stalwart.service\ntar czf ~\/software\/stalwart\/backups\/Stalwart-v0.15-Mail-Backup.tgz \\\n        \/var\/lib\/stalwart<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Offline-Snapshot des Servers erstellen<\/h2>\n\n\n\n<p><strong>ACHTUNG:<\/strong> Nun, falls m\u00f6glich, einen Offline-Snapshot des Servers erstellen und erst dann fortfahren. Bei Cloud-Servern ist das eine typische M\u00f6glichkeit die in der Verwaltungsoberfl\u00e4che des Providers angeboten wird.<\/p>\n\n\n\n<p>Ist einfach sicherer da bei Problemen mit dem Upgrade eine R\u00fcckkehr zum vorigen Zustand total einfach und schnell m\u00f6glich ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Und nun das Kern-Upgrade<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Da wegen Offline-Snapshot der Server evtl. neu gestartet wurde\nsystemctl stop stalwart.service\n\n# Neues Stalwart-Binary installieren\ncd ~\/software\/stalwart\/upgrade-v0.15-to-v0.16\nmv \/usr\/local\/bin\/stalwart \/usr\/local\/bin\/stalwart.v015\nmv \/usr\/local\/bin\/stalwart-cli \/usr\/local\/bin\/stalwart-cli.v015\ncp stalwart.v0.16.2 \/usr\/local\/bin\/stalwart\ncp stalwart-cli.v1.0.4 \/usr\/local\/bin\/stalwart-cli\nchmod 0755 \/usr\/local\/bin\/stalwart*\nchown root:root \/usr\/local\/bin\/stalwart*\n\n# config.json platzieren\ncd ~\/software\/stalwart\/upgrade-v0.15-to-v0.16\ncp config.json \/etc\/stalwart\/config.json\nchown stalwart:stalwart \/etc\/stalwart\/config.json\nchmod 0640 \/etc\/stalwart\/config.json\n\n# Neuen Stalwart im Recovery-Mode starten\nsudo -u stalwart env \\\n    STALWART_RECOVERY_MODE=1 \\\n    STALWART_RECOVERY_ADMIN=admin:Super.Geheim2026 \\\n    \/usr\/local\/bin\/stalwart --config=\/etc\/stalwart\/config.json<\/code><\/pre>\n\n\n\n<p>Stalwart ist nun in dieser Shell im Recovery-Mode. Der Prozess l\u00e4uft im Vordergrund und die Shell ist damit erst mal f\u00fcr weitere T\u00e4tigkeiten blockiert.<\/p>\n\n\n\n<p>Deshalb zweite Shell starten. Dort werden nun die Daten aus <code>export.json<\/code> verarbeitet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">cd ~\/software\/stalwart\/upgrade-v0.15-to-v0.16\nexport STALWART_URL=http:\/\/127.0.0.1:8080\nexport STALWART_USER=admin\nexport STALWART_PASSWORD=Super.Geheim2026\nstalwart-cli apply --file .\/export.json<\/code><\/pre>\n\n\n\n<p>In erster Shell den Stalwart (&#8222;h\u00e4ngt&#8220; als Vordergrund-Prozess in der ersten Shell) nun per &#8222;Strg&#8220; + &#8222;C&#8220; stoppen.<\/p>\n\n\n\n<p>Bei Upgrade auf Version 0.16.2 (f\u00fcr 0.16.3 ignorieren und n\u00e4chsten Absatz beachten) die Datei <code>\/etc\/stalwart\/stalwart.env<\/code> mit folgendem Inhalt neu anlegen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Environment variables for the Stalwart service.\n# Uncomment and edit an entry to override its default.\n\n# Override the hostname used in HTTP responses\n#STALWART_HOSTNAME=mail.example.com\n\n# Override the HTTPS port used in HTTPS responses\n#STALWART_HTTPS_PORT=8080\n\n# Enable bootstrap \/ recovery mode on startup. Accepted: 1, true. Default: false.\n#STALWART_RECOVERY_MODE=true\n\n# Log level while in recovery mode. Default: info.\n#STALWART_RECOVERY_MODE_LOG_LEVEL=debug\n\n# HTTP port used in recovery mode. Default: 8080.\n#STALWART_RECOVERY_MODE_PORT=9090\n\n# Fixed administrator credentials \u2014 format: username:password\n# Default: a temporary random password is generated and printed to the logs.\n#STALWART_RECOVERY_ADMIN=admin:changeme\n\n# Cluster role assigned to this node. Must match a role name defined in the\n# cluster registry. Leave unset for a standalone (non-clustered) deployment.\n#STALWART_ROLE=primary\n\n# Push-notification shard this node is responsible for, when running in a\n# cluster.\n#STALWART_PUSH_SHARD=1<\/code><\/pre>\n\n\n\n<p>Bei Version 0.16.3 wird <code>STALWART_HTTPS_PORT<\/code> durch <code>STALWART_PUBLIC_URL<\/code> ersetzt. Die neue <code>\/etc\/stalwart\/stalwart.env<\/code> sieht im Original dann so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Environment variables for the Stalwart service.\n# Uncomment and edit an entry to override its default.\n\n# Override the hostname used in HTTP responses\n#STALWART_HOSTNAME=mail.example.com\n\n# Override the public base URL published in OAuth, OIDC, and JMAP discovery\n# documents. Accepts scheme, host, optional port, and optional path prefix.\n#STALWART_PUBLIC_URL=https:\/\/mail.example.com\n\n# Enable bootstrap \/ recovery mode on startup. Accepted: 1, true. Default: false.\n#STALWART_RECOVERY_MODE=true\n\n# Log level while in recovery mode. Default: info.\n#STALWART_RECOVERY_MODE_LOG_LEVEL=debug\n\n# HTTP port used in recovery mode. Default: 8080.\n#STALWART_RECOVERY_MODE_PORT=9090\n\n# Fixed administrator credentials \u2014 format: username:password\n# Default: a temporary random password is generated and printed to the logs.\n#STALWART_RECOVERY_ADMIN=admin:changeme\n\n# Cluster role assigned to this node. Must match a role name defined in the\n# cluster registry. Leave unset for a standalone (non-clustered) deployment.\n#STALWART_ROLE=primary\n\n# Push-notification shard this node is responsible for, when running in a\n# cluster.\n#STALWART_PUSH_SHARD=1<\/code><\/pre>\n\n\n\n<p>Anschlie\u00dfend Rechte anpassen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">chown stalwart:stalwart \/etc\/stalwart\/stalwart.env\nchmod o-rwx \/etc\/stalwart\/stalwart.env<\/code><\/pre>\n\n\n\n<p>In dieser <code>env<\/code>-Datei die Zeile <code>STALWART_RECOVERY_ADMIN<\/code> aktivieren und passend zu oben anpassen. Bei mir also:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><\/code><code>STALWART_RECOVERY_ADMIN=admin:Super.Geheim2026<\/code><\/pre>\n\n\n\n<p>In der bereits weiter oben f\u00fcr den FHS-Standard angepassten <code>\/etc\/systemd\/system\/stalwart.service<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vor der <code>ExecStart<\/code>-Zeile diese Zeile einf\u00fcgen: <code>EnvironmentFile=-\/etc\/stalwart\/stalwart.env<\/code><\/li>\n\n\n\n<li>Die beiden Vorkommen von <code>config.toml<\/code> durch <code>config.json<\/code> ersetzen.<\/li>\n<\/ul>\n\n\n\n<p>Anschlie\u00dfend <code>systemd<\/code> reloaden und Stalwart starten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">systemctl daemon-reload\nsystemctl start stalwart<\/code><\/pre>\n\n\n\n<p>In einer Shell SSH-Sitzung mit Port-Forwarding aufbauen \u2026<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\u250c\u2500\u2500 andreas@pfaender: [ ~ ]  \n\u2514\u2500$ ssh -L 8080:localhost:8080 root@s3.grupp-web.de <\/code><\/pre>\n\n\n\n<p>und nun wieder \u00fcber <a href=\"http:\/\/localhost:8080\/admin\">http:\/\/localhost:8080\/admin<\/a> auf die Web-Oberfl\u00e4che zugreifen. Login mit den Daten von <code>STALWART_RECOVERY_ADMIN<\/code>, siehe oben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration \u00fcber WebGUI auf Port 8080<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Settings > TLS > Certificates > Create Certificate \u2026 nachfolgende Schritte durchf\u00fchren und auf &#8222;Create&#8220; klicken\n<ul class=\"wp-block-list\">\n<li>Certificate > &#8222;Text value read from file&#8220;<\/li>\n\n\n\n<li>File Path > \/etc\/ssl\/certs\/grupp-web-de-cert.pem<\/li>\n\n\n\n<li>Private Key > &#8222;Text value read from file&#8220;<\/li>\n\n\n\n<li>File Path > \/etc\/ssl\/private\/grupp-web-de-key.pem<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Settings > Network > Listeners > https-Zeile anklicken\n<ul class=\"wp-block-list\">\n<li>Bind addresses > <code>[::]:8443<\/code> > auf <code>+<\/code> klicken<\/li>\n\n\n\n<li>Bind addresses > <code>[::]:443<\/code> > entfernen<\/li>\n\n\n\n<li>Proxy networks > <code>::1<\/code> und <code>127.0.0.0\/8<\/code> hinzuf\u00fcgen<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Am Seitenende auf &#8222;Save&#8220; klicken und<\/li>\n\n\n\n<li>Stalwart mit <code>systemctl restart stalwart<\/code> neu starten. \u00c4nderungen an Listenern scheinen nur so aktiv zu werden<\/li>\n\n\n\n<li>Settings > Network > Listeners > pop3s-Listener auf Port 995 entfernen<\/li>\n\n\n\n<li>Settings > Storage > In Memory Store > Kontrollieren ob \u2026\n<ul class=\"wp-block-list\">\n<li>Store type > Redis\/Valkey<\/li>\n\n\n\n<li>URL > redis:\/\/127.0.0.1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Danach sollte der Zugriff auch wieder regul\u00e4r \u00fcber <a href=\"https:\/\/mx01.grupp-web.de\/admin\">https:\/\/mx01.grupp-web.de\/admin<\/a> funktionieren.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Settings > Telemetry > Metrics > Prometheus\n<ul class=\"wp-block-list\">\n<li>Collector > Enabled<\/li>\n\n\n\n<li>Username > zabbix<\/li>\n\n\n\n<li>Secret > &#8222;Secret value&#8220; und das Passwort das beim Zabbix-Agent hinterlegt ist<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Settings > Network > WebDAV\n<ul class=\"wp-block-list\">\n<li>Assisted Discovery > aktivieren<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Management > Tasks > \u2026<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Firewall wieder \u00f6ffnen<\/h2>\n\n\n\n<p>Ok, das war&#8217;s dann. Mailserver wieder f\u00fcr Zugriffe auf allen relevanten Mail-Ports freigeben.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">firewall-cmd --list-services\nfirewall-cmd --permanent --add-service=imaps\nfirewall-cmd --permanent --add-service=smtps\nfirewall-cmd --permanent --add-service=smtp\nfirewall-cmd --reload\n# Kontrolle \/ Vergleich zum vorigen Zustand\nfirewall-cmd --list-services<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>ua-auto-config<\/code> in DNS und HAproxy erg\u00e4nzen<\/h2>\n\n\n\n<p>Stalwart stellt nun auch einen virtuellen Webserver f\u00fcr &#8222;<em>Automatic Configuration of Email, Calendar, and Contact Server Settings<\/em>&#8220; bereit. Siehe z.B. <a href=\"https:\/\/www.ietf.org\/archive\/id\/draft-ietf-mailmaint-pacc-01.html#name-introduction\">hier bei der IETF<\/a>.<\/p>\n\n\n\n<p>Dazu geh\u00f6ren zwei beim DNS-Provider <strong>nachzupflegende DNS-Records<\/strong>, die Stalwart unter &#8222;Management &gt; Domains &gt; Domains &gt; bei der jeweiligen Doman &#8218;View Zone File&#8216; &#8220; bereitstellt. In meinem Fall aktuell \u2026<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">ua-auto-config.grupp-web.de. IN CNAME mx01.grupp-web.de.\n_ua-auto-config.grupp-web.de. IN TXT \"v=UAAC1; a=sha256; d=pcFpmF5uuCmxQC ...\"<\/code><\/pre>\n\n\n\n<p><strong>Beachte:<\/strong> Die Angaben im <code>_ua-auto-config<\/code>-TXT-Record validieren die \u00fcber den nachfolgend gezeigten Webserver bereitgestellten Auto-Config-Daten! In <code>d<\/code> ist bei obigem Fall ein SHA256-Hash \u00fcber diese Daten.<\/p>\n\n\n\n<p>Damit der virtuelle Webserver auch erreichbar ist muss der Hostname bei Reverse Proxy Settings (wie es ja auch ich anwende) im Reverse Proxy ebenfalls <strong>nachgepflegt<\/strong> werden &#8211; <code>use_backend bk_stalwart if { req.ssl_sni -i ua-auto-config.grupp-web.de }<\/code> und der HAproxy neu geladen werden.<\/p>\n\n\n\n<p>Test durch Aufruf des <a href=\"https:\/\/ua-auto-config.grupp-web.de\/.well-known\/user-agent-configuration.json\" target=\"_blank\" rel=\"noreferrer noopener\">well-known URIs f\u00fcr diese Konfigurationsdaten<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Weitere DNS-\u00c4nderung &#8211; MTA-STS<\/h2>\n\n\n\n<p>Beim DNS TXT-Record <code>_mta-sts<\/code> hat(te) sich die ID ge\u00e4ndert. Die ist lt. zugeh\u00f6rigem RFC ein Wert der anderen Servern eine \u00c4nderung der Daten, die unter dem well-known-URI abrufbar sind, mitteilt. Habe ich also auch mal \u00fcbernommen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ACHTUNG: Die nachfolgende Beschreibung setzt voraus, dass diese beiden Schritte vorab durchgef\u00fchrt wurden. Der Blog-Beitrag &#8222;Stalwart-Verzeichnisse anpassen \u2013 Upgrade-v0.16 Vorbereitung&#8220; erl\u00e4utert die Erledigung dieser beiden Schritte. Dar\u00fcber hinaus bitte meine Installations-Variante als Grundlage beachten: Software f\u00fcr Migration herunterladen, ggf. patchen &#8230; Dieser vorbereitende Schritt erfolgte mit folgender Kommando-Sequenz: Sofern in der bisherigen Installation als &#8222;In-Memory &#8230; <a title=\"Mein Stalwart-Upgrade von Version 0.15.5 auf Version 0.16.2\" class=\"read-more\" href=\"https:\/\/grupp-web.de\/cms\/2026\/05\/03\/mein-stalwart-upgrade-von-version-0-15-5-auf-version-0-16-2\/\" aria-label=\"Mehr Informationen \u00fcber Mein Stalwart-Upgrade von Version 0.15.5 auf Version 0.16.2\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":2281,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,5],"tags":[],"class_list":["post-2278","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-anleitung","category-linux"],"_links":{"self":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts\/2278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/comments?post=2278"}],"version-history":[{"count":3,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts\/2278\/revisions"}],"predecessor-version":[{"id":2282,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/posts\/2278\/revisions\/2282"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/media\/2281"}],"wp:attachment":[{"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/media?parent=2278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/categories?post=2278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grupp-web.de\/cms\/wp-json\/wp\/v2\/tags?post=2278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}