From 383b74158e66f1d2f2c35a06aa6a86b1e7445484 Mon Sep 17 00:00:00 2001 From: Bret Fisher Date: Fri, 29 Jan 2021 16:47:31 -0500 Subject: [PATCH] healthchecks! move to compose spec version! --- docker-compose.yml | 29 ++++++++++++++++++++++++----- healthchecks/postgres.sh | 21 +++++++++++++++++++++ healthchecks/redis.sh | 10 ++++++++++ 3 files changed, 55 insertions(+), 5 deletions(-) create mode 100755 healthchecks/postgres.sh create mode 100755 healthchecks/redis.sh diff --git a/docker-compose.yml b/docker-compose.yml index 1f39d53..46f53d7 100644 --- a/docker-compose.yml +++ b/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 diff --git a/healthchecks/postgres.sh b/healthchecks/postgres.sh new file mode 100755 index 0000000..2994167 --- /dev/null +++ b/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 diff --git a/healthchecks/redis.sh b/healthchecks/redis.sh new file mode 100755 index 0000000..3953758 --- /dev/null +++ b/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