{"id":16161,"date":"2017-02-20T16:15:33","date_gmt":"2017-02-20T14:15:33","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=16161"},"modified":"2017-12-19T12:13:15","modified_gmt":"2017-12-19T10:13:15","slug":"docker-zoneminder-tutorial","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/","title":{"rendered":"Docker ZoneMinder Tutorial"},"content":{"rendered":"<p>ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras, among others.<\/p>\n<p>In this tutorial we will see how to set up a Docker container running it. For this tutorial, Linux Mint 18 and Docker version 1.12.3 have been used.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n[ulp id=&#8217;OCKUMTbC259tpbxG&#8217;]<\/p>\n<div class=\"tip\"><strong>Tip<\/strong><br \/>\nYou may skip Docker installation and jump directly to the <a href=\"#section_2\"><strong>beginning of the tutorial<\/strong><\/a> below.<\/div>\n<h2>1. Installation<\/h2>\n<p><strong>Note<\/strong>: Docker requires a 64-bit system with a kernel version equal or higher to 3.10.<\/p>\n<p>We can install Docker simply via <code>apt-get<\/code>, without the need of adding any repository, just installing the <code>docker.io<\/code> package:<\/p>\n<pre class=\"brush:bash\">sudo apt-get update\r\nsudo apt-get install docker.io<\/pre>\n<p>For more details, you can follow the <a href=\"https:\/\/www.webcodegeeks.com\/devops\/install-docker-ubuntu-tutorial\/\">Install Docker on Ubuntu Tutorial<\/a>.<\/p>\n<h2>2. Pulling the image from Docker Hub<\/h2>\n<p>ZoneMinder has not published an image in the Docker Hub officially, but it&#8217;s available &#8220;extra-officially&#8221;, which can be found in <a href=\"https:\/\/hub.docker.com\/r\/kylejohnson\/zoneminder\/\">kylejohnson\/zoneminder<\/a>.<\/p>\n<p>So, we would have to pull the following way:<\/p>\n<pre class=\"brush:bash\">docker pull kylejohnson\/zoneminder<\/pre>\n<p>Now, we just have to create the container, binding its port 80 to some port in the host:<\/p>\n<pre class=\"brush:bash\">docker run -p 80:80 --name=zoneminder -d kylejohnson\/zoneminder<\/pre>\n<p>That&#8217;s it! Now, we should be able to access the ZoneMinder interface following the <code>localhost&lt;:port&gt;\/index.php<\/code> URL, showing up the interface:<\/p>\n<figure style=\"width: 936px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/02\/zoneminder_interface.jpg\" width=\"936\" height=\"346\" \/><figcaption class=\"wp-caption-text\">1. ZoneMinder interface, after running the image pulled from the Docker Hub.<\/figcaption><\/figure>\n<h2>3. Creating a Dockerfile from the scratch<\/h2>\n<p>If we want to create our own ZoneMinder image from the beginning, perhaps because we want a more customized system, we can write our own Dockerfile.<\/p>\n<p>This would be actually very easy: just a basic LAMP stack, the installation of ZoneMinder from the apt repositories, and basic user, permission and database setup.<\/p>\n<p>We will use the following directory structure:<\/p>\n<pre class=\"brush:bash\">.\r\n\u251c\u2500\u2500 Dockerfile\r\n\u2514\u2500\u2500 scripts\r\n\u00a0\u00a0\u00a0 \u2514\u2500\u2500 docker-entrypoint.sh<\/pre>\n<p>A Dockerfile for installing ZoneMinder would consist just in:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>Dockerfile<\/em><\/span><\/p>\n<pre class=\"brush:bash\">FROM ubuntu\r\nMAINTAINER Julen Pardo &lt;julen.pardo@outlook.es&gt;\r\n\r\nENV DEBIAN_FRONTEND=noninteractive\r\n\r\nRUN apt-get update\r\nRUN apt-get install -y mysql-server \\\r\n\u00a0\u00a0\u00a0 apache2 \\\r\n\u00a0\u00a0\u00a0 php7.0 \\\r\n\u00a0\u00a0\u00a0 libapache2-mod-php \\\r\n\u00a0\u00a0\u00a0 php7.0-mysql \\\r\n\u00a0\u00a0\u00a0 zoneminder\r\n\r\n\r\nRUN adduser www-data video\r\nRUN chmod 740 \/etc\/zm\/zm.conf\r\nRUN chown root:www-data \/etc\/zm\/zm.conf\r\nRUN chown -R www-data:www-data \/usr\/share\/zoneminder\r\n\r\nRUN a2enconf zoneminder\r\nRUN a2enmod cgi\r\nRUN a2enmod rewrite\r\n\r\nCOPY scripts\/docker-entrypoint.sh \/docker-entrypoint.sh\r\nRUN chmod 777 \/docker-entrypoint.sh\r\nENTRYPOINT [\"\/docker-entrypoint.sh\"]\r\n\r\nEXPOSE 80 443<\/pre>\n<p>Note that in the last part of the Dockerfile, we set a script as entrypoint. The script consists on the following instructions:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>docker-entrypoint.sh<\/em><\/span><\/p>\n<pre class=\"brush:bash\">#!\/bin\/bash\r\n\r\necho \"date.timezone = $PHP_TIMEZONE\" &gt;&gt; \/etc\/php\/7.0\/apache2\/php.ini\r\n\r\n\/etc\/init.d\/mysql start\r\n\r\nmysql -u root &lt; \/usr\/share\/zoneminder\/db\/zm_create.sql\r\nmysql -u root -e \"GRANT ALL ON zm.* to 'zmuser'@localhost identified by 'zmpass';\"\r\nmysqladmin reload\r\n\r\nsystemctl enable zoneminder\r\n\/etc\/init.d\/zoneminder start\r\n\/etc\/init.d\/apache2 restart\r\n\r\ntail -F n0 \/dev\/null<\/pre>\n<p>The first instruction (after the shebang, of course), is setting the time zone in the PHP config. Note that we access it with <code>$PHP_TIMEZONE<\/code>, meaning that we have to set it as environmental variable in the container creation.<\/p>\n<p>After that, with the database running, we just import the database creation script provided by ZoneMinder and grant permissions, and then starting the service and restarting the Apache one (because of the modules we enabled in the Dockerfile).<\/p>\n<p>The last statement is just a never-ending command, to keep the container alive.<\/p>\n<p>Now, we can build our image from the Dockerfile:<\/p>\n<pre class=\"brush:bash\">docker build --tag=myzoneminder . # Path to the Dockerfile.<\/pre>\n<p>And create the container, e.g.:<\/p>\n<pre class=\"brush:bash\">docker run -p 80:80 \\\r\n           -d \\\r\n           --name=myzoneminder \\\r\n           -e PHP_TIMEZONE=\"Europe\/Berlin\" \\\r\n           myzoneminder<\/pre>\n<p>&nbsp;<\/p>\n<p>Once running, if we access the <code>localhost&lt;:port&gt;\/zm<\/code> URL, we should see our ZoneMinder GUI, as we did in the image 1.<\/p>\n<h2>4. Summary<\/h2>\n<p>This tutorial has shown how to install ZoneMinder, the free and open source video-surveillance solution in a Docker container, pulling the image maintained by the developers (even if it does not appear as an official image at Docker Hub); and building our own ZoneMinder image with a Dockerfile, which could be a more suitable solution if we would want a more customized system.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras, among others. In this tutorial we will see how to set up a Docker container running it. For this tutorial, Linux Mint 18 and Docker version 1.12.3 have been used. &nbsp; &hellip;<\/p>\n","protected":false},"author":160,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[217],"class_list":["post-16161","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker ZoneMinder Tutorial - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras,\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker ZoneMinder Tutorial - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-20T14:15:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-12-19T10:13:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Toni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Toni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\"},\"author\":{\"name\":\"Toni\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966\"},\"headline\":\"Docker ZoneMinder Tutorial\",\"datePublished\":\"2017-02-20T14:15:33+00:00\",\"dateModified\":\"2017-12-19T10:13:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\"},\"wordCount\":503,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"keywords\":[\"Docker\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\",\"name\":\"Docker ZoneMinder Tutorial - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2017-02-20T14:15:33+00:00\",\"dateModified\":\"2017-12-19T10:13:15+00:00\",\"description\":\"ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras,\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/devops\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Docker ZoneMinder Tutorial\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966\",\"name\":\"Toni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g\",\"caption\":\"Toni\"},\"url\":\"https:\/\/www.webcodegeeks.com\/author\/julen-pardo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker ZoneMinder Tutorial - Web Code Geeks - 2026","description":"ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras,","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:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/","og_locale":"en_US","og_type":"article","og_title":"Docker ZoneMinder Tutorial - Web Code Geeks - 2026","og_description":"ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras,","og_url":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2017-02-20T14:15:33+00:00","article_modified_time":"2017-12-19T10:13:15+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","type":"image\/jpeg"}],"author":"Toni","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Toni","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/"},"author":{"name":"Toni","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966"},"headline":"Docker ZoneMinder Tutorial","datePublished":"2017-02-20T14:15:33+00:00","dateModified":"2017-12-19T10:13:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/"},"wordCount":503,"commentCount":1,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","keywords":["Docker"],"articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/","url":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/","name":"Docker ZoneMinder Tutorial - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2017-02-20T14:15:33+00:00","dateModified":"2017-12-19T10:13:15+00:00","description":"ZoneMinder is a set of application and tools, free and open source, that offers a complete solution for video-surveillance, allowing IP or CCTV cameras,","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-zoneminder-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.webcodegeeks.com\/category\/devops\/"},{"@type":"ListItem","position":3,"name":"Docker ZoneMinder Tutorial"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966","name":"Toni","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g","caption":"Toni"},"url":"https:\/\/www.webcodegeeks.com\/author\/julen-pardo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/160"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=16161"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16161\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/10356"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=16161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=16161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=16161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}