{"id":51793,"date":"2025-08-22T06:13:12","date_gmt":"2025-08-22T06:13:12","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=51793"},"modified":"2025-08-22T06:13:12","modified_gmt":"2025-08-22T06:13:12","slug":"keycloak-installing-keycloak-with-mysql-socket-tcp-enabled","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/keycloak-installing-keycloak-with-mysql-socket-tcp-enabled\/","title":{"rendered":"keycloak: Installing keycloak with mysql (socket + TCP enabled)"},"content":{"rendered":"\n<p>To run <strong>Keycloak 17+ (Quarkus)<\/strong> with <strong>MySQL on the same server (XAMPP\/LAMPP)<\/strong>. It covers <strong>two supported setups<\/strong>. Pick <strong>A (TCP)<\/strong> for a production-style config, or <strong>B (UNIX socket)<\/strong> if you want to keep XAMPP in socket-only mode (what you just proved works).<\/p>\n\n\n\n<p>I\u2019ll assume:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keycloak home: <code>\/opt\/auth.holidaylandmark.com<\/code><\/li>\n\n\n\n<li>XAMPP home: <code>\/opt\/lampp<\/code><\/li>\n\n\n\n<li>DB name: <code>keycloak_db<\/code><\/li>\n\n\n\n<li>Socket path: <code>\/opt\/lampp\/var\/mysql\/mysql.sock<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">0) Prereqs (one-time)<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">sudo \/opt\/lampp\/lampp status   <span class=\"hljs-comment\"># Apache\/MySQL running<\/span>\n\/opt\/lampp\/bin\/mysql -u root -S \/opt\/lampp\/<span class=\"hljs-keyword\">var<\/span>\/mysql\/mysql.sock -e <span class=\"hljs-string\">\"SELECT VERSION();\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Create the database (safe if it already exists):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\/opt\/lampp\/bin\/mysql -u root -S \/opt\/lampp\/<span class=\"hljs-keyword\">var<\/span>\/mysql\/mysql.sock &lt;&lt;<span class=\"hljs-string\">'SQL'<\/span>\nCREATE DATABASE IF NOT EXISTS keycloak_db\n  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nSQL\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>If you also want a dedicated DB user for TCP (recommended in A): you\u2019ll create it in step A-2.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">A) Run Keycloak with <strong>MySQL over TCP<\/strong> (recommended)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">A-1) Enable TCP listening on MySQL<\/h3>\n\n\n\n<p>Edit <code>\/opt\/lampp\/etc\/my.cnf<\/code> (under <code>[mysqld]<\/code>):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">bind-address=<span class=\"hljs-number\">127.0<\/span><span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.1<\/span>\n<span class=\"hljs-comment\"># make sure there is NO 'skip-networking'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Restart &amp; verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">sudo \/opt\/lampp\/lampp restartmysql\nss -lntp | grep <span class=\"hljs-number\">3306<\/span>     <span class=\"hljs-comment\"># should show mysqld on 127.0.0.1:3306<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">A-2) Create a TCP user and grant access<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\/opt\/lampp\/bin\/mysql -u root -S \/opt\/lampp\/<span class=\"hljs-keyword\">var<\/span>\/mysql\/mysql.sock &lt;&lt;<span class=\"hljs-string\">'SQL'<\/span>\nCREATE USER IF NOT EXISTS <span class=\"hljs-string\">'keycloak'<\/span>@<span class=\"hljs-string\">'127.0.0.1'<\/span> IDENTIFIED BY <span class=\"hljs-string\">'Strong#Passw0rd!'<\/span>;\nGRANT ALL PRIVILEGES ON keycloak_db.* TO <span class=\"hljs-string\">'keycloak'<\/span>@<span class=\"hljs-string\">'127.0.0.1'<\/span>;\nFLUSH PRIVILEGES;\nSQL\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Quick test:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\/opt\/lampp\/bin\/mysql -h <span class=\"hljs-number\">127.0<\/span><span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.1<\/span> -P <span class=\"hljs-number\">3306<\/span> -u keycloak -p keycloak_db -e <span class=\"hljs-string\">\"SELECT 1;\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">A-3) Configure Keycloak for MySQL\/TCP<\/h3>\n\n\n\n<p>Edit <code>\/opt\/auth.holidaylandmark.com\/conf\/keycloak.conf<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">db=mysql\ndb-url=jdbc:mysql:<span class=\"hljs-comment\">\/\/127.0.0.1:3306\/keycloak_db?useSSL=false&amp;allowPublicKeyRetrieval=true<\/span>\ndb-username=keycloak\n<span class=\"hljs-comment\"># (omit db-password here; supply via env to avoid special-char parsing issues)<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">A-4) Build once, then start<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd \/opt\/auth.holidaylandmark.com\/bin\n.\/kc.sh build\nexport KC_DB_PASSWORD=<span class=\"hljs-string\">'Strong#Passw0rd!'<\/span>\n<span class=\"hljs-comment\"># Optional first-run admin (if you haven't created it yet):<\/span>\nexport KEYCLOAK_ADMIN=admin\nexport KEYCLOAK_ADMIN_PASSWORD=<span class=\"hljs-string\">'Admin#12345'<\/span>\n.\/kc.sh start-dev --verbose\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You should see DB schema creation logs and the dev UI at <code>http:\/\/localhost:8080<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">B) Run Keycloak using <strong>UNIX socket<\/strong> (XAMPP socket-only)<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This is exactly what you just ran successfully.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">B-1) Verify the socket exists<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ls -l \/opt\/lampp\/<span class=\"hljs-keyword\">var<\/span>\/mysql\/mysql.sock\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">B-2) Configure Keycloak to use the MariaDB driver + socket<\/h3>\n\n\n\n<p>Edit <code>\/opt\/auth.holidaylandmark.com\/conf\/keycloak.conf<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">db=mariadb\ndb-url=jdbc:mariadb:<span class=\"hljs-comment\">\/\/localhost:3306\/keycloak_db?localSocket=\/opt\/lampp\/var\/mysql\/mysql.sock<\/span>\ndb-username=root\n<span class=\"hljs-comment\"># (omit db-password here; supply via env)<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Some MariaDB Connector\/J versions also accept <code>unixSocket=...<\/code>. Stick with <code>localSocket=<\/code> if it works for you.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">B-3) Build once, then start<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd \/opt\/auth.holidaylandmark.com\/bin\n.\/kc.sh build\nexport KC_DB_PASSWORD=<span class=\"hljs-string\">'Hs?gb?S345?3#s'<\/span>\n<span class=\"hljs-comment\"># Optional first-run admin:<\/span>\nexport KEYCLOAK_ADMIN=admin\nexport KEYCLOAK_ADMIN_PASSWORD=<span class=\"hljs-string\">'Admin#12345'<\/span>\n.\/kc.sh start-dev --verbose\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You should now see logs mentioning <code>org.mariadb.jdbc...<\/code> (driver family) and normal startup.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1) Verifications (either A or B)<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Show effective DB settings: <code>.\/kc.sh show-config --all | egrep '^(db=|db-url=|quarkus.datasource.db-kind=)'<\/code><\/li>\n\n\n\n<li>Confirm driver family in logs on error (handy trick):<br><code>com.mysql.cj...<\/code> \u2192 MySQL driver; <code>org.mariadb.jdbc...<\/code> \u2192 MariaDB driver.<\/li>\n\n\n\n<li>Health endpoints (after start): <code>curl -s http:\/\/localhost:8080\/health | jq . curl -s http:\/\/localhost:8080\/metrics | head<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2) Make it persistent (systemd example)<\/h1>\n\n\n\n<p>Create <code>\/etc\/systemd\/system\/keycloak.service<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">&#91;Unit]\nDescription=Keycloak\nAfter=network.target\n\n&#91;Service]\nType=simple\nUser=root\nWorkingDirectory=\/opt\/auth.holidaylandmark.com\/bin\n<span class=\"hljs-comment\"># --- Choose ONE block (A or B) ---<\/span>\n\n<span class=\"hljs-comment\"># (A) MySQL\/TCP<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB=mysql<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB_URL=jdbc:mysql:\/\/127.0.0.1:3306\/keycloak_db?useSSL=false&amp;allowPublicKeyRetrieval=true<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB_USERNAME=keycloak<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB_PASSWORD=Strong#Passw0rd!<\/span>\n\n<span class=\"hljs-comment\"># (B) MariaDB\/socket<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB=mariadb<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB_URL=jdbc:mariadb:\/\/localhost:3306\/keycloak_db?localSocket=\/opt\/lampp\/var\/mysql\/mysql.sock<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB_USERNAME=root<\/span>\n<span class=\"hljs-comment\"># Environment=KC_DB_PASSWORD=Hs?gb?S345?3#s<\/span>\n\n<span class=\"hljs-comment\"># Optional admin bootstrap (first run only; then remove)<\/span>\n<span class=\"hljs-comment\"># Environment=KEYCLOAK_ADMIN=admin<\/span>\n<span class=\"hljs-comment\"># Environment=KEYCLOAK_ADMIN_PASSWORD=Admin#12345<\/span>\n\nExecStart=\/opt\/auth.holidaylandmark.com\/bin\/kc.sh start\nRestart=always\n\n&#91;Install]\nWantedBy=multi-user.target\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Enable &amp; start:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">sudo systemctl daemon-reload\nsudo systemctl enable --now keycloak\nsudo systemctl status keycloak\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3) Common pitfalls &amp; fixes<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u201cCommunications link failure \/ Connection refused\u201d<\/strong>\n<ul class=\"wp-block-list\">\n<li>TCP path: MySQL not listening on <code>127.0.0.1:3306<\/code> \u2192 fix my.cnf &amp; restart; verify with <code>ss -lntp | grep 3306<\/code>.<\/li>\n\n\n\n<li>Socket path: URL must be <code>jdbc:mariadb:\/\/...<\/code> with <code>db=mariadb<\/code> and <code>localSocket=...<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u201cDriver does not support the provided URL\u201d<\/strong>\n<ul class=\"wp-block-list\">\n<li>Mismatch between <code>db=<\/code> and URL scheme.<br>Use <code>db=mysql<\/code> + <code>jdbc:mysql:\/\/...<\/code> <strong>or<\/strong> <code>db=mariadb<\/code> + <code>jdbc:mariadb:\/\/...<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Password contains <code>#<\/code> or special chars<\/strong>\n<ul class=\"wp-block-list\">\n<li>Put the password in <strong>env<\/strong> (<code>KC_DB_PASSWORD=...<\/code>), not in <code>keycloak.conf<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Keycloak keeps using the wrong driver<\/strong>\n<ul class=\"wp-block-list\">\n<li>Check env overrides: <code>env | egrep '^KC_DB|KC_DB_URL|KC_DB_USERNAME|KC_DB_PASSWORD'<\/code><\/li>\n\n\n\n<li><code>show-config<\/code> confirms what Keycloak will actually use.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4) Upgrade-safe habits<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep DB settings in <code>keycloak.conf<\/code>, <strong>secrets in env<\/strong>.<\/li>\n\n\n\n<li>Run <code>.\/kc.sh build<\/code> after changing drivers or providers.<\/li>\n\n\n\n<li>Prefer <strong>TCP (A)<\/strong> for production and remote\/containerized deployments.<\/li>\n\n\n\n<li>Use <strong>socket (B)<\/strong> only if you\u2019re intentionally running socket-only MySQL on the same host.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To run Keycloak 17+ (Quarkus) with MySQL on the same server (XAMPP\/LAMPP). It covers two supported setups. Pick A (TCP) for a production-style config, or B (UNIX socket) if you want to keep XAMPP in socket-only mode (what you just proved works). I\u2019ll assume: 0) Prereqs (one-time) Create the database (safe if it already exists):&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-51793","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/51793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=51793"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/51793\/revisions"}],"predecessor-version":[{"id":51794,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/51793\/revisions\/51794"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=51793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=51793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=51793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}