From 130c84f0cc5ada4070c7863e2a8d6769e1388a66 Mon Sep 17 00:00:00 2001 From: hpoeche Date: Mon, 10 Aug 2026 15:27:23 +0200 Subject: [PATCH 1/3] server: Add sdk dependency (temporarily) The sdk was not listed as dependency of the server package although it is used in the server extensively. As we have for now no proper cross-package dependency defninition strategy, we apply the same workaround as with the compliance_tool. As the server is never released as package to PyPI but only install in docker image builds, this can be considered as appropiate temporary solution. --- server/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/server/pyproject.toml b/server/pyproject.toml index e87990397..1db41930a 100644 --- a/server/pyproject.toml +++ b/server/pyproject.toml @@ -38,6 +38,7 @@ requires-python = ">=3.10" dependencies = [ "urllib3>=1.26,<3", "Werkzeug>=3.0.3,<4", + "basyx-python-sdk>=1.0.0" # TODO: declare proper cross-package dependencies (see issue #592) ] [project.optional-dependencies] From 72113e0832e40127887f3c6608c895b1a6f52a43 Mon Sep 17 00:00:00 2001 From: hpoeche Date: Mon, 10 Aug 2026 15:40:35 +0200 Subject: [PATCH 2/3] server: Adapt docker build to run from /server Previously the docker builds needed the repository root as build context in order to copy the content of sdk and server directory. In order to isolate the server package in its `/server` subpath, the build now uses this directory as context. The sdk sources are passed via an additional build context. CI jobs, docker-compose.yml files and Readmes are adapted accordingly. --- .github/actions/build-server/action.yml | 4 +++- server/README.md | 10 +++++----- server/docker/discovery/Dockerfile | 16 ++++++++-------- server/docker/registry/Dockerfile | 16 ++++++++-------- server/docker/repository/Dockerfile | 14 +++++++------- .../discovery_standalone/compose.yml | 6 ++++-- .../registry_standalone/compose.yml | 6 ++++-- .../repository_standalone/compose.yaml | 6 ++++-- 8 files changed, 43 insertions(+), 35 deletions(-) diff --git a/.github/actions/build-server/action.yml b/.github/actions/build-server/action.yml index 0f1070a17..04150d402 100644 --- a/.github/actions/build-server/action.yml +++ b/.github/actions/build-server/action.yml @@ -60,7 +60,9 @@ runs: id: build uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a #v7.3.0 with: - context: . + context: ./server + build-contexts: | + sdk=./sdk file: ./server/docker/${{ inputs.server-profile }}/Dockerfile tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/server/README.md b/server/README.md index 1a3e42173..42e7cbe41 100644 --- a/server/README.md +++ b/server/README.md @@ -20,19 +20,19 @@ See [below](#options) on how to configure this. Pre-built images are published to [Docker Hub][11] on every release. Pull the latest version via: ``` -$ docker pull eclipsebasyx/basyx-python-server:latest +$ docker pull eclipsebasyx/basyx-python-repository:latest ``` Or pin to a specific release by replacing `` with the desired release number: ``` -$ docker pull eclipsebasyx/basyx-python-server: +$ docker pull eclipsebasyx/basyx-python-repository: ``` ## Building -If you need to build the image locally (e.g. for development), run: +If you need to build an image locally (e.g. for development), run in this directory: ``` -$ docker build -t basyx-python-server -f Dockerfile .. +$ docker build -t basyx-python-repository -f docker/repository/Dockerfile --build-context sdk=../sdk . ``` Note that when cloning this repository on Windows, Git may convert the line separators to CRLF. This breaks [`entrypoint.sh`](docker/repository/entrypoint.sh) and [`stop-supervisor.sh`](docker/common/stop-supervisor.sh). Ensure both files use LF line separators (`\n`) before building. @@ -96,7 +96,7 @@ The server can also be run directly on the host system without Docker, NGINX and 1. Install the local SDK and the local server package. ```bash $ pip install ../sdk - $ pip install ./app + $ pip install . ``` 2. Run the server by executing the main function in [`./app/interfaces/repository.py`](./app/interfaces/repository.py). diff --git a/server/docker/discovery/Dockerfile b/server/docker/discovery/Dockerfile index 66c9618e8..49630d4e8 100644 --- a/server/docker/discovery/Dockerfile +++ b/server/docker/discovery/Dockerfile @@ -15,12 +15,12 @@ RUN apk update && \ pip install uwsgi && \ apk del git bash -COPY ./sdk /sdk -COPY ./server/app /server/app -COPY ./server/pyproject.toml /server/pyproject.toml -COPY ./server/docker/discovery/uwsgi.ini /etc/uwsgi/ -COPY ./server/docker/common/supervisord.ini /etc/supervisor/conf.d/supervisord.ini -COPY ./server/docker/common/stop-supervisor.sh /etc/supervisor/stop-supervisor.sh +COPY --from=sdk . /sdk +COPY ./app /server/app +COPY ./pyproject.toml /server/pyproject.toml +COPY ./docker/discovery/uwsgi.ini /etc/uwsgi/ +COPY ./docker/common/supervisord.ini /etc/supervisor/conf.d/supervisord.ini +COPY ./docker/common/stop-supervisor.sh /etc/supervisor/stop-supervisor.sh RUN chmod +x /etc/supervisor/stop-supervisor.sh # Makes it possible to use a different configuration @@ -36,7 +36,7 @@ ENV CLIENT_BODY_BUFFER_SIZE=1M ENV API_BASE_PATH=/api/v3.1/ # Copy the entrypoint that will generate Nginx additional configs -COPY server/docker/common/entrypoint.sh /entrypoint.sh +COPY ./docker/common/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] @@ -47,4 +47,4 @@ WORKDIR /server/app RUN pip install ../../sdk RUN pip install .. -CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.ini"] \ No newline at end of file +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.ini"] diff --git a/server/docker/registry/Dockerfile b/server/docker/registry/Dockerfile index df367f2d6..e04970e4a 100644 --- a/server/docker/registry/Dockerfile +++ b/server/docker/registry/Dockerfile @@ -16,12 +16,12 @@ RUN apk update && \ apk del git bash -COPY ./sdk /sdk -COPY ./server/app /server/app -COPY ./server/pyproject.toml /server/pyproject.toml -COPY ./server/docker/registry/uwsgi.ini /etc/uwsgi/ -COPY ./server/docker/common/supervisord.ini /etc/supervisor/conf.d/supervisord.ini -COPY ./server/docker/common/stop-supervisor.sh /etc/supervisor/stop-supervisor.sh +COPY --from=sdk . /sdk +COPY ./app /server/app +COPY ./pyproject.toml /server/pyproject.toml +COPY ./docker/registry/uwsgi.ini /etc/uwsgi/ +COPY ./docker/common/supervisord.ini /etc/supervisor/conf.d/supervisord.ini +COPY ./docker/common/stop-supervisor.sh /etc/supervisor/stop-supervisor.sh RUN chmod +x /etc/supervisor/stop-supervisor.sh # Makes it possible to use a different configuration @@ -44,7 +44,7 @@ ENV STORAGE_OVERWRITE=False VOLUME ["/input", "/storage"] # Copy the entrypoint that will generate Nginx additional configs -COPY server/docker/common/entrypoint.sh /entrypoint.sh +COPY ./docker/common/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] @@ -55,4 +55,4 @@ WORKDIR /server/app RUN pip install ../../sdk RUN pip install .. -CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.ini"] \ No newline at end of file +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.ini"] diff --git a/server/docker/repository/Dockerfile b/server/docker/repository/Dockerfile index bc58e3e65..c0136f1b3 100644 --- a/server/docker/repository/Dockerfile +++ b/server/docker/repository/Dockerfile @@ -17,12 +17,12 @@ RUN apk update && \ # Copy only the files we need to run the container # The argumentation for this is to keep the containers as slim as possible. -COPY ./sdk /sdk -COPY ./server/app /server/app -COPY ./server/pyproject.toml /server/pyproject.toml -COPY ./server/docker/repository/uwsgi.ini /etc/uwsgi/ -COPY ./server/docker/common/supervisord.ini /etc/supervisor/conf.d/supervisord.ini -COPY ./server/docker/common/stop-supervisor.sh /etc/supervisor/stop-supervisor.sh +COPY --from=sdk . /sdk +COPY ./app /server/app +COPY ./pyproject.toml /server/pyproject.toml +COPY ./docker/repository/uwsgi.ini /etc/uwsgi/ +COPY ./docker/common/supervisord.ini /etc/supervisor/conf.d/supervisord.ini +COPY ./docker/common/stop-supervisor.sh /etc/supervisor/stop-supervisor.sh RUN chmod +x /etc/supervisor/stop-supervisor.sh # Makes it possible to use a different configuration @@ -45,7 +45,7 @@ ENV STORAGE_OVERWRITE=False VOLUME ["/input", "/storage"] # Copy the entrypoint that will generate Nginx additional configs -COPY server/docker/common/entrypoint.sh /entrypoint.sh +COPY ./docker/common/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] diff --git a/server/example_configurations/discovery_standalone/compose.yml b/server/example_configurations/discovery_standalone/compose.yml index 0aea1510b..788b335cd 100644 --- a/server/example_configurations/discovery_standalone/compose.yml +++ b/server/example_configurations/discovery_standalone/compose.yml @@ -2,8 +2,10 @@ name: basyx-python-server services: app: build: - context: ../../.. - dockerfile: server/docker/discovery/Dockerfile + context: ../.. + additional_contexts: + - sdk=../../../sdk + dockerfile: ./docker/discovery/Dockerfile ports: - "8084:80" environment: diff --git a/server/example_configurations/registry_standalone/compose.yml b/server/example_configurations/registry_standalone/compose.yml index f7ac9223e..c56e34489 100644 --- a/server/example_configurations/registry_standalone/compose.yml +++ b/server/example_configurations/registry_standalone/compose.yml @@ -1,8 +1,10 @@ services: app: build: - context: ../../.. - dockerfile: server/docker/registry/Dockerfile + context: ../.. + additional_contexts: + - sdk=../../../sdk + dockerfile: ./docker/discovery/Dockerfile ports: - "8083:80" volumes: diff --git a/server/example_configurations/repository_standalone/compose.yaml b/server/example_configurations/repository_standalone/compose.yaml index 10e8b17f1..bde35b376 100644 --- a/server/example_configurations/repository_standalone/compose.yaml +++ b/server/example_configurations/repository_standalone/compose.yaml @@ -2,8 +2,10 @@ name: basyx-python-server services: app: build: - context: ../../.. - dockerfile: server/docker/repository/Dockerfile + context: ../.. + additional_contexts: + - sdk=../../../sdk + dockerfile: ./docker/discovery/Dockerfile ports: - "8080:80" volumes: From fa70b3a7ae1db253c7083662a1b9fe6f0221ce60 Mon Sep 17 00:00:00 2001 From: hpoeche Date: Mon, 10 Aug 2026 16:08:58 +0200 Subject: [PATCH 3/3] server: Fix wrong Dockerfile in standalone compose files --- server/example_configurations/registry_standalone/compose.yml | 2 +- .../example_configurations/repository_standalone/compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/example_configurations/registry_standalone/compose.yml b/server/example_configurations/registry_standalone/compose.yml index c56e34489..88462401a 100644 --- a/server/example_configurations/registry_standalone/compose.yml +++ b/server/example_configurations/registry_standalone/compose.yml @@ -4,7 +4,7 @@ services: context: ../.. additional_contexts: - sdk=../../../sdk - dockerfile: ./docker/discovery/Dockerfile + dockerfile: ./docker/registry/Dockerfile ports: - "8083:80" volumes: diff --git a/server/example_configurations/repository_standalone/compose.yaml b/server/example_configurations/repository_standalone/compose.yaml index bde35b376..76074a0a3 100644 --- a/server/example_configurations/repository_standalone/compose.yaml +++ b/server/example_configurations/repository_standalone/compose.yaml @@ -5,7 +5,7 @@ services: context: ../.. additional_contexts: - sdk=../../../sdk - dockerfile: ./docker/discovery/Dockerfile + dockerfile: ./docker/repository/Dockerfile ports: - "8080:80" volumes: