From 616fcacb60d76460d8ddd209c4237f836effe797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Thu, 19 Mar 2026 09:36:31 +0100 Subject: [PATCH] cleanup in docker --- deploy_docker.sh | 13 +++--- Dockerfile => docker/Dockerfile | 10 +---- docker/Dockerfile.alpine | 46 +++++++++++++++++++++ docker/Dockerfile.debian-slim | 27 ++++++++++++ docker/Dockerfile.debian-stable-slim | 27 ++++++++++++ docker-compose.yml => docker/compose.yml | 25 +++++------ docker/requirements-stable.txt | 21 ++++++++++ requirements.txt => docker/requirements.txt | 0 8 files changed, 140 insertions(+), 29 deletions(-) rename Dockerfile => docker/Dockerfile (66%) create mode 100644 docker/Dockerfile.alpine create mode 100644 docker/Dockerfile.debian-slim create mode 100644 docker/Dockerfile.debian-stable-slim rename docker-compose.yml => docker/compose.yml (82%) create mode 100644 docker/requirements-stable.txt rename requirements.txt => docker/requirements.txt (100%) diff --git a/deploy_docker.sh b/deploy_docker.sh index 2e53b07..fc45d18 100644 --- a/deploy_docker.sh +++ b/deploy_docker.sh @@ -1,7 +1,6 @@ #!/bin/bash set -e -# --- Wczytaj zmienne z .env --- if [[ -f .env ]]; then set -a source .env @@ -9,8 +8,8 @@ if [[ -f .env ]]; then fi APP_PORT="${APP_PORT:-8080}" - PROFILE=$1 +COMPOSE_FILE="docker/compose.yml" if [[ -z "$PROFILE" ]]; then echo "Użycie: $0 {pgsql|mysql|sqlite}" @@ -19,9 +18,9 @@ fi echo "Zatrzymuję kontenery aplikacji i bazy..." if [[ "$PROFILE" == "sqlite" ]]; then - docker compose stop + docker compose -f "$COMPOSE_FILE" stop else - docker compose --profile "$PROFILE" stop + docker compose -f "$COMPOSE_FILE" --profile "$PROFILE" stop fi echo "Pobieram najnowszy kod z repozytorium..." @@ -35,9 +34,9 @@ git rev-parse --short HEAD > version.txt echo "Buduję i uruchamiam kontenery..." if [[ "$PROFILE" == "sqlite" ]]; then - docker compose up -d --build + docker compose -f "$COMPOSE_FILE" up -d --build else - DB_ENGINE="$PROFILE" docker compose --profile "$PROFILE" up -d --build + DB_ENGINE="$PROFILE" docker compose -f "$COMPOSE_FILE" --profile "$PROFILE" up -d --build fi -echo "Gotowe! Wersja aplikacji: $(cat version.txt)" +echo "Gotowe! Wersja aplikacji: $(cat version.txt)" \ No newline at end of file diff --git a/Dockerfile b/docker/Dockerfile similarity index 66% rename from Dockerfile rename to docker/Dockerfile index 9f70744..af733a3 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -1,8 +1,6 @@ FROM python:3.14-trixie -#FROM python:3.13-slim WORKDIR /app -# Zależności systemowe do OCR, obrazów, tesseract i języka PL RUN apt-get update && apt-get install -y --no-install-recommends \ tesseract-ocr \ tesseract-ocr-pol \ @@ -14,21 +12,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -# Kopiujemy wymagania COPY requirements.txt requirements.txt -# Instalujemy zależności +RUN pip install --upgrade pip RUN pip install --no-cache-dir -r requirements.txt -# Kopiujemy resztę aplikacji COPY . . -# Kopiujemy entrypoint i ustawiamy uprawnienia COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh -# Otwieramy port + #EXPOSE 8000 -# Ustawiamy entrypoint ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine new file mode 100644 index 0000000..efc4c9e --- /dev/null +++ b/docker/Dockerfile.alpine @@ -0,0 +1,46 @@ +FROM python:3.14-alpine + +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +RUN apk add --no-cache \ + tesseract-ocr \ + tesseract-ocr-data-pol \ + poppler-utils \ + libstdc++ \ + libffi \ + openssl \ + postgresql-libs \ + zlib \ + jpeg \ + libpng \ + openblas \ + && apk add --no-cache --virtual .build-deps \ + build-base \ + python3-dev \ + musl-dev \ + linux-headers \ + libffi-dev \ + openssl-dev \ + postgresql-dev \ + zlib-dev \ + jpeg-dev \ + libpng-dev \ + openblas-dev \ + cmake \ + cargo \ + rust + +COPY requirements-stable.txt /app/requirements-stable.txt + +RUN pip install --no-cache-dir --upgrade pip setuptools wheel \ + && pip install --no-cache-dir -r /app/requirements-stable.txt + +COPY . . + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/Dockerfile.debian-slim b/docker/Dockerfile.debian-slim new file mode 100644 index 0000000..88debbf --- /dev/null +++ b/docker/Dockerfile.debian-slim @@ -0,0 +1,27 @@ +FROM python:3.14-slim-trixie +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + tesseract-ocr \ + tesseract-ocr-pol \ + libglib2.0-0 \ + libsm6 \ + libxrender1 \ + libxext6 \ + poppler-utils \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt requirements.txt + +RUN pip install --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +#EXPOSE 8000 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/Dockerfile.debian-stable-slim b/docker/Dockerfile.debian-stable-slim new file mode 100644 index 0000000..d95066e --- /dev/null +++ b/docker/Dockerfile.debian-stable-slim @@ -0,0 +1,27 @@ +FROM python:3.14-slim-trixie +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + tesseract-ocr \ + tesseract-ocr-pol \ + libglib2.0-0 \ + libsm6 \ + libxrender1 \ + libxext6 \ + poppler-utils \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements-stable.txt requirements.txt + +RUN pip install --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +#EXPOSE 8000 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker-compose.yml b/docker/compose.yml similarity index 82% rename from docker-compose.yml rename to docker/compose.yml index 12fa9ca..8fb1486 100644 --- a/docker-compose.yml +++ b/docker/compose.yml @@ -1,14 +1,11 @@ services: app: - build: . + build: + context: .. + dockerfile: docker/Dockerfile.debian-stable-slim container_name: lista-zakupow-app expose: - "${APP_PORT:-8000}" - - # temporary - #ports: - # - "9281:${APP_PORT:-8000}" - healthcheck: test: [ @@ -22,11 +19,11 @@ services: retries: 3 start_period: 10s env_file: - - .env + - ../.env volumes: - - .:/app - - ./uploads:/app/uploads - - ./instance:/app/instance + - ../:/app + - ../uploads:/app/uploads + - ../instance:/app/instance networks: - lista-zakupow_network restart: unless-stopped @@ -40,7 +37,7 @@ services: ports: - "${APP_PORT:-8000}:80" volumes: - - ./deploy/varnish/default.vcl:/etc/varnish/default.vcl:ro + - ../deploy/varnish/default.vcl:/etc/varnish/default.vcl:ro environment: - VARNISH_SIZE=256m networks: @@ -56,7 +53,7 @@ services: MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: 89o38kUX5T4C volumes: - - ./db/mysql:/var/lib/mysql + - ../db/mysql:/var/lib/mysql restart: unless-stopped networks: - lista-zakupow_network @@ -71,7 +68,7 @@ services: POSTGRES_PASSWORD: ${DB_PASSWORD} PGDATA: /var/lib/postgresql volumes: - - ./db/pgsql/:/var/lib/postgresql + - ../db/pgsql:/var/lib/postgresql networks: - lista-zakupow_network restart: unless-stopped @@ -79,4 +76,4 @@ services: networks: lista-zakupow_network: - driver: bridge + driver: bridge \ No newline at end of file diff --git a/docker/requirements-stable.txt b/docker/requirements-stable.txt new file mode 100644 index 0000000..ed22c5c --- /dev/null +++ b/docker/requirements-stable.txt @@ -0,0 +1,21 @@ +bcrypt==5.0.0 +cryptography==46.0.5 +Flask==3.1.3 +Flask-Compress==1.23 +Flask-Login==0.6.3 +Flask-Session==0.8.0 +Flask-SocketIO==5.6.1 +Flask-SQLAlchemy==3.1.1 +flask-talisman==1.1.0 +gevent==25.9.1 +gevent-websocket==0.10.1 +opencv-python-headless>=4.12.0.88 +pdf2image==1.17.0 +pillow==12.1.1 +pillow_heif==1.3.0 +psutil==7.2.2 +psycopg2-binary==2.9.11 +PyMySQL==1.1.2 +pytesseract==0.3.13 +SQLAlchemy==2.0.48 +Werkzeug==3.1.6 diff --git a/requirements.txt b/docker/requirements.txt similarity index 100% rename from requirements.txt rename to docker/requirements.txt