# See https://hub.docker.com/r/nikolaik/python-nodejs # https://github.com/nikolaik/docker-python-nodejs # Default user is 'luminlab' with uid 1000, gid 1000 FROM nikolaik/python-nodejs:python3.10-nodejs18 # Install nginx and give permissions to 'luminlab' # See https://www.rockyourcode.com/run-docker-nginx-as-non-root-user/ USER root RUN apt-get -y update && apt-get -y install nginx RUN mkdir -p /var/cache/nginx \ /var/log/nginx \ /var/lib/nginx RUN touch /var/run/nginx.pid # Set up a new user named "luminlab" with user ID 1000 RUN useradd -m -u 1000 luminlab &&\ groupadd luminlab &&\ usermod -aG luminlab luminlab # # Set home to the user's home directory # ENV HOME=/home/luminlab \ # PATH=/home/luminlab/.local/bin:$PATH # # Set the working directory to the user's home directory # WORKDIR $HOME/app RUN chown -R luminlab:luminlab /var/cache/nginx \ /var/log/nginx \ /var/lib/nginx \ /var/run/nginx.pid # syntax=docker/dockerfile:1.4 ENV HOME=/home/luminlab \ PATH=/home/luminlab/.local/bin:$PATH RUN mkdir $HOME/app # 1. For build React app FROM node:lts AS build # Set working directory WORKDIR /app # COPY --chown=luminlab:luminlab package.json /app/package.json COPY --chown=luminlab:luminlab package-lock.json /app/package-lock.json # Same as npm install RUN npm ci COPY --chown=luminlab:luminlab . . ENV CI=true ENV PORT=3000 # CMD [ "npm", "start" ] # FROM development AS build # RUN npm run build # Install dependencies and build app as non-root # USER luminlab # ENV HOME=/home/luminlab \ # PATH=/home/luminlab/.local/bin:$PATH # RUN mkdir $HOME/app # WORKDIR $HOME/app # COPY --chown=pn requirements.txt requirements.txt # RUN pip install --no-cache-dir -r requirements.txt # # Copy nginx configuration # COPY --chown=luminlab nginx.conf /etc/nginx/sites-available/default # COPY --chown=luminlab . . # 2. For Nginx setup FROM nginx:alpine AS prod # Copy config nginx COPY --chown=luminlab:luminlab --from=build /app/.nginx/nginx.conf /etc/nginx/conf.d/default.conf # Remove default nginx static assets # RUN rm -rf ./* # WORKDIR /usr/share/nginx/html WORKDIR $HOME # Copy static assets from builder stage COPY --chown=luminlab:luminlab --from=build /app ./app USER luminlab:luminlab # Switch to the "user" user # ENTRYPOINT ["sh", "run_hf.sh"] ENTRYPOINT ["nginx", "-g", "daemon off;"]