From 2c2a667d81b07c5679cd4db3dca6ca9ac502e8b0 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Mon, 20 Feb 2023 16:11:15 +0100 Subject: [PATCH] Improve docker setup - add .dockerignore - add entrypoint.sh to switch to user after initial setup - downgrade importlib-metadata for Celery compatibility - add TZ environment variable for consistent Celery timestamps - fix Celery setting deprecation warnings --- .dockerignore | 17 +++++++++++++++++ Dockerfile | 8 +++----- entrypoint.sh | 5 +++++ gvaweb.sh | 9 +++++---- gvaweb/webtasks/settings.py | 28 ++++++++++++++-------------- poetry.lock | 10 +++++----- pyproject.toml | 1 + 7 files changed, 50 insertions(+), 28 deletions(-) create mode 100644 .dockerignore create mode 100755 entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ac1c6f1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +**/*.pyc +**/.*.swp +**/.coverage +**/__pycache__ +.dockerignore +.env +.envrc +.git +.gitignore +.idea +.vagrant +Dockerfile +Vagrantfile +change-vmdebootstrap-default-dhcp.sh +coverage-report +docs +salt diff --git a/Dockerfile b/Dockerfile index 728a697..65cdf55 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,10 +57,8 @@ RUN addgroup --gid $GVAGID $GVAAPP ; \ COPY --chown=$GVAAPP:$GVAAPP --from=builder /srv/$GVAAPP/.venv /srv/$GVAAPP/.venv -USER $GVAAPP +VOLUME /srv/$GVAAPP/$GVAAPP -VOLUME /srv/$GVAAPP +COPY ${GVAAPP}.sh entrypoint.sh /srv/ -COPY ${GVAAPP}.sh /srv/ - -ENTRYPOINT ["dumb-init", "/srv/${GVAAPP}.sh"] +ENTRYPOINT ["dumb-init", "/srv/entrypoint.sh"] diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..9f68e89 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +set -e + +su -c /srv/gvaweb.sh gvaweb diff --git a/gvaweb.sh b/gvaweb.sh index 645de81..248b197 100755 --- a/gvaweb.sh +++ b/gvaweb.sh @@ -2,10 +2,11 @@ set -e -QUEUE=web -TASKS=${QUEUE}tasks -APP=gvaweb +QUEUE="web" +TASKS="${QUEUE}tasks" +APP="gvaweb" +export TZ="Europe/Berlin" . "/srv/${APP}/.venv/bin/activate" cd /srv/${APP}/${APP} -celery -A "${TASKS}" worker -Q "${QUEUE}" -l info +celery -A "${TASKS}" worker -Q "${QUEUE}" -E -l info diff --git a/gvaweb/webtasks/settings.py b/gvaweb/webtasks/settings.py index 1398dc8..2693245 100644 --- a/gvaweb/webtasks/settings.py +++ b/gvaweb/webtasks/settings.py @@ -8,7 +8,7 @@ Common settings and globals. from os import environ -def get_env_setting(setting): +def get_env_variable(setting): """ Get the environment setting or return exception. @@ -25,20 +25,20 @@ def get_env_setting(setting): ########## CELERY CONFIGURATION -CELERY_TIMEZONE = "Europe/Berlin" -CELERY_ENABLE_UTC = True -CELERY_RESULT_PERSISTENT = True -CELERY_TASK_RESULT_EXPIRES = None -CELERY_ROUTES = ("gvacommon.celeryrouters.GvaRouter",) -CELERY_ACCEPT_CONTENT = ["json"] -CELERY_TASK_SERIALIZER = "json" -CELERY_RESULT_SERIALIZER = "json" -CELERY_RESULT_BACKEND = get_env_setting("GVAWEB_RESULTS_REDIS_URL") -CELERY_BROKER_URL = get_env_setting("GVAWEB_BROKER_URL") +accept_content = ["json"] +broker_url = get_env_variable("GVAWEB_BROKER_URL") +enable_utc = True +result_backend = get_env_variable("GVAWEB_RESULTS_REDIS_URL") +result_expires = None +result_persistent = True +result_serializer = "json" +task_routes = ("gvacommon.celeryrouters.GvaRouter",) +task_serializer = "json" +timezone = "Europe/Berlin" ########## END CELERY CONFIGURATION ########## GVAWEB CONFIGURATION -GVAWEB_NGINX_SITES_AVAILABLE = get_env_setting("GVAWEB_NGINX_SITES_AVAILABLE") -GVAWEB_NGINX_SITES_ENABLED = get_env_setting("GVAWEB_NGINX_SITES_ENABLED") -GVAWEB_WWWUSER_MOUNT = get_env_setting("GVAWEB_WWWUSER_MOUNT") +GVAWEB_NGINX_SITES_AVAILABLE = get_env_variable("GVAWEB_NGINX_SITES_AVAILABLE") +GVAWEB_NGINX_SITES_ENABLED = get_env_variable("GVAWEB_NGINX_SITES_ENABLED") +GVAWEB_WWWUSER_MOUNT = get_env_variable("GVAWEB_WWWUSER_MOUNT") ########## END GVAWEB CONFIGURATION diff --git a/poetry.lock b/poetry.lock index 4e9e504..c4a9d2c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -427,14 +427,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.0.0" +version = "4.13.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, + {file = "importlib_metadata-4.13.0-py3-none-any.whl", hash = "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116"}, + {file = "importlib_metadata-4.13.0.tar.gz", hash = "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d"}, ] [package.dependencies] @@ -442,7 +442,7 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] perf = ["ipython"] testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] @@ -910,4 +910,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "aa902af54805ba5de3d513ea51c1547e2214e9e2f61bd4531d97c1a6e49ec7fe" +content-hash = "e51c8b3c06496c032c17e4fd7fd38e81af64927a32b8f53f216d2d1af272ee21" diff --git a/pyproject.toml b/pyproject.toml index 5389380..6def9fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ amqp = "^5.1.1" Jinja2 = "^3.1.2" redis = "^4.5.1" pytz = "^2022.7.1" +importlib-metadata = "<5" [tool.poetry.group.dev.dependencies] coverage = "^7.1.0"