diff --git a/.envrc.sample b/.envrc.sample index 2f1488c..86797f7 100644 --- a/.envrc.sample +++ b/.envrc.sample @@ -32,6 +32,9 @@ export SHARED_LISTS_USER=biobulkbende export DB_PASSWORD_VERSION=v1 export DB_ROOT_PASSWD_VERSION=v1 export SHARED_LISTS_DB_PASSWD_VERSION=v1 +export SMTP_PASSWD_VERSION=v1 +export SECRET_KEY_BASE_VERSION=v1 export APP_CONFIG_VERSION=v1 export DB_CONFIG_VERSION=v1 +export ENTRYPOINT_VERSION=v1 diff --git a/compose.yml b/compose.yml index c913c7a..ca0c955 100644 --- a/compose.yml +++ b/compose.yml @@ -15,6 +15,10 @@ services: target: /usr/src/app/config/app_config.yml - source: db_config target: /usr/src/app/config/database.yml + - source: entrypoint + target: /usr/src/app/docker-entrypoint.sh + mode: 0555 + entrypoint: /usr/src/app/docker-entrypoint.sh environment: - DOMAIN - EMAIL_ERROR @@ -35,10 +39,20 @@ services: - MYSQL_NAME=foodsoft - MYSQL_PORT=3306 - MYSQL_USER=foodsoft + - QUEUE=foodsoft_notifier + - REDIS_URL=redis://redis:6379 + - SECRET_KEY_BASE_FILE=/var/run/secrets/secret_key_base - SHARED_LISTS_DB_NAME - SHARED_LISTS_DB_TYPE - SHARED_LISTS_HOST - SHARED_LISTS_USER + - SMTP_PASSWORD_FILE=/var/run/secrets/smtp_passwd + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000"] + interval: 15s + timeout: 10s + retries: 10 + start_period: 1m deploy: update_config: failure_action: rollback @@ -99,6 +113,10 @@ configs: name: ${STACK_NAME}_db_config_${DB_CONFIG_VERSION} file: database.yml.tmpl template_driver: golang + entrypoint: + name: ${STACK_NAME}_entrypoint_${ENTRYPOINT_VERSION} + file: entrypoint.yml.tmpl + template_driver: golang secrets: db_passwd: @@ -110,3 +128,9 @@ secrets: shared_lists_db_passwd: name: ${STACK_NAME}_shared_lists_db_passwd_${SHARED_LISTS_DB_PASSWD_VERSION} external: true + smtp_passwd: + name: ${STACK_NAME}_smtp_password_${SMTP_PASSWD_VERSION} + external: true + secret_key_base: + name: ${STACK_NAME}_secret_key_base_${SECRET_KEY_BASE_VERSION} + external: true diff --git a/entrypoint.sh.tmpl b/entrypoint.sh.tmpl new file mode 100644 index 0000000..1fee611 --- /dev/null +++ b/entrypoint.sh.tmpl @@ -0,0 +1,44 @@ +#!/bin/bash + +# Modified version of https://github.com/foodcoops/foodsoft/blob/master/docker-entrypoint.sh + +file_env() { + local var="$1" + local fileVar="${var}_FILE" + local def="${2:-}" + + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" + exit 1 + fi + + local val="$def" + if [ "${!var:-}" ]; then + val="${!var}" elif [ "${!fileVar:-}" ]; then + val="$(< "${!fileVar}")" + fi + + export "$var"="$val" + unset "$fileVar" +} + +load_vars() { + file_env "SECRET_KEY_BASE" + file_env "SMTP_PASSWORD" +} + +reuse() { + if [ -f tmp/pids/server.pid ]; then + rm tmp/pids/server.pid + fi +} + +main() { + set -eu + + reuse + load_vars + exec "$@" +} + +main