{"id":209,"date":"2023-11-07T17:59:34","date_gmt":"2023-11-07T17:59:34","guid":{"rendered":"https:\/\/dinodevs.com\/blog\/?p=209"},"modified":"2024-06-11T19:56:14","modified_gmt":"2024-06-11T16:56:14","slug":"installing-librenms-on-docker","status":"publish","type":"post","link":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/","title":{"rendered":"Installing LibreNMS on Docker"},"content":{"rendered":"\n<p>As its website explains, <a href=\"https:\/\/www.librenms.org\/\" data-type=\"link\" data-id=\"https:\/\/www.librenms.org\/\">LibreNMS<\/a> is &#8220;a fully featured network monitoring system that provides a wealth of features and device support&#8221;. It can be used to monitor servers and services so make sure they are functioning as intended.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up LibreNMS<\/h2>\n\n\n\n<p>To set LibreNMS up, we will follow the <a href=\"https:\/\/docs.librenms.org\/Installation\/Docker\/\">official guide<\/a>, correcting some of the commands and installing some additional software.<\/p>\n\n\n\n<p>First, we will download the latest LibreNMS code from its <a href=\"https:\/\/github.com\/librenms\/librenms\" data-type=\"link\" data-id=\"https:\/\/github.com\/librenms\/librenms\">GitHub repository<\/a>, then we will extract the Docker-related files and delete the rest of the files:<\/p>\n\n\n\n<pre class=\"wp-block-code lang-bash\"><code>mkdir .\/librenms-temp\ncd .\/librenms-temp\nwget https:\/\/github.com\/librenms\/docker\/archive\/refs\/heads\/master.zip\nunzip master.zip\ncd ..\ncp -r .\/librenms-temp\/docker-master\/examples\/compose .\/librenms\nrm -rf .\/librenms-temp\ncd librenms<\/code><\/pre>\n\n\n\n<p>We can now optionally edit the <code>.env<\/code> file (e.g. to change the default database password):<\/p>\n\n\n\n<pre class=\"wp-block-code lang-bash\"><code>nano .env<\/code><\/pre>\n\n\n\n<p>Now let&#8217;s launch the containers of LiberNMS: <\/p>\n\n\n\n<pre class=\"wp-block-code lang-bash\"><code>sudo docker compose -f compose.yml up -d<\/code><\/pre>\n\n\n\n<p>As soon as all the containers are up, visit <code>http:\/\/localhost:8000\/<\/code> (or replace <code>localhost<\/code> with your server&#8217;s IP) and initialise LibreNMS by creating an admin account.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Nagios plugins on LibreNMS Docker<\/h2>\n\n\n\n<p>After completing the LibreNMS setup, we can shut it down temporarily to install the Nagios plugins. To shut LibreNMS down, we can turn off its containers:<\/p>\n\n\n\n<pre class=\"wp-block-code lang-bash\"><code>sudo docker compose -f compose.yml down<\/code><\/pre>\n\n\n\n<p>Let&#8217;s now install <code>nagios-plugins<\/code> that will allow us to create some service checks inside LiberNMS. To do so, we will create a temporal Ubuntu container (named <code>tmp<\/code>) to install <code>nagios-plugins<\/code> copy the binaries we need to LibreNMS files and delete them:<\/p>\n\n\n\n<pre class=\"wp-block-code lang-bash\"><code>sudo docker run --name tmp -v $(pwd)\/librenms:\/opt\/librenms -i -t ubuntu bash\napt update\napt install nagios-plugins -y\ncp -P \/usr\/lib\/nagios\/plugins\/* \/opt\/librenms\/monitoring-plugins\/\nexit\nsudo docker rm tmp<\/code><\/pre>\n\n\n\n<p>Then, we can start LibreNMS again:<\/p>\n\n\n\n<pre class=\"wp-block-code lang-bash\"><code>sudo docker compose -f compose.yml up -d<\/code><\/pre>\n\n\n\n<p>The plugins will now be available inside the &#8220;Add Service&#8221; menu, under &#8220;Type&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up Website checks<\/h2>\n\n\n\n<p>Now that Nagios plugins are installed, we can use the <a href=\"https:\/\/nagios-plugins.org\/doc\/man\/check_http.html\" data-type=\"link\" data-id=\"https:\/\/nagios-plugins.org\/doc\/man\/check_http.html\">Nagios check_http plugin<\/a> to monitor the status of our websites.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Certificate Check<\/h4>\n\n\n\n<p>Let&#8217;s create a service to check our website certificate.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click <code>+ Add Service<\/code> from the menu<\/li>\n\n\n\n<li>Give a name to the service<\/li>\n\n\n\n<li>Select a device from the list (maybe the server hosting the website)<\/li>\n\n\n\n<li>Select <code>http<\/code> as a <code>Check Type<\/code><\/li>\n\n\n\n<li>Input the domain of your website inside the <code>Remote Host<\/code> input<\/li>\n\n\n\n<li>Input the parameters <code>--sni -S -p 443 -C 30,14 -t 20<\/code> inside the <code>Parameters<\/code> input<\/li>\n\n\n\n<li>Click <code>Add Service<\/code><\/li>\n<\/ul>\n\n\n\n<p>This will check the certificate of the website and generate a critical alert if it is about to expire in less than 14 days or generate a warning if it is about to expire in less than 30 days.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"> Website Check (HTTP\/HTTPS)<\/h4>\n\n\n\n<p>Let&#8217;s create a service to check our website status over HTTP or HTTPS.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click <code>+ Add Service<\/code> from the menu<\/li>\n\n\n\n<li>Give a name to the service<\/li>\n\n\n\n<li>Select a device from the list (maybe the server hosting the website)<\/li>\n\n\n\n<li>Select <code>http<\/code> as a <code>Check Type<\/code><\/li>\n\n\n\n<li>Input the domain of your website inside the <code>Remote Host<\/code> input<\/li>\n\n\n\n<li>Input the parameters inside the Parameters input\n<ul class=\"wp-block-list\">\n<li>to check an HTTP website insert the: <code>-E -p 80 -t 20<\/code><\/li>\n\n\n\n<li>to check an HTTPS website insert the: <code>--sni -E -S -p 443 -t 20<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click <code>Add Service<\/code><\/li>\n<\/ul>\n\n\n\n<p>This will check the website and generate an alert in case it throws an error or if the website is unresponsive.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"955\" height=\"784\" data-id=\"214\" src=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-certificate-1.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-certificate-1.png 955w, https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-certificate-1-300x246.png 300w, https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-certificate-1-768x630.png 768w\" sizes=\"auto, (max-width: 955px) 100vw, 955px\" \/><figcaption class=\"wp-element-caption\">Using Nagios http plugin to check website&#8217;s certificate.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"779\" data-id=\"213\" src=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-http.png\" alt=\"\" class=\"wp-image-213\" srcset=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-http.png 945w, https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-http-300x247.png 300w, https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-http-768x633.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><figcaption class=\"wp-element-caption\">Using Nagios http plugin to check HTTP website.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"943\" height=\"778\" data-id=\"212\" src=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-https.png\" alt=\"\" class=\"wp-image-212\" srcset=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-https.png 943w, https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-https-300x248.png 300w, https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/check-https-768x634.png 768w\" sizes=\"auto, (max-width: 943px) 100vw, 943px\" \/><figcaption class=\"wp-element-caption\">Using Nagios http plugin to check HTTPS website.<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Sum up<\/h2>\n\n\n\n<p>LibreMNS is an easy to setup tool that can assist you in monitoring your servers and services. Plus, it can be easily set up using Docker. You can give it a try! \ud83d\ude0a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As its website explains, LibreNMS is &#8220;a fully featured network monitoring system that provides a wealth of features and device support&#8221;. It can be used to monitor servers and services so make sure they are functioning as intended. Setting up LibreNMS To set LibreNMS up, we will follow the official guide, correcting some of the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":210,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[16,4,14],"class_list":["post-209","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-docker","tag-linux","tag-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Installing LibreNMS on Docker - DinoDevs<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Installing LibreNMS on Docker - DinoDevs\" \/>\n<meta property=\"og:description\" content=\"As its website explains, LibreNMS is &#8220;a fully featured network monitoring system that provides a wealth of features and device support&#8221;. It can be used to monitor servers and services so make sure they are functioning as intended. Setting up LibreNMS To set LibreNMS up, we will follow the official guide, correcting some of the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\" \/>\n<meta property=\"og:site_name\" content=\"DinoDevs\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-07T17:59:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-11T16:56:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"346\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Athanasios Grammatopoulos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Athanasios Grammatopoulos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\"},\"author\":{\"name\":\"Athanasios Grammatopoulos\",\"@id\":\"https:\/\/dinodevs.com\/blog\/#\/schema\/person\/fccac7bcc5374cede43de49a450dfaf3\"},\"headline\":\"Installing LibreNMS on Docker\",\"datePublished\":\"2023-11-07T17:59:34+00:00\",\"dateModified\":\"2024-06-11T16:56:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\"},\"wordCount\":497,\"publisher\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png\",\"keywords\":[\"docker\",\"linux\",\"server\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\",\"url\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\",\"name\":\"Installing LibreNMS on Docker - DinoDevs\",\"isPartOf\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png\",\"datePublished\":\"2023-11-07T17:59:34+00:00\",\"dateModified\":\"2024-06-11T16:56:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage\",\"url\":\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png\",\"contentUrl\":\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png\",\"width\":1024,\"height\":346},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/dinodevs.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Installing LibreNMS on Docker\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/dinodevs.com\/blog\/#website\",\"url\":\"https:\/\/dinodevs.com\/blog\/\",\"name\":\"DinoDevs\",\"description\":\"When in doubt, code it out.\",\"publisher\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/dinodevs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/dinodevs.com\/blog\/#organization\",\"name\":\"DinoDevs\",\"url\":\"https:\/\/dinodevs.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dinodevs.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2025\/05\/dinodevs.cube_.png\",\"contentUrl\":\"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2025\/05\/dinodevs.cube_.png\",\"width\":600,\"height\":600,\"caption\":\"DinoDevs\"},\"image\":{\"@id\":\"https:\/\/dinodevs.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/dinodevs.com\/blog\/#\/schema\/person\/fccac7bcc5374cede43de49a450dfaf3\",\"name\":\"Athanasios Grammatopoulos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dinodevs.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0271fabc59edad96ed659fb1a3c4caf867a7324609e22d0b2cc25ad71d4c0d8c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0271fabc59edad96ed659fb1a3c4caf867a7324609e22d0b2cc25ad71d4c0d8c?s=96&d=mm&r=g\",\"caption\":\"Athanasios Grammatopoulos\"},\"sameAs\":[\"https:\/\/github.com\/GramThanos\"],\"url\":\"https:\/\/dinodevs.com\/blog\/author\/gramthanos\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Installing LibreNMS on Docker - DinoDevs","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/","og_locale":"en_US","og_type":"article","og_title":"Installing LibreNMS on Docker - DinoDevs","og_description":"As its website explains, LibreNMS is &#8220;a fully featured network monitoring system that provides a wealth of features and device support&#8221;. It can be used to monitor servers and services so make sure they are functioning as intended. Setting up LibreNMS To set LibreNMS up, we will follow the official guide, correcting some of the [&hellip;]","og_url":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/","og_site_name":"DinoDevs","article_published_time":"2023-11-07T17:59:34+00:00","article_modified_time":"2024-06-11T16:56:14+00:00","og_image":[{"width":1024,"height":346,"url":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png","type":"image\/png"}],"author":"Athanasios Grammatopoulos","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Athanasios Grammatopoulos","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#article","isPartOf":{"@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/"},"author":{"name":"Athanasios Grammatopoulos","@id":"https:\/\/dinodevs.com\/blog\/#\/schema\/person\/fccac7bcc5374cede43de49a450dfaf3"},"headline":"Installing LibreNMS on Docker","datePublished":"2023-11-07T17:59:34+00:00","dateModified":"2024-06-11T16:56:14+00:00","mainEntityOfPage":{"@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/"},"wordCount":497,"publisher":{"@id":"https:\/\/dinodevs.com\/blog\/#organization"},"image":{"@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png","keywords":["docker","linux","server"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/","url":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/","name":"Installing LibreNMS on Docker - DinoDevs","isPartOf":{"@id":"https:\/\/dinodevs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage"},"image":{"@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png","datePublished":"2023-11-07T17:59:34+00:00","dateModified":"2024-06-11T16:56:14+00:00","breadcrumb":{"@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#primaryimage","url":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png","contentUrl":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2023\/11\/librenms-on-docker.png","width":1024,"height":346},{"@type":"BreadcrumbList","@id":"https:\/\/dinodevs.com\/blog\/installing-librenms-on-docker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dinodevs.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Installing LibreNMS on Docker"}]},{"@type":"WebSite","@id":"https:\/\/dinodevs.com\/blog\/#website","url":"https:\/\/dinodevs.com\/blog\/","name":"DinoDevs","description":"When in doubt, code it out.","publisher":{"@id":"https:\/\/dinodevs.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dinodevs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/dinodevs.com\/blog\/#organization","name":"DinoDevs","url":"https:\/\/dinodevs.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dinodevs.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2025\/05\/dinodevs.cube_.png","contentUrl":"https:\/\/dinodevs.com\/blog\/wp-content\/uploads\/2025\/05\/dinodevs.cube_.png","width":600,"height":600,"caption":"DinoDevs"},"image":{"@id":"https:\/\/dinodevs.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/dinodevs.com\/blog\/#\/schema\/person\/fccac7bcc5374cede43de49a450dfaf3","name":"Athanasios Grammatopoulos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dinodevs.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0271fabc59edad96ed659fb1a3c4caf867a7324609e22d0b2cc25ad71d4c0d8c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0271fabc59edad96ed659fb1a3c4caf867a7324609e22d0b2cc25ad71d4c0d8c?s=96&d=mm&r=g","caption":"Athanasios Grammatopoulos"},"sameAs":["https:\/\/github.com\/GramThanos"],"url":"https:\/\/dinodevs.com\/blog\/author\/gramthanos\/"}]}},"_links":{"self":[{"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/posts\/209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/comments?post=209"}],"version-history":[{"count":5,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/posts\/209\/revisions"}],"predecessor-version":[{"id":246,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/posts\/209\/revisions\/246"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/media\/210"}],"wp:attachment":[{"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/media?parent=209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/categories?post=209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dinodevs.com\/blog\/wp-json\/wp\/v2\/tags?post=209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}