From ae9556df5e3431ba568bdd9cbd56a96f808f65b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pasternak?= Date: Sun, 12 Jul 2026 19:23:13 +0200 Subject: [PATCH] =?UTF-8?q?security:=20html2docx=20jako=20opcjonalny=20sid?= =?UTF-8?q?ecar=20HTTP;=20zdj=C4=99cie=20docker.sock=20z=20appservera?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domyka po stronie deploya poprawkę z iplweb/bpp#552 (fallback DOCX przez HTTP zamiast docker run). - appserver: usunięty mount /var/run/docker.sock (:ro). Nowy obraz appservera nie ma już Docker CLI ani nie woła dockera, więc socket to czysta liability (RCE -> przejęcie hosta). ofelia/autoheal/monitoring zachowują socket — to demony infry bez wejścia z sieci. - nowy serwis html2docx OPCJONALNY przez profil `html2docx` (off domyślnie). Bez published portu (tylko sieć wewnętrzna, `html2docx:3030`), bez healthchecka (obraz .NET nie ma curl/wget; restart:always wystarcza), pin przez HTML2DOCX_VERSION. - .env.sample: jak włączyć (COMPOSE_PROFILES=html2docx + DJANGO_BPP_HTML2DOCX_URL w ${BPP_CONFIGS_DIR}/.env). Brak URL => fallback wyłączony (miękka degradacja). Zweryfikowane: docker compose config exit=0; profil OFF => 0 serwisów html2docx, profil ON => 1; appserver bez docker.sock w zmergowanym configu. Co-Authored-By: Claude Opus 4.8 (1M context) --- .env.sample | 22 ++++++++++++++++++++++ docker-compose.application.yml | 20 +++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/.env.sample b/.env.sample index 2bc28c7..464d78b 100644 --- a/.env.sample +++ b/.env.sample @@ -11,3 +11,25 @@ # BPP_CONFIGS_DIR=/home/deploy/publikacje-uczelnia # BPP_CONFIGS_DIR= + +# ── Opcjonalny sidecar html2docx (konwersja HTML->DOCX) ────────────────── +# +# Serwis `html2docx` jest OPCJONALNY i domyslnie WYLACZONY. Wlacz go tylko +# tam, gdzie potrzebny jest fallback konwersji DOCX (pandoc pada np. core +# dumpem na VMWare ESX). Wlaczenie = DWA kroki: +# +# 1) Dodaj profil `html2docx` do COMPOSE_PROFILES TUTAJ (ten plik czyta +# Docker Compose do aktywacji profili). Jesli masz juz inne profile, +# DOPISZ przecinkiem, nie nadpisuj: +# +# COMPOSE_PROFILES=html2docx +# +# 2) Ustaw adres uslugi w ${BPP_CONFIGS_DIR}/.env (plik konfiguracyjny +# instancji, ladowany do kontenerow appserver/worker): +# +# DJANGO_BPP_HTML2DOCX_URL=http://html2docx:3030/convert +# +# Brak tej zmiennej => fallback wylaczony (miekka degradacja, bez crasha). +# Opcjonalny pin wersji obrazu: HTML2DOCX_VERSION= (domyslnie latest). +# +# COMPOSE_PROFILES= diff --git a/docker-compose.application.yml b/docker-compose.application.yml index 8b8ac59..e6bc02c 100644 --- a/docker-compose.application.yml +++ b/docker-compose.application.yml @@ -92,7 +92,6 @@ services: volumes: - staticfiles:/staticroot - media:/mediaroot - - /var/run/docker.sock:/var/run/docker.sock:ro depends_on: redis: condition: service_healthy @@ -160,6 +159,25 @@ services: ofelia.job-run.letsencrypt_renew.volume: "${COMPOSE_PROJECT_NAME}_acme-challenge:/var/www/certbot,${BPP_CONFIGS_DIR}/letsencrypt:/etc/letsencrypt" ofelia.job-run.letsencrypt_renew.command: "renew --webroot -w /var/www/certbot --quiet --deploy-hook \"touch /etc/letsencrypt/.reload-needed\"" + # === html2docx === + # OPCJONALNY sidecar konwersji HTML->DOCX (fallback gdy pandoc padnie, np. + # core dump na VMWare ESX). Domyslnie WYLACZONY - startuje tylko gdy profil + # `html2docx` jest w COMPOSE_PROFILES (repo-lokalny .env). Deployment, ktory + # go wlacza, musi tez ustawic DJANGO_BPP_HTML2DOCX_URL w ${BPP_CONFIGS_DIR}/.env + # (patrz .env.sample) - inaczej appserver/worker maja fallback wylaczony + # (miekka degradacja, bez crasha). + # + # Bez published portu (tylko siec wewnetrzna projektu, osiagalny jako + # `html2docx:3030`). Bez healthchecka: obraz .NET nie ma curl/wget, + # restart:always wystarcza. Bez docker.sock - to byla cala pointa zmiany. + # Obraz wersjonowany niezaleznie od DOCKER_VERSION bpp (pin przez + # HTML2DOCX_VERSION w .env). + html2docx: + image: iplweb/html2docx:${HTML2DOCX_VERSION:-latest} + profiles: ['html2docx'] + restart: always + logging: *default-logging + # === Certbot === # Sidecar uruchamiany na zadanie ('docker compose run --rm certbot ...') # przez make ssl-letsencrypt-issue / make ssl-letsencrypt-renew. NIE startuje