From 4679adf04a4ed7612b9e2b9399ee9aea8ea8b6de Mon Sep 17 00:00:00 2001 From: dal Date: Tue, 7 Jan 2025 16:20:59 -0700 Subject: [PATCH] Refactor Docker Compose and API configuration for improved service management - Consolidated Redis service into the main `docker-compose.yml`, removing the separate API Docker Compose file. - Added health checks for Redis and API services to ensure proper service readiness. - Updated API router to include a public health check endpoint. - Cleaned up the web Dockerfile by removing unnecessary environment variable copying. These changes enhance service orchestration and improve the reliability of the application during development. --- api/docker-compose.yml | 8 -------- api/src/main.rs | 3 ++- docker-compose.yml | 41 ++++++++++++++++++++++++++--------------- start.sh | 15 +++++++++++++++ web/Dockerfile | 5 ----- 5 files changed, 43 insertions(+), 29 deletions(-) delete mode 100644 api/docker-compose.yml create mode 100644 start.sh diff --git a/api/docker-compose.yml b/api/docker-compose.yml deleted file mode 100644 index 9a655abf9..000000000 --- a/api/docker-compose.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: '3.8' - -services: - redis: - image: redis - container_name: buster-redis - ports: - - "6379:6379" \ No newline at end of file diff --git a/api/src/main.rs b/api/src/main.rs index 852e9c0bc..de9324a62 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -47,13 +47,14 @@ async fn main() { } let protected_router = Router::new().nest("/api/v1", routes::protected_router()); + let public_router = Router::new().route("/health", axum::routing::get(|| async { "OK" })); let (shutdown_tx, _) = broadcast::channel::<()>(1); let shutdown_tx = Arc::new(shutdown_tx); let app = Router::new() .merge(protected_router) - // .merge(public_router) + .merge(public_router) .layer(TraceLayer::new_for_http()) .layer(cors()) .layer(CompressionLayer::new()) diff --git a/docker-compose.yml b/docker-compose.yml index c74392752..a5be2c11b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,30 +1,41 @@ +include: + - supabase/docker-compose.yml + services: - db: - image: supabase/postgres:15.1.0.117 - restart: always - environment: - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-your-super-secret-password} - POSTGRES_USER: ${POSTGRES_USER:-postgres} - POSTGRES_DB: ${POSTGRES_DB:-buster} - volumes: - - db_data:/var/lib/postgresql/data - - ./migrations:/docker-entrypoint-initdb.d + redis: + image: redis + container_name: buster-redis ports: - - "5432:5432" + - "6379:6379" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 1s + timeout: 3s + retries: 30 api: build: context: ./api dockerfile: Dockerfile + env_file: + - .env ports: - "3001:3001" - environment: - DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-your-super-secret-password}@db:5432/${POSTGRES_DB:-buster} + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3001/health"] + interval: 30s + timeout: 10s + retries: 3 depends_on: - - db - + redis: + condition: service_healthy + db: + condition: service_healthy + web: build: ./web + env_file: + - .env ports: - "3000:3000" environment: diff --git a/start.sh b/start.sh new file mode 100644 index 000000000..06023d123 --- /dev/null +++ b/start.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo "Starting Supabase..." +cd supabase +docker compose up -d + +echo "Waiting for Supabase to be healthy..." +until curl -s http://localhost:54321/rest/v1/ > /dev/null; do + echo "Waiting for Supabase..." + sleep 5 +done + +echo "Supabase is ready! Starting main services..." +cd .. +docker compose up \ No newline at end of file diff --git a/web/Dockerfile b/web/Dockerfile index b321eab81..24bd16662 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -6,11 +6,8 @@ WORKDIR /app # Copy package files COPY package*.json ./ -# Copy environment variables for build -COPY .env ./ COPY next.config.mjs ./ - # Install dependencies RUN npm ci @@ -34,8 +31,6 @@ COPY --from=builder /app/.next ./.next COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/next.config.mjs ./ -# Copy environment files -COPY --from=builder /app/.env ./ # Expose the port your app runs on EXPOSE 3000