From fa36e9e40cef79739666803922482159c080191e Mon Sep 17 00:00:00 2001 From: Iain Sproat <68657+iainsproat@users.noreply.github.com> Date: Thu, 29 Jun 2023 14:55:40 +0100 Subject: [PATCH] feat(docker compose): healthcheck for speckle-server (#1651) * feat(docker compose): healthcheck for speckle-server - if speckle server pod becomes unresponsive (but has not yet exited with a non-zero exit code), it will be automatically restarted after 30s. * feat(1click): add healthcheck to speckle-server container running in DigitalOcean 1click * fix(1click): remove command statements - the docker image is responsible for providing these --- docker-compose-speckle.yml | 10 ++++++++++ .../template-docker-compose.yml | 14 ++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docker-compose-speckle.yml b/docker-compose-speckle.yml index 74a6b93f5..0c3305a5b 100644 --- a/docker-compose-speckle.yml +++ b/docker-compose-speckle.yml @@ -17,6 +17,16 @@ services: dockerfile: packages/server/Dockerfile image: speckle/speckle-server:local restart: always + healthcheck: + test: + - CMD + - node + - -e + - "require('node:http').request({headers: {'Content-Type': 'application/json'}, port:3000, hostname:'127.0.0.1', path:'/graphql?query={serverInfo{version}}', method: 'GET' }, (res) => { body = ''; res.on('data', (chunk) => {body += chunk;}); res.on('end', () => {process.exit(res.statusCode != 200 || body.toLowerCase().includes('error'));}); }).end();" + interval: 10s + timeout: 10s + retries: 3 + start_period: 5s environment: # TODO: Change this to the URL of the speckle server, as accessed from the network CANONICAL_URL: 'http://localhost' diff --git a/utils/1click_image_scripts/template-docker-compose.yml b/utils/1click_image_scripts/template-docker-compose.yml index dce791522..04d07211a 100644 --- a/utils/1click_image_scripts/template-docker-compose.yml +++ b/utils/1click_image_scripts/template-docker-compose.yml @@ -47,9 +47,18 @@ services: speckle-server: image: speckle/speckle-server:2 restart: always + healthcheck: + test: + - CMD + - node + - -e + - "require('node:http').request({headers: {'Content-Type': 'application/json'}, port:3000, hostname:'127.0.0.1', path:'/graphql?query={serverInfo{version}}', method: 'GET' }, (res) => { body = ''; res.on('data', (chunk) => {body += chunk;}); res.on('end', () => {process.exit(res.statusCode != 200 || body.toLowerCase().includes('error'));}); }).end();" + interval: 10s + timeout: 10s + retries: 3 + start_period: 5s ports: - '127.0.0.1:3000:3000' - command: ['bash', '-c', '/wait && node bin/www'] environment: CANONICAL_URL: 'TODO: change' SESSION_SECRET: 'TODO: change' @@ -88,7 +97,6 @@ services: restart: always mem_limit: '1000m' memswap_limit: '1000m' - command: ['bash', '-c', '/wait && node bin/www'] environment: LOG_LEVEL: 'info' @@ -98,7 +106,6 @@ services: speckle-webhook-service: image: speckle/speckle-webhook-service:2 restart: always - command: ['bash', '-c', '/wait && node main.js'] environment: LOG_LEVEL: 'info' PG_CONNECTION_STRING: 'postgres://speckle:speckle@postgres/speckle' @@ -107,7 +114,6 @@ services: fileimport-service: image: speckle/speckle-fileimport-service:2 restart: always - command: ['bash', '-c', '/wait && node src/daemon.js'] environment: LOG_LEVEL: 'info' PG_CONNECTION_STRING: 'postgres://speckle:speckle@postgres/speckle'