From 8c0925f4643d32ee4cb81c5f55de554ce3eaf399 Mon Sep 17 00:00:00 2001 From: Karmaa Date: Sun, 16 Mar 2025 21:22:31 -0500 Subject: [PATCH] Optimize github build workflow --- docker/Dockerfile | 21 +++++++++++++++++---- docker/entrypoint.sh | 17 ++++++++++++++--- docker/supervisord.conf | 11 +++++++++-- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 1a662eb0..b9d3b074 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -15,12 +15,25 @@ RUN npm ci --only=production COPY src/backend/ ./src/backend/ # Stage 3: Build bcrypt for the target platform -FROM node:18-alpine AS bcrypt-builder +FROM ubuntu:focal AS bcrypt-builder +ENV DEBIAN_FRONTEND=noninteractive \ + NODE_VERSION=18.x WORKDIR /app COPY package*.json ./ -RUN apk add --no-cache python3 make g++ \ - && npm ci --only=production bcrypt \ - && rm -rf /root/.npm +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + python3 \ + make \ + g++ \ + wget \ + ca-certificates \ + gnupg && \ + wget -qO- https://deb.nodesource.com/setup_${NODE_VERSION} | bash - && \ + apt-get update && \ + apt-get install -y nodejs && \ + npm ci --only=production bcrypt && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /var/cache/apt/* /root/.npm /tmp/* # Stage 4: Final production image FROM ubuntu:focal AS base diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index fb7ff5d1..5785479f 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,11 +1,22 @@ #!/bin/bash -set -e +set -ex # Create required directories -mkdir -p /var/run/mongodb /data/db /var/log/{mongodb,supervisor,nginx} /var/lib/nginx +mkdir -p /var/run/{mongodb,supervisor} /data/db /var/log/{mongodb,supervisor,nginx} /var/lib/nginx chown -R mongodb:mongodb /var/run/mongodb /data/db /var/log/mongodb -chown -R www-data:www-data /var/log/nginx /var/lib/nginx +chown -R www-data:www-data /var/log/nginx /var/lib/nginx /usr/share/nginx/html chown -R node:node /app +# Ensure MongoDB data directory has correct permissions +chmod 755 /data/db + +# Check if mongod is available +which mongod || echo "mongod not found in PATH: $PATH" + +# Start supervisor with proper environment +export NODE_ENV=production +export MONGO_URL=mongodb://localhost:27017/termix +export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + # Start all services using supervisor exec /usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf \ No newline at end of file diff --git a/docker/supervisord.conf b/docker/supervisord.conf index 8df8d70f..1f9c2e1f 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -5,7 +5,7 @@ logfile=/var/log/supervisor/supervisord.log pidfile=/var/run/supervisord.pid [program:mongodb] -command=/usr/bin/mongod --dbpath /data/db --logpath /var/log/mongodb/mongodb.log +command=/usr/bin/mongod --dbpath /data/db --logpath /var/log/mongodb/mongodb.log --bind_ip 0.0.0.0 user=mongodb autostart=true autorestart=true @@ -13,6 +13,7 @@ startsecs=10 startretries=3 stdout_logfile=/var/log/supervisor/mongodb.stdout.log stderr_logfile=/var/log/supervisor/mongodb.stderr.log +priority=1 [program:nginx] command=/usr/sbin/nginx -g "daemon off;" @@ -23,25 +24,31 @@ startsecs=5 startretries=3 stdout_logfile=/var/log/supervisor/nginx.stdout.log stderr_logfile=/var/log/supervisor/nginx.stderr.log +priority=100 [program:ssh-service] command=/usr/bin/node /app/src/backend/ssh.cjs user=node directory=/app +environment=NODE_ENV="production",PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" autostart=true autorestart=true startsecs=10 startretries=3 stdout_logfile=/var/log/supervisor/ssh.stdout.log stderr_logfile=/var/log/supervisor/ssh.stderr.log +priority=200 [program:database-service] command=/usr/bin/node /app/src/backend/database.cjs user=node directory=/app +environment=NODE_ENV="production",MONGO_URL="mongodb://localhost:27017/termix",PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" autostart=true autorestart=true startsecs=10 startretries=3 stdout_logfile=/var/log/supervisor/database.stdout.log -stderr_logfile=/var/log/supervisor/database.stderr.log \ No newline at end of file +stderr_logfile=/var/log/supervisor/database.stderr.log +depends_on=mongodb +priority=300 \ No newline at end of file