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..88462401a 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/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 10e8b17f1..76074a0a3 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/repository/Dockerfile ports: - "8080:80" volumes: 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]