From 3e4aa11b84dc5b76f3084cff25476af6d015f31f Mon Sep 17 00:00:00 2001 From: delgado-jacob <29643013+delgado-jacob@users.noreply.github.com> Date: Mon, 22 Dec 2025 13:01:21 -0700 Subject: [PATCH 1/2] chore: add localstack S3 to docker compose --- compose.yaml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/compose.yaml b/compose.yaml index bf03b514..4ca61096 100644 --- a/compose.yaml +++ b/compose.yaml @@ -9,6 +9,11 @@ services: DATABASE_URL: postgresql://postgres:asdfasdf@db:5432/postgres TEST_DATABASE_URL: postgresql://postgres:asdfasdf@test_db:5432/postgres JOB_FUNCTION_URL: http://job_worker:8080/2015-03-31/functions/function/invocations + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: test + AWS_SECRET_ACCESS_KEY: test + AWS_ENDPOINT_URL_S3: http://localstack:4566 + AWS_S3_FORCE_PATH_STYLE: "true" volumes: - ./:/app - server-node-modules:/app/node_modules @@ -17,6 +22,8 @@ services: depends_on: db: condition: service_healthy + localstack: + condition: service_healthy job_worker: build: context: . @@ -25,6 +32,12 @@ services: restart: always environment: DATABASE_URL: postgresql://postgres:asdfasdf@db:5432/postgres + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: test + AWS_SECRET_ACCESS_KEY: test + AWS_ENDPOINT_URL_S3: http://localstack:4566 + AWS_S3_FORCE_PATH_STYLE: "true" + EXPORT_PUBLIC_S3_ENDPOINT: http://localhost:4566 volumes: - ./:/app - job-worker-node-modules:/app/node_modules @@ -33,9 +46,44 @@ services: depends_on: db: condition: service_healthy + localstack: + condition: service_healthy env_file: - path: .env required: false + localstack: + image: localstack/localstack:latest + environment: + - SERVICES=s3 + - DEFAULT_REGION=us-east-1 + - LS_LOG=warn + ports: + - 4566:4566 + healthcheck: + test: ["CMD", "bash", "-c", "awslocal s3 ls >/dev/null 2>&1"] + interval: 10s + timeout: 5s + retries: 5 + + localstack-init: + image: amazon/aws-cli:2.32.11 + depends_on: + localstack: + condition: service_healthy + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: test + AWS_SECRET_ACCESS_KEY: test + entrypoint: ["/bin/sh", "-c"] + command: + - > + until aws --endpoint-url http://localstack:4566 s3api list-buckets >/dev/null 2>&1; do + echo "Waiting for localstack S3..."; + sleep 2; + done; + aws --endpoint-url http://localstack:4566 s3 mb s3://gbt-exports-local >/dev/null 2>&1 || true; + echo "Localstack S3 bucket ready"; + restart: "no" db: build: dockerfile: db/Dockerfile From 7d03ffd4b137b761aa5771270490f47d013e758c Mon Sep 17 00:00:00 2001 From: delgado-jacob <29643013+delgado-jacob@users.noreply.github.com> Date: Sat, 17 Jan 2026 09:30:26 -0700 Subject: [PATCH 2/2] fix: persist localstack data and init bucket --- .gitignore | 3 +++ compose.yaml | 25 ++++--------------------- localstack/init/ready.d/init.sh | 11 +++++++++++ 3 files changed, 18 insertions(+), 21 deletions(-) create mode 100755 localstack/init/ready.d/init.sh diff --git a/.gitignore b/.gitignore index 52b390f5..82c36cbe 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,6 @@ next-env.d.ts dist/ diagram.txt + +# localstack +localstack/data/ diff --git a/compose.yaml b/compose.yaml index 4ca61096..f9da6cbb 100644 --- a/compose.yaml +++ b/compose.yaml @@ -52,11 +52,14 @@ services: - path: .env required: false localstack: - image: localstack/localstack:latest + image: localstack/localstack:4 environment: - SERVICES=s3 - DEFAULT_REGION=us-east-1 - LS_LOG=warn + volumes: + - ./localstack/data:/var/lib/localstack + - ./localstack/init:/etc/localstack/init ports: - 4566:4566 healthcheck: @@ -64,26 +67,6 @@ services: interval: 10s timeout: 5s retries: 5 - - localstack-init: - image: amazon/aws-cli:2.32.11 - depends_on: - localstack: - condition: service_healthy - environment: - AWS_REGION: us-east-1 - AWS_ACCESS_KEY_ID: test - AWS_SECRET_ACCESS_KEY: test - entrypoint: ["/bin/sh", "-c"] - command: - - > - until aws --endpoint-url http://localstack:4566 s3api list-buckets >/dev/null 2>&1; do - echo "Waiting for localstack S3..."; - sleep 2; - done; - aws --endpoint-url http://localstack:4566 s3 mb s3://gbt-exports-local >/dev/null 2>&1 || true; - echo "Localstack S3 bucket ready"; - restart: "no" db: build: dockerfile: db/Dockerfile diff --git a/localstack/init/ready.d/init.sh b/localstack/init/ready.d/init.sh new file mode 100755 index 00000000..14097702 --- /dev/null +++ b/localstack/init/ready.d/init.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eu + +bucket_prefix="${EXPORT_BUCKET_PREFIX:-gbt-exports}" +bucket_name="${bucket_prefix}-local" + +if ! awslocal s3api head-bucket --bucket "$bucket_name" >/dev/null 2>&1; then + awslocal s3 mb "s3://${bucket_name}" >/dev/null +fi + +echo "Localstack S3 bucket ready: ${bucket_name}"