diff --git a/Dockerfile b/Dockerfile index 3828256..006e338 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,9 @@ RUN mkdir /app WORKDIR /app ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 -RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --proxy http://proxy-bvcol.admin.ch:8080 --upgrade pip +RUN pip install --upgrade pip COPY requirements.txt /app/ -RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --proxy http://proxy-bvcol.admin.ch:8080 --no-cache-dir -r requirements.txt +RUN pip install --no-cache-dir -r requirements.txt FROM python:3.13-slim RUN useradd -m -r appuser && \ diff --git a/Dockerfile.bitproxy b/Dockerfile.bitproxy new file mode 100644 index 0000000..3828256 --- /dev/null +++ b/Dockerfile.bitproxy @@ -0,0 +1,26 @@ +FROM python:3.13-slim AS baustelle +RUN mkdir /app +WORKDIR /app +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --proxy http://proxy-bvcol.admin.ch:8080 --upgrade pip +COPY requirements.txt /app/ +RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --proxy http://proxy-bvcol.admin.ch:8080 --no-cache-dir -r requirements.txt + +FROM python:3.13-slim +RUN useradd -m -r appuser && \ + mkdir /app && \ + chown -R appuser /app + +COPY --from=baustelle /usr/local/lib/python3.13/site-packages/ /usr/local/lib/python3.13/site-packages/ +COPY --from=baustelle /usr/local/bin/ /usr/local/bin/ +RUN rm /usr/bin/tar +RUN rm /usr/lib/x86_64-linux-gnu/libncur* +WORKDIR /app +COPY --chown=appuser:appuser . . +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +USER appuser +EXPOSE 8000 +CMD ["gunicorn","--bind","0.0.0.0:8000","--workers","3","VorgabenUI.wsgi:application"] + diff --git a/k8s/data-loader-pod.yaml b/k8s/data-loader-pod.yaml new file mode 100644 index 0000000..5484c75 --- /dev/null +++ b/k8s/data-loader-pod.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Pod +metadata: + name: data-loader + namespace: vorgabenui +spec: + restartPolicy: Never + containers: + - name: loader + image: alpine:3.20 + command: ["sh","-c","sleep 3600"] + volumeMounts: + - name: data + mountPath: /data + volumes: + - name: data + persistentVolumeClaim: + claimName: django-data-pvc diff --git a/k8s/db/db.sqlite3 b/k8s/db/db.sqlite3 new file mode 100644 index 0000000..850190b Binary files /dev/null and b/k8s/db/db.sqlite3 differ diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml new file mode 100644 index 0000000..93978d6 --- /dev/null +++ b/k8s/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: django + namespace: vorgabenui +spec: + replicas: 1 + selector: + matchLabels: + app: django + template: + metadata: + labels: + app: django + spec: + securityContext: + fsGroup: 999 + fsGroupChangePolicy: "OnRootMismatch" + containers: + - name: web + image: docker.io/adebaumann/vorgabenui_minimal:latest + imagePullPolicy: Always + ports: + - containerPort: 8000 + volumeMounts: + - name: data + mountPath: /app/data + readinessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 2 + failureThreshold: 6 + livenessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 20 + periodSeconds: 20 + timeoutSeconds: 2 + failureThreshold: 3 + volumes: + - name: data + persistentVolumeClaim: + claimName: django-data-pvc +--- +apiVersion: v1 +kind: Service +metadata: + name: django + namespace: vorgabenui +spec: + type: ClusterIP + selector: + app: django + ports: + - port: 8000 + targetPort: 8000 + diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml new file mode 100644 index 0000000..299fea5 --- /dev/null +++ b/k8s/ingress.yaml @@ -0,0 +1,19 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: django + namespace: vorgabenui + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: vorgabenui.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: django + port: + number: 8000 diff --git a/k8s/ingressdebug.yaml b/k8s/ingressdebug.yaml new file mode 100644 index 0000000..9426958 --- /dev/null +++ b/k8s/ingressdebug.yaml @@ -0,0 +1,18 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: django + namespace: vorgabenui +spec: + ingressClassName: nginx + rules: + - host: vorgabenui.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: django + port: + number: 8000 diff --git a/k8s/pvc.yaml b/k8s/pvc.yaml new file mode 100644 index 0000000..64cd70f --- /dev/null +++ b/k8s/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: django-data-pvc + namespace: vorgabenui +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi +