FROM python:3.12-slim ARG puid=1000 ARG pgid=1000 ARG debug=false ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ LANG=C.UTF-8 \ LC_ALL=C.UTF-8 \ DEBUG=${debug} # setup user RUN groupadd -g ${pgid} -o custom_user && useradd -m -u ${puid} -g ${pgid} -o -s /bin/bash custom_user # setup system requirements RUN apt-get update && apt-get install -y \ gcc \ libjpeg-dev \ zlib1g-dev \ curl \ gnupg \ ca-certificates \ inotify-tools \ libmagic1 \ && mkdir -p /etc/apt/keyrings \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ && apt-get update && apt-get install nodejs -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && npm install -g yarn # setup node requirements WORKDIR /app/frontend COPY ./frontend/package.json ./package.json RUN yarn install RUN if [ "$debug" = "true" ] ; then \ echo "Mode dev, pas de build frontend" ; \ else \ yarn build ; \ fi RUN chown -R custom_user:custom_user /app/frontend/node_modules # setup python requirements WORKDIR /app COPY requirements/ requirements/ RUN if [ "$debug" = "true" ] ; then \ pip install --no-cache-dir -r requirements/dev.txt ; \ else \ pip install --no-cache-dir -r requirements/prod.txt ; \ fi COPY . . # collect static RUN if [ "$debug" = "true" ] ; then \ echo "Mode dev, pas de collectstatic" ; \ else \ python manage.py collectstatic --noinput ; \ fi USER custom_user # setup ipython RUN mkdir -p ~/.ipython/profile_default/ && echo "c.InteractiveShellApp.extensions = ['autoreload']\nc.InteractiveShellApp.exec_lines = ['%autoreload 2']" > ~/.ipython/profile_default/ipython_config.py HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 CMD \ pgrep hypercorn >/dev/null 2>&1 && curl -f http://127.0.0.1:8000/health/ || exit 0 EXPOSE 8000 # Utiliser Hypercorn pour lancer l'app ASGI CMD ["hypercorn", "monprojet.asgi:application", "--bind", "0.0.0.0:8000"]