Skip to content

Commit 07c6e32

Browse files
authored
Development (#369)
1 parent 5773fae commit 07c6e32

File tree

3 files changed

+65
-112
lines changed

3 files changed

+65
-112
lines changed

.github/workflows/build_release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ concurrency:
2424
env:
2525
DOCKER_TARGET_REPO: xirixiz/dsmr-reader-docker
2626
DOCKERFILE: Dockerfile
27-
DOCKER_TARGET_RELEASE: 2024.12.01
27+
DOCKER_TARGET_RELEASE: 2025.01.01
2828

2929
jobs:
3030
################################################

Dockerfile

+63-110
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,84 @@
11
#---------------------------------------------------------------------------------------------------------------------------
22
# STAGING STEP
33
#---------------------------------------------------------------------------------------------------------------------------
4-
5-
FROM --platform=$BUILDPLATFORM python:3.12-alpine3.21 as staging
4+
FROM --platform=$BUILDPLATFORM python:3.11-alpine3.21 as staging
65
WORKDIR /app
76

87
ARG DSMR_VERSION
98
ENV DSMR_VERSION=${DSMR_VERSION:-5.0.0}
109

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
1514

1615
#---------------------------------------------------------------------------------------------------------------------------
17-
# BUILD STEP
16+
# BASE STEP
1817
#---------------------------------------------------------------------------------------------------------------------------
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
2419

25-
ARG QEMU_ARCH
26-
ARG S6_VERSION="3.1.6.2"
27-
ARG DOCKER_TARGET_RELEASE
20+
# Build arguments
2821
ARG DSMR_VERSION
22+
ENV DSMR_VERSION=${DSMR_VERSION}
2923

24+
# Algemene omgevingsvariabelen
3025
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
3829

30+
# DSMR Reader-specifieke omgevingsvariabelen
3931
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
6052
COPY --from=staging /app /app
6153

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
12682

12783
#---------------------------------------------------------------------------------------------------------------------------
12884
# FINAL STEP
@@ -131,10 +87,7 @@ FROM base as final
13187

13288
COPY rootfs /
13389

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
13791

13892
WORKDIR /app
139-
14093
ENTRYPOINT ["/init"]

examples/docker-compose.example.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: '3'
22

33
services:
44
dsmrdb:
5-
# When using Postgres, release 13.x, 14.x, 15.x, and 16.x are supported only
5+
# When using Postgres, release 14.x, 15.x, 16.x and 17.x are supported only
66
# due to the limited availability of client packages, especially for arm32v7
77
image: postgres:16-alpine
88
container_name: dsmrdb

0 commit comments

Comments
 (0)