diff --git a/docker-compose.yml b/docker-compose.yml index 585fe90..1aaccba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,29 @@ name: omsorg -# WICHTIG (der fehleranfälligste Punkt in diesem Setup): -# - omsorgapp.build.args.VITE_OMSORG_CORE_URL muss die vom BROWSER erreichbare Adresse von -# omsorgcore sein (hier: der auf dem Host published Port), NICHT der interne Compose-DNS-Name - -# Vite bäckt diese URL zur Build-Zeit in den JS-Bundle ein (siehe omsorgapp/src/api/config.js). -# - omsorgweb.environment.OMSORG_CORE_URL ist dagegen der interne Servicename (http://omsorgcore:8080), -# da PHP dort serverseitig per cURL aufruft (kein Browser-Kontext), siehe -# omsorgWeb/docker/bootstrap-config.php. +# Zieht fertig gebaute Images aus der Gitea-Registry (siehe .gitea/workflows/docker-build.yml), +# baut hier bewusst NICHT lokal - die Dockerfiles in omsorgCore/, omsorgapp/, omsorgWeb/ sind +# weiterhin da, werden aber nur noch von der CI verwendet. Vor `docker compose pull`/`up` einmal +# `docker login git.omsorg-pflegedienste.de` auf dem Server ausführen, falls die Images/Packages +# nicht öffentlich lesbar sind. Über OMSORG_IMAGE_TAG lässt sich ein bestimmter Versions-Tag +# pinnen (z.B. `OMSORG_IMAGE_TAG=v0.1.0 docker compose up -d`), Default ist `latest`. +# +# WICHTIG: omsorgapp bäckt die omsorgCore-URL (VITE_OMSORG_CORE_URL) zur BUILD-Zeit in den +# JS-Bundle ein (siehe omsorgapp/src/api/config.js) - das passiert jetzt in der CI über die +# Repo-Variable OMSORG_CORE_PUBLIC_URL, nicht mehr hier. omsorgweb.environment.OMSORG_CORE_URL +# ist davon unabhängig und bleibt der interne Compose-Servicename, da PHP dort serverseitig per +# cURL aufruft (kein Browser-Kontext), siehe omsorgWeb/docker/bootstrap-config.php. +# +# Alle persistenten Daten liegen bewusst als Bind-Mounts unter /root/data/ auf der Platte (keine +# benannten Docker-Volumes) - vor dem ersten `docker compose up` einmalig anlegen: +# mkdir -p /root/data/postgres /root/data/omsorgcore/documents \ +# /root/data/omsorgweb/{uploads,downloads,fortbildung-materials,avatars,data} +# Postgres läuft im Container als uid 999 (nicht root) - /root/data/postgres muss dieser uid +# gehören, sonst schlägt der Start mit einem Permission-Fehler fehl: +# chown -R 999:999 /root/data/postgres +# +# mitarbeiter-app-legacy (Teil des omsorgweb-Images) ist Legacy-Code und braucht eigentlich MySQL - +# bewusst kein MySQL-Dienst mehr hier, die Legacy-App bleibt dadurch ohne DB-Anbindung (siehe +# omsorgWeb/CLAUDE.md - mitarbeiter-app-legacy wird nicht mehr weiterentwickelt). services: postgres: @@ -16,32 +33,15 @@ services: POSTGRES_USER: omsorg_core POSTGRES_PASSWORD: omsorg_core_dev_password volumes: - - postgres_data:/var/lib/postgresql/data + - /root/data/postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U omsorg_core"] interval: 5s timeout: 5s retries: 10 - mysql: - image: mysql:8.0 - environment: - MYSQL_DATABASE: omsorg_web - MYSQL_USER: omsorg_web - MYSQL_PASSWORD: omsorg_web_dev_password - MYSQL_ROOT_PASSWORD: omsorg_web_root_dev_password - volumes: - - mysql_data:/var/lib/mysql - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] - interval: 5s - timeout: 5s - retries: 10 - omsorgcore: - build: - context: . - dockerfile: omsorgCore/Dockerfile + image: git.omsorg-pflegedienste.de/admin/omsorg/omsorgcore:${OMSORG_IMAGE_TAG:-latest} depends_on: postgres: condition: service_healthy @@ -53,49 +53,27 @@ services: ports: - "8080:8080" volumes: - - omsorgcore_documents:/app/App_Data/documents + - /root/data/omsorgcore/documents:/app/App_Data/documents omsorgapp: - build: - context: . - dockerfile: omsorgapp/Dockerfile - args: - VITE_OMSORG_CORE_URL: "http://localhost:8080" + image: git.omsorg-pflegedienste.de/admin/omsorg/omsorgapp:${OMSORG_IMAGE_TAG:-latest} ports: - "5173:80" depends_on: - omsorgcore omsorgweb: - build: - context: . - dockerfile: omsorgWeb/Dockerfile + image: git.omsorg-pflegedienste.de/admin/omsorg/omsorgweb:${OMSORG_IMAGE_TAG:-latest} depends_on: - mysql: - condition: service_healthy omsorgcore: condition: service_started environment: - DB_HOST: mysql - DB_NAME: omsorg_web - DB_USER: omsorg_web - DB_PASSWORD: omsorg_web_dev_password OMSORG_CORE_URL: "http://omsorgcore:8080" ports: - "8081:80" volumes: - - web_uploads:/var/www/html/mitarbeiter-app-legacy/uploads - - web_downloads:/var/www/html/mitarbeiter-app-legacy/downloads - - web_fortbildung:/var/www/html/mitarbeiter-app-legacy/fortbildung-materials - - web_avatars:/var/www/html/mitarbeiter-app-legacy/assets/avatars - - web_data:/var/www/html/mitarbeiter-app-legacy/data - -volumes: - postgres_data: - mysql_data: - omsorgcore_documents: - web_uploads: - web_downloads: - web_fortbildung: - web_avatars: - web_data: + - /root/data/omsorgweb/uploads:/var/www/html/mitarbeiter-app-legacy/uploads + - /root/data/omsorgweb/downloads:/var/www/html/mitarbeiter-app-legacy/downloads + - /root/data/omsorgweb/fortbildung-materials:/var/www/html/mitarbeiter-app-legacy/fortbildung-materials + - /root/data/omsorgweb/avatars:/var/www/html/mitarbeiter-app-legacy/assets/avatars + - /root/data/omsorgweb/data:/var/www/html/mitarbeiter-app-legacy/data diff --git a/omsorgWeb/Dockerfile b/omsorgWeb/Dockerfile index e55635a..356be74 100644 --- a/omsorgWeb/Dockerfile +++ b/omsorgWeb/Dockerfile @@ -18,8 +18,16 @@ COPY omsorgWeb/ /var/www/html/ COPY .htaccess /var/www/html/.htaccess RUN chmod +x /var/www/html/docker/docker-entrypoint.sh \ - # Schreibbare Verzeichnisse für Datei-Uploads zur Laufzeit (siehe docker-compose.yml-Volumes) - - # Besitzer auf den Apache-User setzen, damit PHP dort schreiben kann. + # Schreibbare Verzeichnisse für Datei-Uploads zur Laufzeit (siehe docker-compose.yml-Volumes). + # Existieren im Repo NICHT zwingend (Root-.gitignore schließt sie komplett aus - lokal hatten + # sie bei mir Testdateien, ein frischer CI-Checkout hat sie gar nicht) - deshalb erst anlegen, + # dann Besitzer auf den Apache-User setzen, damit PHP dort schreiben kann. + && mkdir -p \ + /var/www/html/mitarbeiter-app-legacy/uploads \ + /var/www/html/mitarbeiter-app-legacy/downloads \ + /var/www/html/mitarbeiter-app-legacy/fortbildung-materials \ + /var/www/html/mitarbeiter-app-legacy/assets/avatars \ + /var/www/html/mitarbeiter-app-legacy/data \ && chown -R www-data:www-data \ /var/www/html/mitarbeiter-app-legacy/uploads \ /var/www/html/mitarbeiter-app-legacy/downloads \