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 e8799039..1db41930 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 0f1070a1..04150d40 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 1a3e4217..42e7cbe4 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 66c9618e..49630d4e 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 df367f2d..e04970e4 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 bc58e3e6..c0136f1b 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 0aea1510..788b335c 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 f7ac9223..c56e3448 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 10e8b17f..bde35b37 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 c56e3448..88462401 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 bde35b37..76074a0a 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: