From 0b66b23f161d1a888742e40d70e7e47f03df229b Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Tue, 28 Jan 2025 23:34:48 -0300 Subject: [PATCH] docker: add single-container support --- docker-compose.dev.yml | 22 ++++++------- docker/dev/django/Dockerfile | 10 ++++-- docker/dev/supervisord/start | 9 ++++++ docker/dev/supervisord/supervisord.conf | 39 +++++++++++++++++++++++ docker/prod/django/Dockerfile | 9 ++++-- docker/prod/supervisord/start | 9 ++++++ docker/prod/supervisord/supervisord.conf | 40 ++++++++++++++++++++++++ 7 files changed, 123 insertions(+), 15 deletions(-) create mode 100644 docker/dev/supervisord/start create mode 100644 docker/dev/supervisord/supervisord.conf create mode 100644 docker/prod/supervisord/start create mode 100644 docker/prod/supervisord/supervisord.conf diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 133d522..d632e4f 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -3,13 +3,13 @@ volumes: wygiwyh_temp: services: - web: &django + web: build: context: . dockerfile: ./docker/dev/django/Dockerfile image: wygiwyh_dev_server container_name: wygiwyh_dev_server - command: /start + command: /start-supervisor volumes: - ./app/:/usr/src/app/:z - ./frontend/:/usr/src/frontend:z @@ -54,12 +54,12 @@ services: - '${SQL_PORT}:5432' restart: unless-stopped - procrastinate: - <<: *django - image: wygiwyh_dev_procrastinate - container_name: wygiwyh_dev_procrastinate - depends_on: - - db - ports: [ ] - command: /start-procrastinate - restart: unless-stopped +# procrastinate: +# <<: *django +# image: wygiwyh_dev_procrastinate +# container_name: wygiwyh_dev_procrastinate +# depends_on: +# - db +# ports: [ ] +# command: /start-procrastinate +# restart: unless-stopped diff --git a/docker/dev/django/Dockerfile b/docker/dev/django/Dockerfile index c215782..920ca66 100644 --- a/docker/dev/django/Dockerfile +++ b/docker/dev/django/Dockerfile @@ -18,7 +18,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ COPY --from=python-build-stage /usr/src/app/wheels /wheels/ RUN apt-get update && \ - apt-get install --no-install-recommends -y gettext && \ + apt-get install --no-install-recommends -y gettext supervisor && \ rm -rf /var/lib/apt/lists/* && \ pip install --upgrade pip && \ pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* && \ @@ -26,9 +26,15 @@ RUN apt-get update && \ COPY ./docker/dev/django/start /start COPY ./docker/dev/procrastinate/start /start-procrastinate +COPY ./docker/dev/supervisord/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY ./docker/dev/supervisord/supervisord.conf /etc/supervisord.conf +COPY ./docker/dev/supervisord/start /start-supervisor + RUN sed -i 's/\r$//g' /start && \ chmod +x /start && \ sed -i 's/\r$//g' /start-procrastinate && \ - chmod +x /start-procrastinate + chmod +x /start-procrastinate && \ + sed -i 's/\r$//g' /start-supervisor && \ + chmod +x /start-supervisor COPY ./app . diff --git a/docker/dev/supervisord/start b/docker/dev/supervisord/start new file mode 100644 index 0000000..cad0431 --- /dev/null +++ b/docker/dev/supervisord/start @@ -0,0 +1,9 @@ +#!/bin/bash + +set -o errexit +set -o pipefail +set -o nounset + +export TASK_WORKERS=${TASK_WORKERS:=1} + +exec supervisord -c /etc/supervisor/conf.d/supervisord.conf diff --git a/docker/dev/supervisord/supervisord.conf b/docker/dev/supervisord/supervisord.conf new file mode 100644 index 0000000..85112ff --- /dev/null +++ b/docker/dev/supervisord/supervisord.conf @@ -0,0 +1,39 @@ +[supervisord] +nodaemon=true +logfile=/dev/null +logfile_maxbytes=0 +pidfile=/tmp/supervisord.pid +user=root + +[supervisorctl] +serverurl=unix:///run/supervisord.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[unix_http_server] +file=/run/supervisord.sock +chmod=0700 + +[program:web] +directory=/usr/src/app +command=/bin/bash /start +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/fd/2 +stderr_logfile_maxbytes=0 +autorestart=true +startretries=5 + +[program:procrastinate] +directory=/usr/src/app +command=/bin/bash /start-procrastinate +process_name=%(program_name)s_%(process_num)02d +numprocs=%(ENV_TASK_WORKERS)s +numprocs_start=1 +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/fd/2 +stderr_logfile_maxbytes=0 +autorestart=true +startretries=5 diff --git a/docker/prod/django/Dockerfile b/docker/prod/django/Dockerfile index 2615701..0920195 100644 --- a/docker/prod/django/Dockerfile +++ b/docker/prod/django/Dockerfile @@ -31,7 +31,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ COPY --from=python-build-stage /usr/src/app/wheels /wheels/ RUN --mount=type=cache,target=/root/.cache/apt \ apt-get update && \ - apt-get install --no-install-recommends -y gettext && \ + apt-get install --no-install-recommends -y gettext supervisor && \ rm -rf /var/lib/apt/lists/* && \ pip install --upgrade pip && \ pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* && \ @@ -39,10 +39,15 @@ RUN --mount=type=cache,target=/root/.cache/apt \ COPY --chown=app:app ./docker/prod/django/start /start COPY --chown=app:app ./docker/prod/procrastinate/start /start-procrastinate +COPY --chown=app:app ./docker/prod/supervisord/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY --chown=app:app ./docker/prod/supervisord/supervisord.conf /etc/supervisord.conf +COPY --chown=app:app ./docker/prod/supervisord/start /start-supervisor RUN sed -i 's/\r$//g' /start && \ chmod +x /start && \ sed -i 's/\r$//g' /start-procrastinate && \ - chmod +x /start-procrastinate + chmod +x /start-procrastinate && \ + sed -i 's/\r$//g' /start-supervisor && \ + chmod +x /start-supervisor COPY --chown=app:app ./app . diff --git a/docker/prod/supervisord/start b/docker/prod/supervisord/start new file mode 100644 index 0000000..cad0431 --- /dev/null +++ b/docker/prod/supervisord/start @@ -0,0 +1,9 @@ +#!/bin/bash + +set -o errexit +set -o pipefail +set -o nounset + +export TASK_WORKERS=${TASK_WORKERS:=1} + +exec supervisord -c /etc/supervisor/conf.d/supervisord.conf diff --git a/docker/prod/supervisord/supervisord.conf b/docker/prod/supervisord/supervisord.conf new file mode 100644 index 0000000..9ea3608 --- /dev/null +++ b/docker/prod/supervisord/supervisord.conf @@ -0,0 +1,40 @@ +[supervisord] +nodaemon=true +logfile=/dev/null +logfile_maxbytes=0 +pidfile=/tmp/supervisord.pid + +[supervisorctl] +serverurl=unix:///run/supervisord.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[unix_http_server] +file=/run/supervisord.sock +chmod=0700 + +[program:web] +user=app +directory=/usr/src/app +command=/bin/bash /start +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/fd/2 +stderr_logfile_maxbytes=0 +autorestart=true +startretries=5 + +[program:procrastinate] +user=app +directory=/usr/src/app +command=/bin/bash /start-procrastinate +process_name=%(program_name)s_%(process_num)02d +numprocs=%(ENV_TASK_WORKERS)s +numprocs_start=1 +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/fd/2 +stderr_logfile_maxbytes=0 +autorestart=true +startretries=5