From db6164ac3f3a2313b1d84dc69a0ae53563a0ea59 Mon Sep 17 00:00:00 2001 From: GotthardG <51994228+GotthardG@users.noreply.github.com> Date: Fri, 14 Mar 2025 13:47:54 +0100 Subject: [PATCH] Add Dockerfiles and update package dependencies Introduced Dockerfiles for logistics and frontend applications to streamline development and deployment. Updated package dependencies in the frontend to newer versions for improved stability and compatibility. --- .dockerignore | 5 ++++ backend/Dockerfile | 41 ++++++++++++++++++++++++++++++ docker-compose.yml | 32 +++++++++++++++++++++++ frontend/Dockerfile | 16 ++++++++++++ frontend/package-lock.json | 48 +++++++++++++++++------------------ logistics/Dockerfile | 16 ++++++++++++ testfunctions.ipynb | 52 +++++++++++++------------------------- 7 files changed, 151 insertions(+), 59 deletions(-) create mode 100644 .dockerignore create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile create mode 100644 logistics/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..16af5b7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +__pycache__/ +*.pyc +*.pyo +*.git +.env diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..2194b43 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,41 @@ +FROM python:3.12-slim-bullseye +# Use the Debian 11 base image + +# Set the working directory in the container +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + unixodbc-dev \ + libmariadb-dev \ + libssl-dev \ + gcc \ + curl \ + gpg && \ + rm -rf /var/lib/apt/lists/* + +# Download and install the msodbcsql18 driver for arm64-compatible base image +RUN apt-get update && apt-get install -y --no-install-recommends unixodbc-dev curl apt-transport-https gnupg && \ + curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.asc.gpg && \ + curl -sSL https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list && \ + apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc + + +# Install pyodbc +RUN pip install pyodbc + +# Copy the requirements file +COPY requirements.txt /app/requirements.txt + +# Install Python dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Copy the rest of the application code +COPY . /app + +# Expose the application port +EXPOSE 8000 + +# Command to run the application +CMD ["python", "main.py"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f71586e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +version: "3.9" +services: + backend: + build: + context: . # Build the image from the parent directory + dockerfile: backend/Dockerfile + + ports: + - "8000:8000" # Map container port 8000 to host + volumes: + - ./backend:/app/backend # Map backend directory to /app/backend + - ./app:/app/app # Map app directory to /app/app + - ./config_dev.json:/app/backend/config_dev.json # Explicitly map config_dev.json + + working_dir: /app/backend # Set working directory to backend/ + command: python main.py # Command to run main.py + + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + ports: + - "5173:5173" # Map container port 5173 to host + + logistics_frontend: + build: + context: ./logistics + dockerfile: Dockerfile + ports: + - "3000:3000" + depends_on: + - frontend # Ensure OpenAPI models are available \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..e2546da --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,16 @@ +FROM node:18 + + # Set working directory + WORKDIR /app + + # Copy dependency files and install dependencies + COPY package*.json ./ + RUN npm install + + # Copy rest of the code and build the application + COPY . . + RUN npm run build + + # Use a simple HTTP server to serve the built static files + EXPOSE 5173 + CMD ["npx", "vite", "preview", "--port", "5173"] \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c897724..25f3510 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -278,25 +278,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.5" + "@babel/types": "^7.26.10" }, "bin": { "parser": "bin/babel-parser.js" @@ -353,9 +353,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -365,14 +365,14 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" @@ -406,9 +406,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -3414,9 +3414,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz", + "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", diff --git a/logistics/Dockerfile b/logistics/Dockerfile new file mode 100644 index 0000000..8ca78bc --- /dev/null +++ b/logistics/Dockerfile @@ -0,0 +1,16 @@ +FROM node:18-alpine + +WORKDIR /app + +# Copy only the necessary package files first +COPY package*.json ./ +RUN npm install + +# Copy OpenAPI models into the build context +COPY openapi ./openapi + +# Copy the rest of the logistics app files +COPY . . + +# Build the application +RUN npm run build diff --git a/testfunctions.ipynb b/testfunctions.ipynb index ef67de4..2b39278 100644 --- a/testfunctions.ipynb +++ b/testfunctions.ipynb @@ -3,8 +3,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-03-11T15:04:51.407218Z", - "start_time": "2025-03-11T15:04:51.403058Z" + "end_time": "2025-03-14T12:34:36.688448Z", + "start_time": "2025-03-14T12:34:36.274011Z" } }, "cell_type": "code", @@ -46,7 +46,7 @@ ] } ], - "execution_count": 48 + "execution_count": 1 }, { "metadata": {}, @@ -486,8 +486,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-03-07T20:51:14.203996Z", - "start_time": "2025-03-07T20:51:14.134135Z" + "end_time": "2025-03-14T12:37:36.649779Z", + "start_time": "2025-03-14T12:37:36.597340Z" } }, "cell_type": "code", @@ -499,14 +499,14 @@ "import requests\n", "\n", "# List of file paths to the images you want to upload\n", - "file_paths = [\n", - " \"backend/tests/sample_image/0_200.jpg\",\n", - " \"backend/tests/sample_image/90_200.jpg\",\n", - " \"backend/tests/sample_image/0_700.jpg\",\n", - " \"backend/tests/sample_image/90_700.jpg\",\n", - "]\n", + "#file_paths = [\n", + "# \"backend/tests/sample_image/0_200.jpg\",\n", + "# \"backend/tests/sample_image/90_200.jpg\",\n", + "# \"backend/tests/sample_image/0_700.jpg\",\n", + "# \"backend/tests/sample_image/90_700.jpg\",\n", + "#]\n", "\n", - "#file_paths = [\"backend/tests/sample_image/mount.jpeg.jpg\"]\n", + "file_paths = [\"backend/tests/sample_image/mount.jpeg.jpg\"]\n", "\n", "\n", "# Sample ID (ensure this exists on your backend)\n", @@ -551,40 +551,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "Uploading 0_200.jpg...\n", - "API Response for 0_200.jpg:\n", - "200\n", - "{'pgroup': 'p20003', 'sample_id': 299, 'sample_event_id': 572, 'filepath': 'images/p20003/2025-03-07/Dewar Five/PKK007/16/Mounting_2025-03-06_14-31-00/0_200.jpg', 'status': 'active', 'comment': None, 'id': 2}\n", - "Uploading 90_200.jpg...\n", - "API Response for 90_200.jpg:\n", - "200\n", - "{'pgroup': 'p20003', 'sample_id': 299, 'sample_event_id': 572, 'filepath': 'images/p20003/2025-03-07/Dewar Five/PKK007/16/Mounting_2025-03-06_14-31-00/90_200.jpg', 'status': 'active', 'comment': None, 'id': 3}\n", - "Uploading 0_700.jpg...\n", - "API Response for 0_700.jpg:\n", - "200\n", - "{'pgroup': 'p20003', 'sample_id': 299, 'sample_event_id': 572, 'filepath': 'images/p20003/2025-03-07/Dewar Five/PKK007/16/Mounting_2025-03-06_14-31-00/0_700.jpg', 'status': 'active', 'comment': None, 'id': 4}\n", - "Uploading 90_700.jpg...\n", - "API Response for 90_700.jpg:\n", - "200\n", - "{'pgroup': 'p20003', 'sample_id': 299, 'sample_event_id': 572, 'filepath': 'images/p20003/2025-03-07/Dewar Five/PKK007/16/Mounting_2025-03-06_14-31-00/90_700.jpg', 'status': 'active', 'comment': None, 'id': 5}\n" + "Uploading mount.jpeg.jpg...\n", + "API Response for mount.jpeg.jpg:\n", + "404\n", + "{'detail': 'Sample not found'}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n", - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n", - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", - " warnings.warn(\n", "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] } ], - "execution_count": 47 + "execution_count": 2 }, { "metadata": {}, -- GitLab