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
This commit is contained in:
Jan Dittberner 2023-02-20 16:11:15 +01:00
parent fc9723c401
commit 2c2a667d81
7 changed files with 50 additions and 28 deletions

17
.dockerignore Normal file
View file

@ -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

View file

@ -57,10 +57,8 @@ RUN addgroup --gid $GVAGID $GVAAPP ; \
COPY --chown=$GVAAPP:$GVAAPP --from=builder /srv/$GVAAPP/.venv /srv/$GVAAPP/.venv 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/entrypoint.sh"]
ENTRYPOINT ["dumb-init", "/srv/${GVAAPP}.sh"]

5
entrypoint.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/sh
set -e
su -c /srv/gvaweb.sh gvaweb

View file

@ -2,10 +2,11 @@
set -e set -e
QUEUE=web QUEUE="web"
TASKS=${QUEUE}tasks TASKS="${QUEUE}tasks"
APP=gvaweb APP="gvaweb"
export TZ="Europe/Berlin"
. "/srv/${APP}/.venv/bin/activate" . "/srv/${APP}/.venv/bin/activate"
cd /srv/${APP}/${APP} cd /srv/${APP}/${APP}
celery -A "${TASKS}" worker -Q "${QUEUE}" -l info celery -A "${TASKS}" worker -Q "${QUEUE}" -E -l info

View file

@ -8,7 +8,7 @@ Common settings and globals.
from os import environ from os import environ
def get_env_setting(setting): def get_env_variable(setting):
""" """
Get the environment setting or return exception. Get the environment setting or return exception.
@ -25,20 +25,20 @@ def get_env_setting(setting):
########## CELERY CONFIGURATION ########## CELERY CONFIGURATION
CELERY_TIMEZONE = "Europe/Berlin" accept_content = ["json"]
CELERY_ENABLE_UTC = True broker_url = get_env_variable("GVAWEB_BROKER_URL")
CELERY_RESULT_PERSISTENT = True enable_utc = True
CELERY_TASK_RESULT_EXPIRES = None result_backend = get_env_variable("GVAWEB_RESULTS_REDIS_URL")
CELERY_ROUTES = ("gvacommon.celeryrouters.GvaRouter",) result_expires = None
CELERY_ACCEPT_CONTENT = ["json"] result_persistent = True
CELERY_TASK_SERIALIZER = "json" result_serializer = "json"
CELERY_RESULT_SERIALIZER = "json" task_routes = ("gvacommon.celeryrouters.GvaRouter",)
CELERY_RESULT_BACKEND = get_env_setting("GVAWEB_RESULTS_REDIS_URL") task_serializer = "json"
CELERY_BROKER_URL = get_env_setting("GVAWEB_BROKER_URL") timezone = "Europe/Berlin"
########## END CELERY CONFIGURATION ########## END CELERY CONFIGURATION
########## GVAWEB CONFIGURATION ########## GVAWEB CONFIGURATION
GVAWEB_NGINX_SITES_AVAILABLE = get_env_setting("GVAWEB_NGINX_SITES_AVAILABLE") GVAWEB_NGINX_SITES_AVAILABLE = get_env_variable("GVAWEB_NGINX_SITES_AVAILABLE")
GVAWEB_NGINX_SITES_ENABLED = get_env_setting("GVAWEB_NGINX_SITES_ENABLED") GVAWEB_NGINX_SITES_ENABLED = get_env_variable("GVAWEB_NGINX_SITES_ENABLED")
GVAWEB_WWWUSER_MOUNT = get_env_setting("GVAWEB_WWWUSER_MOUNT") GVAWEB_WWWUSER_MOUNT = get_env_variable("GVAWEB_WWWUSER_MOUNT")
########## END GVAWEB CONFIGURATION ########## END GVAWEB CONFIGURATION

10
poetry.lock generated
View file

@ -427,14 +427,14 @@ files = [
[[package]] [[package]]
name = "importlib-metadata" name = "importlib-metadata"
version = "6.0.0" version = "4.13.0"
description = "Read metadata from Python packages" description = "Read metadata from Python packages"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, {file = "importlib_metadata-4.13.0-py3-none-any.whl", hash = "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116"},
{file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, {file = "importlib_metadata-4.13.0.tar.gz", hash = "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d"},
] ]
[package.dependencies] [package.dependencies]
@ -442,7 +442,7 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5" zipp = ">=0.5"
[package.extras] [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"] 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)"] 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] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.7" python-versions = "^3.7"
content-hash = "aa902af54805ba5de3d513ea51c1547e2214e9e2f61bd4531d97c1a6e49ec7fe" content-hash = "e51c8b3c06496c032c17e4fd7fd38e81af64927a32b8f53f216d2d1af272ee21"

View file

@ -13,6 +13,7 @@ amqp = "^5.1.1"
Jinja2 = "^3.1.2" Jinja2 = "^3.1.2"
redis = "^4.5.1" redis = "^4.5.1"
pytz = "^2022.7.1" pytz = "^2022.7.1"
importlib-metadata = "<5"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
coverage = "^7.1.0" coverage = "^7.1.0"