From 96ea5cfcacb8af905ff033378d8f80fdd42b56d8 Mon Sep 17 00:00:00 2001 From: Silas Peters <69711739+SilasPeters@users.noreply.github.com> Date: Tue, 4 Mar 2025 20:35:17 +0100 Subject: [PATCH] feat: added healthcheck to outline (#469) * feat: added healthcheck to outline * fix: remove redundant task * fix: removed redundant Dockerfile thanks to outline patch * fix: outline did not see .env file * feat: define volume path * fix: docker whined about syntax * fix: docker image inconcistencies * fix: confused ports --- ansible/roles/docker/tasks/compose-up.yml | 11 +++++++++-- ansible/roles/outline/tasks/main.yml | 7 +++---- .../templates/{docker.env.j2 => .env.j2} | 0 .../outline/templates/docker-compose.yml.j2 | 19 ++++++++++++++----- ansible/roles/outline/vars/main.yml | 2 +- 5 files changed, 27 insertions(+), 12 deletions(-) rename ansible/roles/outline/templates/{docker.env.j2 => .env.j2} (100%) diff --git a/ansible/roles/docker/tasks/compose-up.yml b/ansible/roles/docker/tasks/compose-up.yml index d4e197ea..aca0d1e5 100644 --- a/ansible/roles/docker/tasks/compose-up.yml +++ b/ansible/roles/docker/tasks/compose-up.yml @@ -1,4 +1,8 @@ --- +# Possible variables which can be set to change the behaviour of these tasks: +# - project_source (required): the path to the directory the compose file is in +# - remove_images: whether to remove and rebuild all used images while composing up. +# Leave unset to keep the images, otherwise use "local" or "all" - name: "Check if 'project_source' is defined" ansible.builtin.fail: @@ -21,6 +25,7 @@ community.docker.docker_compose_v2: project_src: "{{ project_source }}" state: "absent" + remove_images: "{{ remove_images | default(omit) }}" # NOTE: can give the warning that nothing is to be removed, if nothing exists yet (and thus expected) - name: "Create and start services" community.docker.docker_compose_v2: @@ -36,7 +41,7 @@ project_src: "{{ project_source }}" register: "output" -- name: "Assert that all services properly started" +- name: "Assert that all services properly started, and that the docker compose file is idempotent" ansible.builtin.assert: that: "not output.changed" @@ -69,10 +74,12 @@ - "output.containers | selectattr('Name', 'equalto', item) | map(attribute='State') | list | first == 'exited'" loop: "{{ docker_compose_service_names }}" -- name: "Restart services" +- name: "Restart services and ensure they are healhty" community.docker.docker_compose_v2: project_src: "{{ project_source }}" state: "restarted" + wait: true + wait_timeout: 300 register: "output" # - name: Show results diff --git a/ansible/roles/outline/tasks/main.yml b/ansible/roles/outline/tasks/main.yml index 0a041b1d..f8065b0c 100644 --- a/ansible/roles/outline/tasks/main.yml +++ b/ansible/roles/outline/tasks/main.yml @@ -45,10 +45,10 @@ mode: "0600" notify: "trigger outline migration" - - name: "Create outline 'docker.env' file" + - name: "Create outline '.env' file" ansible.builtin.template: - src: "docker.env.j2" - dest: "{{ outline_config.project_source }}/docker.env" + src: ".env.j2" + dest: "{{ outline_config.project_source }}/.env" owner: "outline" group: "outline" mode: "0600" @@ -76,7 +76,6 @@ path: "{{ outline_config.project_source }}/.MIGRATION_PENDING" state: "absent" - - name: "Docker compose" ansible.builtin.include_tasks: "../docker/tasks/compose-up.yml" vars: diff --git a/ansible/roles/outline/templates/docker.env.j2 b/ansible/roles/outline/templates/.env.j2 similarity index 100% rename from ansible/roles/outline/templates/docker.env.j2 rename to ansible/roles/outline/templates/.env.j2 diff --git a/ansible/roles/outline/templates/docker-compose.yml.j2 b/ansible/roles/outline/templates/docker-compose.yml.j2 index 89fb45ed..852e0c7b 100644 --- a/ansible/roles/outline/templates/docker-compose.yml.j2 +++ b/ansible/roles/outline/templates/docker-compose.yml.j2 @@ -3,12 +3,21 @@ services: outline: + container_name: outline image: outlinewiki/outline:{{ outline_config.version }} - restart: unless-stopped - env_file: ./docker.env - # ports: - # - "4568:3000" - network_mode: host # TODO replace this + env_file: .env + restart: always + network_mode: host # TODO replace this once postgres has been dockerized + # ports: + # - "4568:3000" + healthcheck: + test: | + wget -qO- http://localhost:${PORT}/_health | grep -q OK \ + && wget -qO- https://hc-ping.com/{{ secret_healthchecks_io.ping_key }}/outline \ + || exit 1 + interval: 5m + start_period: 30s + start_interval: 10s volumes: - storage-data:/var/lib/outline/data # depends_on: diff --git a/ansible/roles/outline/vars/main.yml b/ansible/roles/outline/vars/main.yml index d210b456..e644ffbb 100644 --- a/ansible/roles/outline/vars/main.yml +++ b/ansible/roles/outline/vars/main.yml @@ -2,4 +2,4 @@ outline_config: project_source: "/var/www/outline/outline" - version: "0.78.0" + version: "0.79.0" # Git tag