# The first instruction is what image we want to base our container on # We Use an official Python runtime as a parent image FROM python:3.9-bullseye # The enviroment variable ensures that the python output is set straight # to the terminal with out buffering it first ENV PYTHONUNBUFFERED 1 ENV DEBIAN_FRONTEND noninteractive # Not forcing anybody's hand here, just a bunch of packages that could become useful soon RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y nginx supervisor sqlite3 mariadb-client rsync RUN pip3 install -U pip setuptools RUN rm -rf /var/lib/apt/lists/* RUN pip install --upgrade pip # Set the working directory to /OACCT_checker WORKDIR /oacct_checker #RUN chown 1001 /oacct_checker # Copy the current directory contents into the container at /OACCT_checker ADD . /oacct_checker/ # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt # install Node.JS ansd NPM RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - RUN apt-get install -y nodejs # frontend with node js RUN /usr/bin/npm install -g npm@9.2.0 RUN npm install # COPY . /oacct_checker/ #RUN chown -R 1001 /oacct_checker #RUN find /oacct_checker -path "*/node_modules/*" ! -path "*/node_modules" -exec chown 1001:0 {} \; RUN chown 1001:0 /oacct_checker RUN chown -R 1001:0 /oacct_checker/static/ /oacct_checker/reactDoc/styleguide # Permissions as per https://docs.openshift.com/container-platform/3.11/creating_images/guidelines.html#openshift-specific-guidelines #RUN chgrp -R 0 /oacct_checker && \ # chmod -R g=u /oacct_checker #RUN find /oacct_checker ! -path "*/node_modules/*" ! -path "*/node_modules" -exec chmod g=u {} \; RUN chmod g=u /oacct_checker RUN chmod -R g=u /oacct_checker/static/ /oacct_checker/reactDoc/styleguide # install uwsgi now because it takes a little while RUN pip3 install uwsgi # setup all the configfiles COPY conf/supervisord.conf /etc/supervisor/supervisord.conf RUN echo "daemon off;" >> /etc/nginx/nginx.conf COPY conf/nginx-app.conf /etc/nginx/sites-available/default COPY conf/supervisor-app.conf /etc/supervisor/conf.d/ # not really necessary on OpenShift but doesn't hurt COPY conf/ssl/nginx-selfsigned.key /etc/ssl/private/ COPY conf/ssl/nginx-selfsigned.crt /etc/ssl/certs/ COPY conf/ssl/dhparam.pem /etc/ssl/certs/ COPY conf/ssl/self-signed.conf /etc/nginx/snippets COPY conf/ssl/ssl-params.conf /etc/nginx/snippets # Adjust permissions to allow supervisord & nginx logs on Openshift RUN chmod -R a+w /var/log/ RUN chmod -R a+w /var/run/ RUN chmod a+w /var/lib/nginx/ RUN chmod a+rx /etc/ssl/private/ # comment user directive as master process is run as user in OpenShift anyhow RUN sed -i.bak 's/^user/#user/' /etc/nginx/nginx.conf RUN sed -i.bak 's/access_log \/var/#access_log \/var/' /etc/nginx/nginx.conf RUN sed -i.bak 's/error_log \/var/#error_log \/var/' /etc/nginx/nginx.conf # Redirect nginx logs to stdout and stderr to make them accessible on OpenShift #RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log RUN touch /var/log/nginx/access.log /var/log/nginx/error.log RUN chmod a+r /var/log/nginx/access.log /var/log/nginx/error.log RUN touch /var/log/wsgi.log /var/log/wsgi2.log RUN chmod a+rw /var/log/wsgi.log /var/log/wsgi2.log # build app for production RUN npm run build # build styleguide documentation RUN npm run styleguide:build # build Sphinx documentation (just in case...) WORKDIR /oacct_checker/sphinx RUN make html WORKDIR /oacct_checker # Collect static files RUN python manage.py collectstatic --no-input #User at the end to avoid access error during building process USER 1001 #CMD /bin/bash -c 'python3 manage.py runserver 0.0.0.0:8080' CMD supervisord -n -c /etc/supervisor/supervisord.conf # CMD /bin/bash -c 'python3 manage.py collectstatic --noinput && python3 manage.py runserver 0.0.0.0:8080' # test with static files # PermissionError: [Errno 13] Permission denied: '/oacct_checker/staticfiles' # 15.03.2021 new error PermissionError: [Errno 1] Operation not permitted # CMD /bin/bash -c 'python3 manage.py collectstatic --noinput && python3 manage.py runserver 0.0.0.0:8080' #test with npm run build --> npm not found