From dd6e921e2e00950f19da5bd6d76769c89268d1bb Mon Sep 17 00:00:00 2001 From: ekzyis Date: Wed, 17 Apr 2024 20:46:18 +0200 Subject: [PATCH] Fix local env in docker-compose.yaml (#1085) * Allow docker env override via .env.local * Make .env.local optional * Fix env var expansion ignoring .env.local * Rename .env.development to .env.docker * Use YAML anchors * Revert rename of .env.development --- docker-compose.yml | 138 +++++++++++++++++---------------------------- sndev | 2 +- 2 files changed, 52 insertions(+), 88 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9a60f29d..bfa2136e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,38 @@ +x-env_file: &env_file + - .env.development + - path: .env.local + required: false +x-healthcheck: &healthcheck + interval: 10s + timeout: 10s + retries: 10 + start_period: 1m +x-depends-on-db: &depends_on_db + db: + condition: service_healthy + restart: true +x-depends-on-app: &depends_on_app + app: + condition: service_healthy + restart: true +x-depends-on-bitcoin: &depends_on_bitcoin + bitcoin: + condition: service_healthy + restart: true + services: db: container_name: db build: ./docker/db restart: unless-stopped healthcheck: + <<: *healthcheck test: ["CMD-SHELL", "PGPASSWORD=${POSTGRES_PASSWORD} pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} -h 127.0.0.1 && psql -U ${POSTGRES_USER} ${POSTGRES_DB} -c 'SELECT 1 FROM users LIMIT 1'"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m expose: - "5432" ports: - "5431:5432" - env_file: - - .env.development + env_file: *env_file volumes: - ./docker/db/seed.sql:/docker-entrypoint-initdb.d/seed.sql - db:/var/lib/postgresql/data @@ -29,17 +47,10 @@ services: - GID=${CURRENT_GID} restart: unless-stopped healthcheck: + <<: *healthcheck test: ["CMD", "curl", "-f", "http://localhost:3000"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m - depends_on: - db: - condition: service_healthy - restart: true - env_file: - - .env.development + depends_on: *depends_on_db + env_file: *env_file expose: - "3000" ports: @@ -53,19 +64,13 @@ services: build: context: ./capture restart: unless-stopped - depends_on: - app: - condition: service_healthy - restart: true + depends_on: *depends_on_app profiles: - capture healthcheck: + <<: *healthcheck test: ["CMD", "curl", "-f", "http://localhost:5678/health"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m - env_file: .env.development + env_file: *env_file environment: # configure to screenshot production, because local dev is too slow - CAPTURE_URL=http://stacker.news @@ -84,14 +89,10 @@ services: - GID=${CURRENT_GID} restart: unless-stopped depends_on: - db: - condition: service_healthy - restart: true - app: - condition: service_healthy - restart: true - env_file: - - .env.development + <<: + - *depends_on_db + - *depends_on_app + env_file: *env_file volumes: - ./:/app entrypoint: ["/bin/sh", "-c"] @@ -103,14 +104,10 @@ services: profiles: - images healthcheck: + <<: *healthcheck test: [ "CMD", "imgproxy", "health" ] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m restart: unless-stopped - env_file: - - .env.development + env_file: *env_file ports: - "3001:8080" expose: @@ -129,8 +126,7 @@ services: restart: unless-stopped profiles: - images - env_file: - - .env.development + env_file: *env_file environment: - DEBUG=1 ports: @@ -149,14 +145,10 @@ services: profiles: - search healthcheck: + <<: *healthcheck test: ["CMD-SHELL", "curl -ku admin:${OPENSEARCH_INITIAL_ADMIN_PASSWORD} --silent --fail localhost:9200/_cluster/health || exit 1"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m restart: unless-stopped - env_file: - - .env.development + env_file: *env_file environment: - OPENSEARCH_INITIAL_ADMIN_PASSWORD=mVchg1T5oA9wudUh ports: @@ -194,8 +186,7 @@ services: opensearch: condition: service_healthy restart: true - env_file: - - .env.development + env_file: *env_file environment: - opensearch.ssl.verificationMode=none - OPENSEARCH_HOSTS=http://opensearch:9200 @@ -213,11 +204,8 @@ services: profiles: - payments healthcheck: + <<: *healthcheck test: ["CMD-SHELL", "bitcoin-cli -chain=regtest -rpcport=${RPC_PORT} -rpcuser=${RPC_USER} -rpcpassword=${RPC_PASS} getblockchaininfo"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m command: - 'bitcoind' - '-server=1' @@ -275,17 +263,10 @@ services: profiles: - payments healthcheck: + <<: *healthcheck test: ["CMD-SHELL", "lncli", "getinfo"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m - depends_on: - bitcoin: - condition: service_healthy - restart: true - env_file: - - .env.development + depends_on: *depends_on_bitcoin + env_file: *env_file command: - 'lnd' - '--noseedbackup' @@ -339,17 +320,10 @@ services: profiles: - payments healthcheck: + <<: *healthcheck test: ["CMD-SHELL", "lncli", "getinfo"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m - depends_on: - bitcoin: - condition: service_healthy - restart: true - env_file: - - .env.development + depends_on: *depends_on_bitcoin + env_file: *env_file command: - 'lnd' - '--noseedbackup' @@ -401,17 +375,10 @@ services: profiles: - payments healthcheck: + <<: *healthcheck test: ["CMD-SHELL", "su clightning -c 'lightning-cli --network=regtest getinfo'"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m - depends_on: - bitcoin: - condition: service_healthy - restart: true - env_file: - - .env.development + depends_on: *depends_on_bitcoin + env_file: *env_file command: - 'lightningd' - '--network=regtest' @@ -462,11 +429,8 @@ services: - email restart: unless-stopped healthcheck: + <<: *healthcheck test: ["CMD", "wget", "-q", "--spider", "http://localhost:8025"] - interval: 10s - timeout: 10s - retries: 10 - start_period: 1m ports: - "8025:8025" - "1025:1025" diff --git a/sndev b/sndev index 20dd18b9..6f23bdc4 100755 --- a/sndev +++ b/sndev @@ -13,7 +13,7 @@ docker__compose() { COMPOSE_PROFILES="images,search,payments,email,capture" fi - CURRENT_UID=$(id -u) CURRENT_GID=$(id -g) COMPOSE_PROFILES=$COMPOSE_PROFILES command docker compose --env-file .env.development "$@" + CURRENT_UID=$(id -u) CURRENT_GID=$(id -g) COMPOSE_PROFILES=$COMPOSE_PROFILES command docker compose --env-file .env.development --env-file .env.local "$@" } docker__exec() {