From 121b7775c0b1fc5497d5344f8143208402dd1398 Mon Sep 17 00:00:00 2001 From: Karmaa Date: Tue, 11 Mar 2025 22:58:11 -0500 Subject: [PATCH] Changes to Dockerfile to fix error in installing MongoDB --- docker/Dockerfile | 67 ++++++++++++++------------------------------ docker/entrypoint.sh | 6 ++-- 2 files changed, 24 insertions(+), 49 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index a288f231..e1d65bf9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -13,65 +13,40 @@ COPY package*.json ./ RUN npm install COPY src/backend/ ./src/backend/ -# Stage 3: Install MongoDB on Debian-based image -FROM debian:bullseye AS mongodb-builder - -# Install dependencies and MongoDB -RUN apt-get update && apt-get install -y \ - wget \ - gnupg \ - ca-certificates \ - lsb-release \ - sudo && \ - wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add - && \ - # Dynamically set the architecture and MongoDB version - ARCH=$(uname -m) && \ - if [ "$ARCH" = "x86_64" ]; then \ - echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/debian $(lsb_release -c | awk '{print $2}')/mongodb-org/5.0 main" > /etc/apt/sources.list.d/mongodb-org-5.0.list; \ - elif [ "$ARCH" = "aarch64" ]; then \ - echo "deb [ arch=arm64 ] https://repo.mongodb.org/apt/debian $(lsb_release -c | awk '{print $2}')/mongodb-org/5.0 main" > /etc/apt/sources.list.d/mongodb-org-5.0.list; \ - else \ - echo "Unsupported architecture $ARCH"; \ - exit 1; \ - fi && \ - apt-get update && apt-get install -y mongodb-org && \ - rm -rf /var/lib/apt/lists/* - -# Stage 4: Final production image +# Stage 3: Final production image FROM node:18-alpine -# Install Nginx and required packages -RUN apk add --no-cache nginx bash +# Install dependencies +RUN apk add --no-cache \ + wget \ + bash \ + curl \ + ca-certificates \ + gnupg \ + bash \ + libcurl \ + && update-ca-certificates -# Create mongodb user and group in the final image -RUN addgroup -g 1001 mongodb && adduser -D -u 1001 -G mongodb mongodb - -# Install MongoDB binaries from mongodb-builder -COPY --from=mongodb-builder /usr/bin/mongod /usr/bin/mongod -COPY --from=mongodb-builder /usr/bin/mongo /usr/bin/mongo +# Install MongoDB manually +RUN wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-5.0.7.tgz -O /tmp/mongodb.tgz \ + && tar -xvzf /tmp/mongodb.tgz -C /usr/local \ + && rm /tmp/mongodb.tgz \ + && ln -s /usr/local/mongodb-linux-x86_64-5.0.7/bin/* /usr/local/bin/ \ + && mkdir -p /data/db /var/log/mongodb \ + && chown -R mongodb:mongodb /data/db /var/log/mongodb # Configure nginx COPY docker/nginx.conf /etc/nginx/nginx.conf COPY --from=frontend-builder /app/dist /usr/share/nginx/html -# Copy backend code +# Copy backend COPY --from=backend-builder /app/node_modules ./node_modules COPY --from=backend-builder /app/src/backend ./src/backend -# Set permissions and prepare directories for MongoDB -ENV MONGO_DATA_DIR=/data/db -RUN mkdir -p $MONGO_DATA_DIR && \ - chown -R mongodb:mongodb $MONGO_DATA_DIR - # Expose necessary ports -EXPOSE 8080 8081 8082 27017 +EXPOSE 8080 8081 27017 -# Use an entrypoint script to start services (MongoDB, Nginx, and Node backend) +# Use an entrypoint script to run services (nginx, MongoDB, Node backend) COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh - -# Switch to a non-root user for security -USER mongodb - -# Default command to start the services CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 6f38b7ca..89cc8aec 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -2,7 +2,7 @@ # Start MongoDB in the background echo "Starting MongoDB..." -mongod --fork --logpath /var/log/mongodb.log --bind_ip 0.0.0.0 --dbpath /data/db +mongod --fork --logpath /var/log/mongodb/mongod.log --bind_ip 0.0.0.0 --dbpath /data/db # Wait for MongoDB to fully start (you can adjust the sleep if needed) sleep 5 @@ -13,8 +13,8 @@ nginx -g "daemon off;" & # Start Node.js backend (adjust as needed for your backend setup) echo "Starting Node.js backend..." -node /app/src/backend/ssh.cjs & -node /app/src/backend/database.cjs & +node /usr/app/src/backend/ssh.cjs & +node /usr/app/src/backend/database.cjs & # Keep the container running wait \ No newline at end of file