{"id":8200,"date":"2026-03-18T13:25:54","date_gmt":"2026-03-18T11:25:54","guid":{"rendered":"https:\/\/scalemedia.co.za\/cybermedia\/?post_type=docs&#038;p=8200"},"modified":"2026-03-24T20:37:16","modified_gmt":"2026-03-24T18:37:16","password":"","slug":"home-lab-episode-5-thehive-cortex-misp-installation","status":"publish","type":"docs","link":"https:\/\/scalemedia.co.za\/cybermedia\/docs\/home-lab-episode-5-thehive-cortex-misp-installation\/","title":{"rendered":"Lab Building Series: Ep5"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-18-174053-1024x494.png\" alt=\"\" class=\"wp-image-8225\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-18-174053-1024x494.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-18-174053-300x145.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-18-174053-768x371.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-18-174053-1536x742.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-18-174053-2048x989.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>We&#8217;ll install TheHive, Cortex &amp; MISP with <strong>Docker containers<\/strong> and <strong>Docker Compose<\/strong>. These tools help cyber security professionals manage and respond to incidents efficiently.<\/p>\n\n\n\n<p>Here&#8217;s a breakdown of what each tool does:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TheHive<\/h2>\n\n\n\n<p>The hive is an open-source&nbsp;<strong>Security Incident Response Platform (SIRP)<\/strong>&nbsp;used to manage and track security incidents on a case-by-case basis. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cortex<\/h2>\n\n\n\n<p>is an&nbsp;<strong>observable analysis<\/strong>&nbsp;and&nbsp;<strong>active response engine<\/strong>&nbsp;that automates the enrichment of indicators like IP addresses, domains, and files. It analyzes observables found during an incident and provides intelligence from various sources.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">MISP (Malware Information Sharing Platform)<\/h2>\n\n\n\n<p>is a platform for&nbsp;<strong>sharing and gathering security intelligence<\/strong>. It helps collect, store, share, and correlate cyber security indicators and threats.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Docker<\/h2>\n\n\n\n<p>is an open-source&nbsp;<strong>containerization platform<\/strong>&nbsp;that packages applications and their dependencies into isolated containers, making them portable and easy to deploy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Docker Compose<\/h2>\n\n\n\n<p>is a tool that allows you to define and run&nbsp;<strong>multiple Docker containers<\/strong>&nbsp;at once using a single YAML file, simplifying multi-container application deployments.<\/p>\n\n\n\n<p><strong>How they work together:<\/strong> When an incident occurs, <strong>TheHive<\/strong> manages the case. <strong>Cortex<\/strong> analyzes suspicious observables from the incident, and <strong>MISP<\/strong> provides external threat intelligence and facilitates sharing new findings.<\/p>\n\n\n\n<p>In oder to install TheHive, Cortex &amp; MISP you need to install them on the Ubuntu server if you do not have it yet check this <a href=\"https:\/\/youtu.be\/rSxWMqD8kMw\" data-type=\"link\" data-id=\"https:\/\/youtu.be\/rSxWMqD8kMw\" target=\"_blank\" rel=\"noopener\">video<\/a> will show you how to do it. And make sure that is on the same network as where we installed the Wazuh SIEM. Allocate at least&nbsp;8<strong> GB of memory<\/strong>&nbsp;and&nbsp;<strong>2-4 virtual processors<\/strong>&nbsp;to the VM, as TheHive, Cortex, and MISP require several supporting database services.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"714\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-127-1024x714.png\" alt=\"\" class=\"wp-image-8203\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-127-1024x714.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-127-300x209.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-127-768x535.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-127.png 1057w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>We will be using Docker Compose to deploy this lab, It will allows us to define and run multiple containers at once using YAML file (<code>.yaml<\/code>&nbsp;or&nbsp;<code>.yml<\/code>) <\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-eeec4cee\"\n     id=\"betterdocs-code-snippet-eeec4cee\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-eeec4cee .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>version: &quot;3.7&quot;\nservices:\n  thehive:\n    image: strangebee\/thehive:5.2\n    restart: unless-stopped\n    depends_on:\n      - cassandra\n      - elasticsearch\n      - minio\n      - cortex.local\n    mem_limit: 1500m\n    ports:\n      - &quot;0.0.0.0:9000:9000&quot;\n    environment:\n      - JVM_OPTS=&quot;-Xms1024M -Xmx1024M&quot;\n    command:\n      - --secret\n      - &quot;lab123456789&quot;\n      - &quot;--cql-hostnames&quot;\n      - &quot;cassandra&quot;\n      - &quot;--index-backend&quot;\n      - &quot;elasticsearch&quot;\n      - &quot;--es-hostnames&quot;\n      - &quot;elasticsearch&quot;\n      - &quot;--s3-endpoint&quot;\n      - &quot;http:\/\/minio:9002&quot;\n      - &quot;--s3-access-key&quot;\n      - &quot;minioadmin&quot;\n      - &quot;--s3-secret-key&quot;\n      - &quot;minioadmin&quot;\n      - &quot;--s3-use-path-access-style&quot;\n      #- &quot;--no-config-cortex&quot;\n      - &quot;--cortex-port&quot;\n      - &quot;9001&quot;\n      - &quot;--cortex-keys&quot;\n      - &quot;uIun+SE95+rOr06WfFIRXlO\/TKApWTqu&quot; #remember to change this to your API key\n    volumes:\n      - .\/thehive\/conf\/application.conf:\/etc\/thehive\/application.conf\n    #If you are familiar with the previous docker compose file you will note that the Cortex ports and keys have been omitted this is because we can now\n    #complete the integration from TheHive GUI directly.\n   # volumes:\n     # - thehivedata:\/etc\/thehive\/application.conf\n    networks:\n      - Test1 #Change this to your Network\n\n  cassandra:\n    image: &#039;cassandra:4&#039;\n    restart: unless-stopped\n    ports:\n      - &quot;0.0.0.0:9042:9042&quot;\n    environment:\n      - CASSANDRA_CLUSTER_NAME=TheHive\n    volumes:\n      - cassandradata:\/var\/lib\/cassandra\n    networks:\n      - Test1 #Change this to your Network\n\n  elasticsearch:\n    image: docker.elastic.co\/elasticsearch\/elasticsearch:7.17.9\n    restart: unless-stopped\n    mem_limit: 512m\n    ports:\n      - &quot;0.0.0.0:9200:9200&quot;\n    environment:\n      - discovery.type=single-node\n      - xpack.security.enabled=false\n      - cluster.name=hive\n      - http.host=0.0.0.0\n      - &quot;ES_JAVA_OPTS=-Xms256m -Xmx256m&quot;\n    volumes:\n      - elasticsearchdata:\/usr\/share\/elasticsearch\/data\n    networks:\n      - Test1 #Change this to your Network\n\n\n  minio:\n    image: quay.io\/minio\/minio\n    restart: unless-stopped\n    command: [&quot;minio&quot;, &quot;server&quot;, &quot;\/data&quot;, &quot;--console-address&quot;, &quot;:9002&quot;]\n    environment:\n      - MINIO_ROOT_USER=minioadmin\n      - MINIO_ROOT_PASSWORD=minioadmin\n    ports:\n      - &quot;0.0.0.0:9002:9002&quot;\n    volumes:\n      - &quot;miniodata:\/data&quot;\n    networks:\n      - Test1 #Change this to your Network\n\n\n#appended .local onto the container name because when we integrate cortex with TheHive using the new GUI menu it only accept a FQDN.\n  cortex.local:\n    image: thehiveproject\/cortex:latest\n    restart: unless-stopped\n    environment:\n      - job_directory=\/tmp\/cortex-jobs\n      - docker_job_directory=\/tmp\/cortex-jobs\n    volumes:\n      #For analyzers and responders (called neurons, also based on docker containers) to work, we need to bind the hosts docker socket into the cortex container\n      #so it can use the docker service of the host, and share the job directory between the container and the host.\n      #An alternative way of doing this would be to run docker (neurons) within the cortex docker container (docker-ception), the container will need to be run in\n      #privileged mode and you will need the --start-docker parameter for this work. It is however not advised to run docker containers in priviliged mode because it\n      #grants the docker container root capabilities over the host system which is a security risk.\n      - \/var\/run\/docker.sock:\/var\/run\/docker.sock\n      - \/tmp\/cortex-jobs:\/tmp\/cortex-jobs\n      - .\/cortex\/logs:\/var\/log\/cortex\n      - .\/cortex\/application.conf:\/cortex\/application.conf\n    depends_on:\n      - elasticsearch\n    ports:\n      - &quot;0.0.0.0:9001:9001&quot;\n    networks:\n      - Test1 #Change this to your Network\n  #appended .local onto the container name because when we integrate MISP with TheHive using the new GUI menu it only accepts a FQDN.\n  misp.local:\n    image: coolacid\/misp-docker:core-latest\n    restart: unless-stopped\n    depends_on:\n      - misp_mysql\n    ports:\n      - &quot;0.0.0.0:80:80&quot;\n      - &quot;0.0.0.0:443:443&quot;\n    volumes:\n      - &quot;.\/server-configs\/:\/var\/www\/MISP\/app\/Config\/&quot;\n      - &quot;.\/logs\/:\/var\/www\/MISP\/app\/tmp\/logs\/&quot;\n      - &quot;.\/files\/:\/var\/www\/MISP\/app\/files&quot;\n      - &quot;.\/ssl\/:\/etc\/nginx\/certs&quot;\n    environment:\n      - MYSQL_HOST=misp_mysql\n      - MYSQL_DATABASE=mispdb\n      - MYSQL_USER=mispuser\n      - MYSQL_PASSWORD=misppass\n      - MISP_ADMIN_EMAIL=mispadmin@lab.local\n      - MISP_ADMIN_PASSPHRASE=mispadminpass\n      - MISP_BASEURL=localhost\n      - TIMEZONE=Europe\/London\n      - &quot;INIT=true&quot;\n      - &quot;CRON_USER_ID=1&quot;\n      - &quot;REDIS_FQDN=redis&quot;\n      - &quot;HOSTNAME=http:\/\/10.0.3.5&quot;\n    networks:\n      - Test1 #Change this to your Network\n\n  misp_mysql:\n    image: mysql\/mysql-server:5.7\n    restart: unless-stopped\n    volumes:\n      - mispsqldata:\/var\/lib\/mysql\n    environment:\n      - MYSQL_DATABASE=mispdb\n      - MYSQL_USER=mispuser\n      - MYSQL_PASSWORD=misppass\n      - MYSQL_ROOT_PASSWORD=mispass\n    networks:\n      - Test1 #Change this to your Network\n  redis:\n    image: redis:latest\n    networks:\n      - Test1\n  misp-modules:\n    image: coolacid\/misp-docker:modules-latest\n    environment:\n      - &quot;REDIS_BACKEND=redis&quot;\n    depends_on:\n      - redis\n      - misp_mysql\n    networks:\n      - Test1\n  #removed the cortex volumes as we no longer require it, cortex will share the \/tmp directory for jobs, the logs and application files will be stored in the cortex folder\n  #in the same directory on the host where the docker-compose.yml resides for ease of access.\nvolumes:\n  miniodata:\n  cassandradata:\n  elasticsearchdata:\n  thehivedata:\n  mispsqldata:\n\nnetworks:\n    Test1: #Change this to your Network\n          driver: bridge\n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-eeec4cee');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p>We will use this YAML file to install TheHive, Cortex &amp; MISP make sure you change and include your Network in this file, I&#8217;ve mentioned where you should change everything you need in order to run the YAML file later on.<\/p>\n\n\n\n<p>Now open Ubuntu server, As you can see the IP address of our ubuntu server<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"647\" height=\"420\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-129.png\" alt=\"\" class=\"wp-image-8207\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-129.png 647w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-129-300x195.png 300w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Next we need to create or enable ssh to install our docker-compose yaml file, you need first to update the system and install ssh, on your terminal type:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-2kb8h7f\"\n     id=\"betterdocs-code-snippet-2kb8h7f\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-2kb8h7f .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>sudo apt update\nsudo apt install openssh-server -y<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-2kb8h7f');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-wnum5kq\"\n     id=\"betterdocs-code-snippet-wnum5kq\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-wnum5kq .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>sudo systemctl status ssh<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-wnum5kq');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"707\" height=\"282\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-130.png\" alt=\"\" class=\"wp-image-8208\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-130.png 707w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-130-300x120.png 300w\" sizes=\"(max-width: 707px) 100vw, 707px\" \/><\/figure>\n\n\n\n<p>Now that our ssh is active let&#8217;s access it on our windows machine, Open powershell on windows and type ssh follow by the name the ubuntu server in my case is &#8220;server&#8221; and the IP address of the ubuntu server 10.0.3.9<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-sp8vtwx\"\n     id=\"betterdocs-code-snippet-sp8vtwx\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-sp8vtwx .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>ssh server@10.0.3.9<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-sp8vtwx');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"636\" height=\"182\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-131.png\" alt=\"\" class=\"wp-image-8209\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-131.png 636w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-131-300x86.png 300w\" sizes=\"(max-width: 636px) 100vw, 636px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"263\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-132.png\" alt=\"\" class=\"wp-image-8210\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-132.png 700w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-132-300x113.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Install Docker-compose by running this command<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-8cqo380\"\n     id=\"betterdocs-code-snippet-8cqo380\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-8cqo380 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>sudo apt install docker.io docker-compose-v2 -y<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-8cqo380');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p>Next create a docker-compose yaml file by opening a text editor and copy  our YAML file.<\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-q2b9hgz\"\n     id=\"betterdocs-code-snippet-q2b9hgz\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-q2b9hgz .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>sudo nano docker-compose.yaml<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-q2b9hgz');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"347\" height=\"58\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-133.png\" alt=\"\" class=\"wp-image-8215\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-133.png 347w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-133-300x50.png 300w\" sizes=\"(max-width: 347px) 100vw, 347px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-134-1024x434.png\" alt=\"\" class=\"wp-image-8216\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-134-1024x434.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-134-300x127.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-134-768x325.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-134-1536x651.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-134.png 1593w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>So to start with the deployment go back to the terminal and type<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-py42skz\"\n     id=\"betterdocs-code-snippet-py42skz\"\n     data-language=\"typescript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcd8<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-py42skz .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-typescript\"><code>sudo docker-compose up<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-py42skz');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p>It&#8217;ll take a couple of minutes to download, After everything is done we should be able to access our servers from Web GUI. To verify if everything is running type sudo docker ps, This will check all the containers running on the server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-135-1024x429.png\" alt=\"\" class=\"wp-image-8217\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-135-1024x429.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-135-300x126.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-135-768x322.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-135.png 1267w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-136-1024x261.png\" alt=\"\" class=\"wp-image-8218\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-136-1024x261.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-136-300x77.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-136-768x196.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-136-1536x392.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-136.png 1767w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Open your web browser, Cortex port number is 90001 (Click on Update Database and set up a username and password), TheHive 9000 (default username : admin@thehive.local password: secret) and MISP should be your Ubuntu IP Address in my case is 10.0.3.9 and (default username: admin@admin.test and password: admin)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"747\" height=\"198\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-139.png\" alt=\"\" class=\"wp-image-8221\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-139.png 747w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-139-300x80.png 300w\" sizes=\"(max-width: 747px) 100vw, 747px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"342\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-137-1024x342.png\" alt=\"\" class=\"wp-image-8219\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-137-1024x342.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-137-300x100.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-137-768x256.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-137-1536x513.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-137.png 1582w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"387\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-138-1024x387.png\" alt=\"\" class=\"wp-image-8220\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-138-1024x387.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-138-300x113.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-138-768x290.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-138-1536x581.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-138.png 1627w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"426\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-140-1024x426.png\" alt=\"\" class=\"wp-image-8222\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-140-1024x426.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-140-300x125.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-140-768x320.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-140-1536x640.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-140.png 1902w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"323\" src=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-141-1024x323.png\" alt=\"\" class=\"wp-image-8223\" srcset=\"https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-141-1024x323.png 1024w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-141-300x95.png 300w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-141-768x242.png 768w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-141-1536x485.png 1536w, https:\/\/scalemedia.co.za\/cybermedia\/wp-content\/uploads\/2026\/03\/image-141.png 1796w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Great all the best for the next series&nbsp;\ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;ll install TheHive, Cortex &amp; MISP with Docker containers and Docker Compose. These tools help cyber security professionals manage and respond to incidents efficiently. Here&#8217;s a breakdown of what each tool does: TheHive The hive is an open-source&nbsp;Security Incident Response Platform (SIRP)&nbsp;used to manage and track security incidents on a case-by-case basis. Cortex is an&nbsp;observable&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"doc_category":[47],"doc_tag":[],"class_list":["post-8200","docs","type-docs","status-publish","hentry","doc_category-cyber-security-lab-building"],"year_month":"2026-04","word_count":569,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"admin","author_nicename":"admin","author_url":"https:\/\/scalemedia.co.za\/cybermedia\/author\/admin\/"},"doc_category_info":[{"term_name":"Cyber Security lab building","term_url":"https:\/\/scalemedia.co.za\/cybermedia\/docs-category\/cyber-security-lab-building\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs\/8200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/comments?post=8200"}],"version-history":[{"count":8,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs\/8200\/revisions"}],"predecessor-version":[{"id":8280,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs\/8200\/revisions\/8280"}],"wp:attachment":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/media?parent=8200"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/doc_category?post=8200"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/doc_tag?post=8200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}