From 79b85353049d37bb9519e63896ff782b683606af Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 2 Dec 2025 12:58:08 +0100 Subject: [PATCH] chore: plug in minio storage --- Dockerfile | 7 ++++++- docker-compose.yml | 24 ++++++++++++++++++++++++ docker-entrypoint.sh | 15 +++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100755 docker-entrypoint.sh diff --git a/Dockerfile b/Dockerfile index 4cb2fff..be38966 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM node:20-alpine AS base # Install dependencies only when needed FROM base AS deps -RUN apk add --no-cache libc6-compat +RUN apk add --no-cache libc6-compat wget WORKDIR /app # Install pnpm @@ -45,6 +45,10 @@ COPY --from=builder /app/public ./public RUN mkdir .next RUN chown nextjs:nodejs .next +# Copy entrypoint script +COPY --from=builder --chown=nextjs:nodejs /app/docker-entrypoint.sh ./docker-entrypoint.sh +RUN chmod +x ./docker-entrypoint.sh + # Automatically leverage output traces to reduce image size COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static @@ -56,4 +60,5 @@ EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" +ENTRYPOINT ["./docker-entrypoint.sh"] CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml index a183f75..d391350 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,6 +42,22 @@ services: timeout: 5s retries: 5 + minio-setup: + image: minio/mc:latest + container_name: meal-planner-minio-setup + depends_on: + minio: + condition: service_healthy + entrypoint: > + /bin/sh -c " + mc alias set myminio http://minio:9000 minioadmin minioadmin; + mc mb myminio/meal-planner --ignore-existing; + mc anonymous set download myminio/meal-planner; + echo 'MinIO bucket setup complete'; + " + networks: + - meal-planner-network + app: build: context: . @@ -54,6 +70,12 @@ services: PAYLOAD_PUBLIC_SERVER_URL: http://localhost:3100 SEED_DB: "true" NODE_ENV: production + # MinIO/S3 configuration + MINIO_ENDPOINT: http://minio:9000 + S3_BUCKET: meal-planner + S3_REGION: us-east-1 + S3_ACCESS_KEY_ID: minioadmin + S3_SECRET_ACCESS_KEY: minioadmin ports: - "3100:3000" depends_on: @@ -61,6 +83,8 @@ services: condition: service_healthy minio: condition: service_healthy + minio-setup: + condition: service_completed_successfully networks: - meal-planner-network diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..c69dcac --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -e + +# Wait for MinIO to be ready +if [ -n "$MINIO_ENDPOINT" ]; then + echo "Waiting for MinIO to be ready..." + until wget -q --spider "$MINIO_ENDPOINT/minio/health/live" 2>/dev/null; do + echo "MinIO is unavailable - sleeping" + sleep 2 + done + echo "MinIO is up" +fi + +# Start the application +exec "$@"