{"id":3130,"date":"2022-04-20T21:42:24","date_gmt":"2022-04-21T05:42:24","guid":{"rendered":"https:\/\/tungle.ca\/?p=3130"},"modified":"2023-01-05T18:49:16","modified_gmt":"2023-01-06T02:49:16","slug":"using-kubernetes-to-deploy-php-guestbook-application-with-redis-in-aws","status":"publish","type":"post","link":"https:\/\/tungle.ca\/?p=3130","title":{"rendered":"Using Kubernetes to deploy PHP Guestbook application with Redis in AWS"},"content":{"rendered":"\n<p>This is a diagram that I have used for this lab.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"442\" height=\"425\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-600.png\" alt=\"\" class=\"wp-image-3169\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-600.png 442w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-600-300x288.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-600-200x192.png 200w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/figure>\n\n\n\n<p>I have used the following link to deploy the PHP Guestbook application with Redis (https:\/\/kubernetes.io\/docs\/tutorials\/stateless-application\/guestbook\/)<\/p>\n\n\n\n<p>Set up an Ubuntu Linux with 2GB RAM and 30GB storage for the Kubernetes host. Allow SSH and HTTP from anywhere to the Linux instance on Security Group.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"906\" height=\"677\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-579.png\" alt=\"\" class=\"wp-image-3134\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-579.png 906w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-579-300x224.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-579-768x574.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-579-200x149.png 200w\" sizes=\"auto, (max-width: 906px) 100vw, 906px\" \/><\/figure>\n\n\n\n<p>+ Deployment Redis Database.<\/p>\n\n\n\n<p>Creating the Redis Deployment<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">#nano redis-leader-deployment.yaml\n# SOURCE: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/tutorials\/guestbook\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: redis-leader\n  labels:\n    app: redis\n    role: leader\n    tier: backend\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: redis\n  template:\n    metadata:\n      labels:\n        app: redis\n        role: leader\n        tier: backend\n    spec:\n      containers:\n      - name: leader\n        image: \"docker.io\/redis:6.0.5\"\n        resources:\n          requests:\n            cpu: 100m\n            memory: 100Mi\n        ports:\n        - containerPort: 6379\n<\/code><\/pre>\n\n\n\n<p>#Apply the Redis deployment. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">microk8s kubectl apply -f https:\/\/k8s.io\/examples\/application\/guestbook\/redis-leader-deployment.yaml<\/code><\/pre>\n\n\n\n<p># Check Redis Pod is running<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get pods<\/code><\/pre>\n\n\n\n<p># View logs from the Redis leader Pod<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl logs -f deployment\/redis-leader<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"844\" height=\"370\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-577.png\" alt=\"\" class=\"wp-image-3132\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-577.png 844w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-577-300x132.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-577-768x337.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-577-200x88.png 200w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><\/figure>\n\n\n\n<p>+ Creating the Redis leader Service<\/p>\n\n\n\n<p>#Apply a&nbsp;service to proxy the traffic to the Redis Pod.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">#nano redis-leader-service.yaml\n# SOURCE: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/tutorials\/guestbook\napiVersion: v1\nkind: Service\nmetadata:\n  name: redis-leader\n  labels:\n    app: redis\n    role: leader\n    tier: backend\nspec:\n  ports:\n  - port: 6379\n    targetPort: 6379\n  selector:\n    app: redis\n    role: leader\n    tier: backend<\/code><\/pre>\n\n\n\n<p>#Apply the Redis Service with the deployment file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl apply -f https:\/\/k8s.io\/examples\/application\/guestbook\/redis-leader-service.yaml<\/code><\/pre>\n\n\n\n<p>#verify that the Redis service is running<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get service<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"822\" height=\"262\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-578.png\" alt=\"\" class=\"wp-image-3133\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-578.png 822w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-578-300x96.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-578-768x245.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-578-200x64.png 200w\" sizes=\"auto, (max-width: 822px) 100vw, 822px\" \/><\/figure>\n\n\n\n<p>+ Set up Redis followers to make it highly available on a few Redis followers.<\/p>\n\n\n\n<p>#nano redis-follower-deployment.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\"># SOURCE: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/tutorials\/guestbook\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: redis-follower\n  labels:\n    app: redis\n    role: follower\n    tier: backend\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: redis\n  template:\n    metadata:\n      labels:\n        app: redis\n        role: follower\n        tier: backend\n    spec:\n      containers:\n      - name: follower\n        image: gcr.io\/google_samples\/gb-redis-follower:v2\n        resources:\n          requests:\n            cpu: 100m\n            memory: 100Mi\n        ports:\n        - containerPort: 6379<\/code><\/pre>\n\n\n\n<p>#Apply the Redis Deployment for the redis-follower-deployment.yaml file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">microk8s kubectl apply -f https:\/\/k8s.io\/examples\/application\/guestbook\/redis-follower-deployment.yaml<\/code><\/pre>\n\n\n\n<p># Verify two Redis follower replicas are running.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get pods<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"859\" height=\"273\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-580.png\" alt=\"\" class=\"wp-image-3135\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-580.png 859w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-580-300x95.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-580-768x244.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-580-200x64.png 200w\" sizes=\"auto, (max-width: 859px) 100vw, 859px\" \/><\/figure>\n\n\n\n<p>+ Creating the Redis follower service.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">#nano redis-follower-service.yaml\n# SOURCE: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/tutorials\/guestbook\napiVersion: v1\nkind: Service\nmetadata:\n  name: redis-follower\n  labels:\n    app: redis\n    role: follower\n    tier: backend\nspec:\n  ports:\n    # the port that this service should serve on\n  - port: 6379\n  selector:\n    app: redis\n    role: follower\n    tier: backend<\/code><\/pre>\n\n\n\n<p>#Apply the Redis Service with the deployment file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl apply -f https:\/\/k8s.io\/examples\/application\/guestbook\/redis-follower-service.yaml<\/code><\/pre>\n\n\n\n<p>#&nbsp;verify that the Redis service is running.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get service<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"333\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-581.png\" alt=\"\" class=\"wp-image-3136\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-581.png 830w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-581-300x120.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-581-768x308.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-581-200x80.png 200w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><\/figure>\n\n\n\n<p>+ Set up and Expose the Guestbook Frontend.<\/p>\n\n\n\n<p>#Creating Guestbook Frontend Deployment.<\/p>\n\n\n\n<p>#nano frontend-deployment.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\"># SOURCE: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/tutorials\/guestbook\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: frontend\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n        app: guestbook\n        tier: frontend\n  template:\n    metadata:\n      labels:\n        app: guestbook\n        tier: frontend\n    spec:\n      containers:\n      - name: php-redis\n        image: gcr.io\/google_samples\/gb-frontend:v5\n        env:\n        - name: GET_HOSTS_FROM\n          value: \"dns\"\n        resources:\n          requests:\n            cpu: 100m\n            memory: 100Mi\n        ports:\n        - containerPort: 80<\/code><\/pre>\n\n\n\n<p>#Apply the frontend Deployment file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">microk8s kubectl apply -f https:\/\/k8s.io\/examples\/application\/guestbook\/frontend-deployment.yaml<\/code><\/pre>\n\n\n\n<p>#Verify three frontend replicas are running.<\/p>\n\n\n\n<p>microk8s kubectl get pods -l app=guestbook -l tier=frontend<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"267\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-582.png\" alt=\"\" class=\"wp-image-3137\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-582.png 806w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-582-300x99.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-582-768x254.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-582-200x66.png 200w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\" \/><\/figure>\n\n\n\n<p>+ Creating the Frontend Service.<\/p>\n\n\n\n<p>#nano frontend-service.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\"># SOURCE: https:\/\/cloud.google.com\/kubernetes-engine\/docs\/tutorials\/guestbook\napiVersion: v1\nkind: Service\nmetadata:\n  name: frontend\n  labels:\n    app: guestbook\n    tier: frontend\nspec:\n  # if your cluster supports it, uncomment the following to automatically create\n  # an external load-balanced IP for the frontend service.\n  # type: LoadBalancer\n  #type: LoadBalancer\n  ports:\n    # the port that this service should serve on\n  - port: 80\n  selector:\n    app: guestbook\n    tier: frontend<\/code><\/pre>\n\n\n\n<p>#Apply the frontend Service with the deployment file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl apply -f https:\/\/k8s.io\/examples\/application\/guestbook\/frontend-service.yaml<\/code><\/pre>\n\n\n\n<p>#Verify three frontend replicas are running.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get services<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"307\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-583.png\" alt=\"\" class=\"wp-image-3138\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-583.png 788w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-583-300x117.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-583-768x299.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-583-200x78.png 200w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/figure>\n\n\n\n<p>#Check the Frontend Service via&nbsp;<code>LoadBalancer<\/code><\/p>\n\n\n\n<p>microk8s kubectl get service frontend<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"538\" height=\"68\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-584.png\" alt=\"\" class=\"wp-image-3139\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-584.png 538w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-584-300x38.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-584-200x25.png 200w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/figure>\n\n\n\n<p>+ Scale the Web Frontend.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl scale deployment frontend --replicas=5\nmicrok8s kubectl get pods\nmicrok8s kubectl scale deployment frontend --replicas=2\nmicrok8s kubectl get pods<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"734\" height=\"510\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-585.png\" alt=\"\" class=\"wp-image-3140\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-585.png 734w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-585-300x208.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-585-200x139.png 200w\" sizes=\"auto, (max-width: 734px) 100vw, 734px\" \/><\/figure>\n\n\n\n<p>#check frontend service.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"50\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-586.png\" alt=\"\" class=\"wp-image-3141\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-586.png 548w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-586-300x27.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-586-200x18.png 200w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"812\" height=\"474\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-587.png\" alt=\"\" class=\"wp-image-3142\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-587.png 812w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-587-300x175.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-587-768x448.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-587-200x117.png 200w\" sizes=\"auto, (max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p>+ Expose port 80 via public IP address on Kubernetes host (10.0.0.10). This allows accessing PHP Guestbook from outside.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl patch svc frontend -n default -p '{\"spec\": {\"type\": \"LoadBalancer\", \"externalIPs\":[\"10.0.0.10\"]}}'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"831\" height=\"61\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-588.png\" alt=\"\" class=\"wp-image-3143\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-588.png 831w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-588-300x22.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-588-768x56.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-588-200x15.png 200w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"798\" height=\"485\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-589.png\" alt=\"\" class=\"wp-image-3144\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-589.png 798w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-589-300x182.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-589-768x467.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-589-200x122.png 200w\" sizes=\"auto, (max-width: 798px) 100vw, 798px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"632\" height=\"107\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-592.png\" alt=\"\" class=\"wp-image-3147\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-592.png 632w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-592-300x51.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-592-200x34.png 200w\" sizes=\"auto, (max-width: 632px) 100vw, 632px\" \/><\/figure>\n\n\n\n<p>Access PHP Guestbook from the Internet (http:\/\/54.165.173.81).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"301\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-591.png\" alt=\"\" class=\"wp-image-3146\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-591.png 800w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-591-300x113.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-591-768x289.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-591-200x75.png 200w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>This is a diagram that I have used for this lab. I have used the following link to deploy the PHP Guestbook application with Redis (https:\/\/kubernetes.io\/docs\/tutorials\/stateless-application\/guestbook\/) Set up an Ubuntu Linux with 2GB RAM and 30GB storage for the Kubernetes host. Allow SSH and HTTP from anywhere to the Linux instance on Security Group. + [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,30],"tags":[20,24],"class_list":["post-3130","post","type-post","status-publish","format-standard","hentry","category-cloud","category-kubernetes","tag-cloud","tag-kubernetes"],"_links":{"self":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/3130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3130"}],"version-history":[{"count":6,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/3130\/revisions"}],"predecessor-version":[{"id":4432,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/3130\/revisions\/4432"}],"wp:attachment":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}