Explorar o código

healthchecks! move to compose spec version!

Bret Fisher %!s(int64=4) %!d(string=hai) anos
pai
achega
383b74158e
Modificáronse 3 ficheiros con 55 adicións e 5 borrados
  1. 24 5
      docker-compose.yml
  2. 21 0
      healthchecks/postgres.sh
  3. 10 0
      healthchecks/redis.sh

+ 24 - 5
docker-compose.yml

@@ -1,9 +1,15 @@
-version: "3"
+# version is now using "compose spec"
+# v2 and v3 are now combined!
+# docker-compose v1.27+ required
 
 services:
   vote:
     build: ./vote
+    # use python rather than gunicorn for local dev
     command: python app.py
+    depends_on:
+      redis:
+        condition: service_healthy 
     volumes:
      - ./vote:/app
     ports:
@@ -14,7 +20,11 @@ services:
 
   result:
     build: ./result
+    # use nodemon rather than node for local dev
     command: nodemon server.js
+    depends_on:
+      db:
+        condition: service_healthy 
     volumes:
       - ./result:/app
     ports:
@@ -28,26 +38,35 @@ services:
     build:
       context: ./worker
     depends_on:
-      - "redis"
-      - "db"
+      redis:
+        condition: service_healthy 
+      db:
+        condition: service_healthy 
     networks:
       - back-tier
 
   redis:
     image: redis:5.0-alpine3.10
-    container_name: redis
+    volumes:
+      - "./healthchecks:/healthchecks"
+    healthcheck:
+      test: /healthchecks/redis.sh
+      interval: "5s"
     ports: ["6379"]
     networks:
       - back-tier
 
   db:
     image: postgres:9.4
-    container_name: db
     environment:
       POSTGRES_USER: "postgres"
       POSTGRES_PASSWORD: "postgres"
     volumes:
       - "db-data:/var/lib/postgresql/data"
+      - "./healthchecks:/healthchecks"
+    healthcheck:
+      test: /healthchecks/postgres.sh
+      interval: "5s"
     networks:
       - back-tier
 

+ 21 - 0
healthchecks/postgres.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+set -eo pipefail
+
+host="$(hostname -i || echo '127.0.0.1')"
+user="${POSTGRES_USER:-postgres}"
+db="${POSTGRES_DB:-$POSTGRES_USER}"
+export PGPASSWORD="${POSTGRES_PASSWORD:-}"
+
+args=(
+	# force postgres to not use the local unix socket (test "external" connectibility)
+	--host "$host"
+	--username "$user"
+	--dbname "$db"
+	--quiet --no-align --tuples-only
+)
+
+if select="$(echo 'SELECT 1' | psql "${args[@]}")" && [ "$select" = '1' ]; then
+	exit 0
+fi
+
+exit 1

+ 10 - 0
healthchecks/redis.sh

@@ -0,0 +1,10 @@
+#!/bin/sh
+set -eo pipefail
+
+host="$(hostname -i || echo '127.0.0.1')"
+
+if ping="$(redis-cli -h "$host" ping)" && [ "$ping" = 'PONG' ]; then
+	exit 0
+fi
+
+exit 1