From b4338ebd22f22b1d852af9b758c6b00f8d6f5000 Mon Sep 17 00:00:00 2001 From: Mark Joachim Krallmann <169099857+jokro7cf@users.noreply.github.com> Date: Sun, 17 May 2026 09:40:54 +0200 Subject: [PATCH 1/3] Build container images and push --- .dockerignore | 8 +++++ .github/workflows/docker-publish.yml | 52 ++++++++++++++++++++++++++++ Dockerfile | 21 +++++++++++ server.py | 2 +- 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/docker-publish.yml create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5a711be --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.git +__pycache__/ +*.pyc +*.pyo +*.pyd +.Python +venv/ +.venv/ \ No newline at end of file diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..fce7bc0 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,52 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - main + - '**' + tags: + - "v*.*.*" + workflow_dispatch: + +permissions: + contents: read + packages: write + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push image + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d152e67 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3.13-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update \ + && apt-get install -y --no-install-recommends build-essential \ + && rm -rf /var/lib/apt/lists/* + +# To allow caching of dependencies, copy only the requirements file first +COPY requirements.txt ./ +RUN pip install --no-cache-dir --upgrade pip \ +&& pip install --no-cache-dir -r requirements.txt + +COPY . ./ + +EXPOSE 8000 + +CMD ["python", "server.py"] \ No newline at end of file diff --git a/server.py b/server.py index e3ecf84..51309f4 100644 --- a/server.py +++ b/server.py @@ -7,6 +7,6 @@ host = env["host"] log = env["log-level"] worker = env["worker"] - + print(f"Server will run on {host}:{port} with log level {log} and {worker} workers.") if __name__ == "__main__": uvicorn.run("main:app", host=host, port=port, log_level=log, workers=4) \ No newline at end of file From 94390dcc86ab0f9517160f55b57cad0a0c43e165 Mon Sep 17 00:00:00 2001 From: Mark Joachim Krallmann <169099857+jokro7cf@users.noreply.github.com> Date: Sun, 17 May 2026 10:04:27 +0200 Subject: [PATCH 2/3] Add docs for docker --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 432eb3a..1db042b 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,27 @@ uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` > **Warning:** Do not use the built-in server in production! ---- +### Container + +Podman/Docker +``` +podman run -d \ + -p 8000:8000 \ + -v /path/to/env.yaml:/app/env.yaml:ro \ + --name hs-rest-api \ + docker pull ghcr.io/openadministration/hs.rest-api:v.xy +``` +Or docker-compose.yml: +```yaml +services: + hs-rest-api: + image: docker pull ghcr.io/openadministration/hs.rest-api:v.xy + ports: + - "8000:8000" + volumes: + - ./env.yaml:/app/env.yaml:ro + restart: unless-stopped +``` ## Using the API From 36fe2ecadb73c515542fb2241f8678db03b41a6f Mon Sep 17 00:00:00 2001 From: Mark Joachim Krallmann <169099857+jokro7cf@users.noreply.github.com> Date: Sun, 17 May 2026 12:01:12 +0200 Subject: [PATCH 3/3] Remove debug print --- server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server.py b/server.py index 51309f4..2a58d8e 100644 --- a/server.py +++ b/server.py @@ -7,6 +7,5 @@ host = env["host"] log = env["log-level"] worker = env["worker"] - print(f"Server will run on {host}:{port} with log level {log} and {worker} workers.") if __name__ == "__main__": uvicorn.run("main:app", host=host, port=port, log_level=log, workers=4) \ No newline at end of file