1
1
# ---------------------------------------------------------------------------------------------------------------------------
2
2
# STAGING STEP
3
3
# ---------------------------------------------------------------------------------------------------------------------------
4
-
5
- FROM --platform=$BUILDPLATFORM python:3.12-alpine3.21 as staging
4
+ FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21 as staging
6
5
WORKDIR /app
7
6
8
7
ARG DSMR_VERSION
9
8
ENV DSMR_VERSION=${DSMR_VERSION:-5.0.0}
10
9
11
- RUN echo "**** Download DSMR ****" \
12
- && apk add --no-cache curl \
13
- && curl -SskLf "https://github.com/dsmrreader/dsmr-reader/archive/refs/tags/v${DSMR_VERSION}.tar.gz" | tar xvzf - --strip-components=1 -C /app \
14
- && curl -SskLf "https://raw.githubusercontent.com/dsmrreader/dsmr-reader/v5 /dsmr_datalogger/scripts/dsmr_datalogger_api_client.py" -o /app/dsmr_datalogger_api_client.py
10
+ RUN apk add --no-cache curl \
11
+ && echo "**** Download DSMR ****" \
12
+ && curl -SskLf "https://github.com/dsmrreader/dsmr-reader/archive/refs/tags/v${DSMR_VERSION}.tar.gz" | tar xvzf - --strip-components=1 -C /app \
13
+ && curl -SskLf "https://raw.githubusercontent.com/dsmrreader/dsmr-reader/v${DSMR_VERSION} /dsmr_datalogger/scripts/dsmr_datalogger_api_client.py" -o /app/dsmr_datalogger_api_client.py
15
14
16
15
# ---------------------------------------------------------------------------------------------------------------------------
17
- # BUILD STEP
16
+ # BASE STEP
18
17
# ---------------------------------------------------------------------------------------------------------------------------
19
- FROM python:3.12-alpine3.21 as base
20
-
21
- # Build the binary according to the TARGET platform variables
22
- ARG TARGETARCH
23
- ARG TARGETVARIANT
18
+ FROM python:3.11-alpine3.21 as base
24
19
25
- ARG QEMU_ARCH
26
- ARG S6_VERSION="3.1.6.2"
27
- ARG DOCKER_TARGET_RELEASE
20
+ # Build arguments
28
21
ARG DSMR_VERSION
22
+ ENV DSMR_VERSION=${DSMR_VERSION}
29
23
24
+ # Algemene omgevingsvariabelen
30
25
ENV PS1="$(whoami)@dsmr_reader_docker:$(pwd)\\ $ " \
31
- TERM="xterm"
32
-
33
- ENV QEMU_ARCH=${QEMU_ARCH:-x86_64} \
34
- DSMR_VERSION=${DSMR_VERSION} \
35
- DOCKER_TARGET_RELEASE=${DOCKER_TARGET_RELEASE} \
36
- PIP_NO_CACHE_DIR=1 \
37
- S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
26
+ TERM="xterm" \
27
+ PIP_NO_CACHE_DIR=1 \
28
+ S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
38
29
30
+ # DSMR Reader-specifieke omgevingsvariabelen
39
31
ENV DJANGO_SECRET_KEY=dsmrreader \
40
- DJANGO_DATABASE_ENGINE=django.db.backends.postgresql \
41
- DSMRREADER_SUPPRESS_STORAGE_SIZE_WARNINGS=True \
42
- DJANGO_DATABASE_NAME =dsmrreader \
43
- DJANGO_DATABASE_USER =dsmrreader \
44
- DJANGO_DATABASE_PASSWORD=dsmrreader \
45
- DJANGO_DATABASE_HOST=dsmrdb \
46
- DJANGO_DATABASE_PORT=5432 \
47
- DSMRREADER_ADMIN_USER =admin \
48
- DSMRREADER_ADMIN_PASSWORD=admin \
49
- DSMRREADER_OPERATION_MODE=standalone \
50
- VACUUM_DB_ON_STARTUP=false \
51
- DSMRREADER_REMOTE_DATALOGGER_INPUT_METHOD=serial \
52
- DSMRREADER_REMOTE_DATALOGGER_SERIAL_PORT=/dev/ttyUSB0 \
53
- DSMRREADER_REMOTE_DATALOGGER_SERIAL_BAUDRATE=115200 \
54
- DSMRREADER_REMOTE_DATALOGGER_SERIAL_BYTESIZE=8 \
55
- DSMRREADER_REMOTE_DATALOGGER_SERIAL_PARITY=N \
56
- DSMRREADER_REMOTE_DATALOGGER_NETWORK_HOST=127.0.0.1 \
57
- DSMRREADER_REMOTE_DATALOGGER_NETWORK_PORT=23
58
-
59
- # copy local files
32
+ DJANGO_DATABASE_ENGINE=django.db.backends.postgresql \
33
+ DJANGO_DATABASE_NAME=dsmrreader \
34
+ DJANGO_DATABASE_USER =dsmrreader \
35
+ DJANGO_DATABASE_PASSWORD =dsmrreader \
36
+ DJANGO_DATABASE_HOST=dsmrdb \
37
+ DJANGO_DATABASE_PORT=5432 \
38
+ DSMRREADER_ADMIN_USER=admin \
39
+ DSMRREADER_ADMIN_PASSWORD =admin \
40
+ DSMRREADER_OPERATION_MODE=standalone \
41
+ VACUUM_DB_ON_STARTUP=false \
42
+ DSMRREADER_SUPPRESS_STORAGE_SIZE_WARNINGS=True \
43
+ DSMRREADER_REMOTE_DATALOGGER_INPUT_METHOD=serial \
44
+ DSMRREADER_REMOTE_DATALOGGER_SERIAL_PORT=/dev/ttyUSB0 \
45
+ DSMRREADER_REMOTE_DATALOGGER_SERIAL_BAUDRATE=115200 \
46
+ DSMRREADER_REMOTE_DATALOGGER_SERIAL_BYTESIZE=8 \
47
+ DSMRREADER_REMOTE_DATALOGGER_SERIAL_PARITY=N \
48
+ DSMRREADER_REMOTE_DATALOGGER_NETWORK_HOST=127.0.0.1 \
49
+ DSMRREADER_REMOTE_DATALOGGER_NETWORK_PORT=23
50
+
51
+ # Kopieer bestanden uit staging
60
52
COPY --from=staging /app /app
61
53
62
- RUN echo "**** install runtime packages ****" \
63
- && rm -rf /var/cache/apk/* \
64
- && rm -rf /tmp/* \
65
- && apk --update add --no-cache \
66
- bash \
67
- curl \
68
- coreutils \
69
- ca-certificates \
70
- shadow \
71
- dpkg \
72
- jq \
73
- nginx \
74
- openssl \
75
- netcat-openbsd \
76
- postgresql17-client \
77
- mariadb-connector-c-dev \
78
- mariadb-client \
79
- libjpeg-turbo \
80
- tzdata
81
-
82
- RUN echo "**** install s6 overlay ****" \
83
- && case "${TARGETARCH}/${TARGETVARIANT}" in \
84
- "amd64/" ) S6_ARCH=x86_64 ;; \
85
- "arm64/" ) S6_ARCH=aarch64 ;; \
86
- "arm/v7" ) S6_ARCH=arm ;; \
87
- "arm/v6" ) S6_ARCH=armhf ;; \
88
- esac \
89
- && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v"${S6_VERSION}" /s6-overlay-noarch.tar.xz \
90
- && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v"${S6_VERSION}" /s6-overlay-"${S6_ARCH}" .tar.xz \
91
- && tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz \
92
- && tar -C / -Jxpf /tmp/s6-overlay-"${S6_ARCH}" .tar.xz \
93
- && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v"${S6_VERSION}" /s6-overlay-symlinks-noarch.tar.xz \
94
- && tar -C / -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz \
95
- && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v"${S6_VERSION}" /s6-overlay-symlinks-arch.tar.xz \
96
- && tar -C / -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz \
97
- && rm -rf /tmp/s6-overlay-*.tar.xz
98
-
99
- RUN echo "**** install build packages ****" \
100
- && apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql17-dev build-base mariadb-dev libpq-dev libffi-dev jpeg-dev cargo rust \
101
- && echo "**** install pip packages ****" \
102
- && python3 -m pip install -r /app/dsmrreader/provisioning/requirements/base.txt --no-cache-dir \
103
- && python3 -m pip install mysqlclient --no-cache-dir \
104
- && python3 -m pip install tzupdate --no-cache-dir \
105
- && echo "**** create app user and make base folders ****" \
106
- && groupmod -g 1000 users \
107
- && useradd -u 803 -U -d /config -s /bin/false app \
108
- && usermod -G users,dialout,audio app \
109
- && mkdir -vp /app /config /defaults \
110
- && echo "**** copy default settings dsmr reader ****" \
111
- && cp -f /app/dsmrreader/provisioning/django/settings.py.template /app/dsmrreader/settings.py \
112
- && echo "**** cleanup package leftovers ****" \
113
- && apk --purge del .build-deps \
114
- && apk --purge del \
115
- && rm -rf /var/cache/apk/* \
116
- && rm -rf /tmp/*
117
-
118
- RUN echo "**** configure nginx package ****" \
119
- && mkdir -vp /run/nginx/ \
120
- && mkdir -vp /etc/nginx/http.d \
121
- && ln -sf /dev/stdout /var/log/nginx/access.log \
122
- && ln -sf /dev/stderr /var/log/nginx/error.log \
123
- && rm -f /etc/nginx/http.d/default.conf \
124
- && mkdir -vp /var/www/dsmrreader/static \
125
- && cp -f /app/dsmrreader/provisioning/nginx/dsmr-webinterface /etc/nginx/http.d/dsmr-webinterface.conf
54
+ RUN apk add --no-cache \
55
+ bash curl coreutils ca-certificates shadow jq nginx \
56
+ openssl postgresql17-client libjpeg-turbo tzdata s6-overlay \
57
+ && echo "**** install build dependencies and pip packages ****" \
58
+ && apk add --no-cache --virtual .build-deps \
59
+ gcc python3-dev musl-dev postgresql17-dev build-base \
60
+ libffi-dev jpeg-dev rust cargo mariadb-dev \
61
+ && python3 -m pip install --no-cache-dir -r /app/dsmrreader/provisioning/requirements/base.txt \
62
+ && python3 -m pip install --no-cache-dir mysqlclient tzupdate \
63
+ && echo "**** cleanup ****" \
64
+ && apk del .build-deps \
65
+ && rm -rf /var/cache/apk/* /tmp/* /root/.cache
66
+
67
+ # Setup nginx
68
+ RUN mkdir -p /run/nginx /etc/nginx/http.d /var/www/dsmrreader/static \
69
+ && ln -sf /dev/stdout /var/log/nginx/access.log \
70
+ && ln -sf /dev/stderr /var/log/nginx/error.log \
71
+ && rm -f /etc/nginx/http.d/default.conf \
72
+ && cp /app/dsmrreader/provisioning/nginx/dsmr-webinterface /etc/nginx/http.d/dsmr-webinterface.conf
73
+
74
+ # Create app user
75
+ RUN groupmod -g 1000 users \
76
+ && useradd -u 803 -U -d /config -s /bin/false app \
77
+ && usermod -G users,dialout,audio app \
78
+ && mkdir -p /config /defaults
79
+
80
+ # Copy settings template
81
+ RUN cp /app/dsmrreader/provisioning/django/settings.py.template /app/dsmrreader/settings.py
126
82
127
83
# ---------------------------------------------------------------------------------------------------------------------------
128
84
# FINAL STEP
@@ -131,10 +87,7 @@ FROM base as final
131
87
132
88
COPY rootfs /
133
89
134
- # TODO: Improve healtcheck to respond on 200 only
135
- # TODO: Improve healtcheck so it's only valid for containers with the webinterface enabled
136
- HEALTHCHECK --interval=15s --timeout=3s --retries=10 CMD curl -Lsf http://127.0.0.1/about -o /dev/null -w "HTTP_%{http_code}" || exit 1
90
+ HEALTHCHECK --interval=15s --timeout=3s --retries=10 CMD curl -Lsf http://127.0.0.1/about -o /dev/null || exit 1
137
91
138
92
WORKDIR /app
139
-
140
93
ENTRYPOINT ["/init" ]
0 commit comments