Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker #88

Draft
wants to merge 31 commits into
base: master
Choose a base branch
from
Draft

Docker #88

wants to merge 31 commits into from

Conversation

SimonFrank14
Copy link

Dieser PR macht den IdP lauffähig unter Docker

  • Dockerfile und Docker Compose hinzugefügt
  • default nginx config hinzugefügt für nginx in Docker (kann noch ausgebaut werden und per Volume Mount hinzugefügt werden)
  • startup.sh Skript für erstmalige Konfigurationen beim ersten Start des Containers

Noch ausstehend:

  • Prüfen welche Dateien tatsächlich kopiert werden müssen und Docker Image verkleinern
  • Auto Push zur Docker Registry via Github Pipeline

Dockerfile Outdated
COPY . .

# Install PHP dependencies including symfony/runtime
RUN composer install --classmap-authoritative --no-scripts
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--no-dev Flag hinzufügen, wenn fertig mit testen

@SimonFrank14
Copy link
Author

Ich erhalte aktuell auf der Seite Registrierungscodes erstellen noch einen Fehler über ein fehlendes DB Feld und auch beim hinzufügen des Users fehlt wohl ein Standardwert für das Email Verification Feld.

Entweder ist hier was in den Migrationen falsch oder man müsste nochmal in das Anlegen der User und der Codes schauen.

Ansonsten funktioniert auf den ersten Blick alles.

@SimonFrank14
Copy link
Author

@frostieDE Kannst du mir hier weiterhelfen?

@frostieDE
Copy link
Contributor

Prüfen welche Dateien tatsächlich kopiert werden müssen und Docker Image verkleinern

Im Grunde kann der gesamte node_modules-Ordner weg - nachdem npm run build aufgerufen wurde und Webpack fertig ist, können alle JS-Abhängigkeiten weg, da sie gebundelt unter public/build/ zu finden sind.

@frostieDE
Copy link
Contributor

Ich kenne mich zwar nicht 100%ig mit Docker aus, aber was spricht dagegen, dass man nginx und php-fpm als zwei Container getrennt laufen lässt? (außer natürlich Overhead)

Ist das üblich, dass man die Anwendung gemeinsam mit nginx in einen eigenen Container schmeißt?

@SimonFrank14
Copy link
Author

Im Grunde kann der gesamte node_modules-Ordner weg - nachdem npm run build aufgerufen wurde und Webpack fertig ist, können alle JS-Abhängigkeiten weg, da sie gebundelt unter public/build/ zu finden sind.

Das passiert schon jetzt. Allerdings habe ich noch den kompletten Quellcode im Container und das ist ein wenig overhead glaube ich. Außer wir brauchen den tatsächlich...

@frostieDE
Copy link
Contributor

Ich erhalte aktuell auf der Seite Registrierungscodes erstellen noch einen Fehler über ein fehlendes DB Feld und auch beim hinzufügen des Users fehlt wohl ein Standardwert für das Email Verification Feld.

Entweder ist hier was in den Migrationen falsch oder man müsste nochmal in das Anlegen der User und der Codes schauen.

Ansonsten funktioniert auf den ersten Blick alles.

Ich schaue mir das die Tage mal an - auf den ersten Blick sollte das ja nicht an Docker liegen sondern ein allgemeines Deployment-Problem sein :'(

@SimonFrank14
Copy link
Author

Ich kenne mich zwar nicht 100%ig mit Docker aus, aber was spricht dagegen, dass man nginx und php-fpm als zwei Container getrennt laufen lässt? (außer natürlich Overhead)

Ist das üblich, dass man die Anwendung gemeinsam mit nginx in einen eigenen Container schmeißt?

Kann man so oder so machen. Schöner ist es aber wenn die Dienste getrennt sind. In dem Fall müsste man nochmal an die nginx Config ran, damit der die PHP Dateien aus dem anderen Container hostet. Dafür müsste man allerdings nur den fastcgi_pass Parameter auf <container_name>:9000 setzen, wenn ich das gerade richtig sehe.

Dann hätten wir drei Dienste pro Stack / Docker Compose:

  • nginx
  • php
  • db

@frostieDE
Copy link
Contributor

Es gab tatsächlich eine problematische Migration - habe ich mit c46516e behoben. Das sollte dann die Fehlermeldungen lösen. Ich empfehle, die bisher entstandene Datenbank zu löschen.

@SimonFrank14
Copy link
Author

Es gab tatsächlich eine problematische Migration - habe ich mit c46516e behoben. Das sollte dann die Fehlermeldungen lösen. Ich empfehle, die bisher entstandene Datenbank zu löschen.

Ok. Dann teste ich das später mal. Ich würde vorschlagen, dass wir das Image dann per GitHub Action automatisch bauen und in die Docker Registry laden. Dafür braucht man aber einen Account. Ich teste das erstmal auf meinem Account, aber für's mergen sollten wir dann am Besten einen Account für die ganze SchulIT Umgebung nutzen.

@SimonFrank14
Copy link
Author

Im Grunde kann der gesamte node_modules-Ordner weg - nachdem npm run build aufgerufen wurde und Webpack fertig ist, können alle JS-Abhängigkeiten weg, da sie gebundelt unter public/build/ zu finden sind.

Das passiert schon jetzt. Allerdings habe ich noch den kompletten Quellcode im Container und das ist ein wenig overhead glaube ich. Außer wir brauchen den tatsächlich...

Brauchen wir abgesehen von dem Node Modules Ordner alle Dateien aus dem Repo?

Und welche Volumes sollten noch persistent gespeichert werden abgesehen von der DB?

@frostieDE
Copy link
Contributor

Brauchen wir abgesehen von dem Node Modules Ordner alle Dateien aus dem Repo?

  • docs/ kann gelöscht werden, da der Ordner die Online-Dokumentation enthält. Die wird lokal im Projekt nicht eingebunden und muss somit nicht ins Image
  • .github wird für GitHub Actions benötigt und muss auch nicht ins Image
  • public/.htaccess kann theoretisch auch gelöscht werden, da wir im Image Apache nicht nutzen

Beim Ordner tests/ müsste mal prüfen, ob man den gefahrlos löschen kann. Der dort enthaltende Quelltext wird zwar nicht zur Laufzeit benötigt, aber ich weiß nicht, inwiefern der Namespace irgendwo eingebunden ist.

Alle anderen Dateien müssen jedoch im Image landen.

@frostieDE
Copy link
Contributor

Und welche Volumes sollten noch persistent gespeichert werden abgesehen von der DB?

Der Ordner certs/ enthält die Zertifikate für den Identity Provider, die natürlich pro Instanz anders sind. Müsste also in ein Volume?! (kenne mich zu wenig mit Docker aus...)

Ansonsten gibt es halt noch die Datei .env.local, welche die Konfigurationsdatei darstellt.

Alles andere ist (statischer) Quelltext und kommt ins Image.

@SimonFrank14
Copy link
Author

Ich kenne mich zwar nicht 100%ig mit Docker aus, aber was spricht dagegen, dass man nginx und php-fpm als zwei Container getrennt laufen lässt? (außer natürlich Overhead)
Ist das üblich, dass man die Anwendung gemeinsam mit nginx in einen eigenen Container schmeißt?

Kann man so oder so machen. Schöner ist es aber wenn die Dienste getrennt sind. In dem Fall müsste man nochmal an die nginx Config ran, damit der die PHP Dateien aus dem anderen Container hostet. Dafür müsste man allerdings nur den fastcgi_pass Parameter auf <container_name>:9000 setzen, wenn ich das gerade richtig sehe.

Dann hätten wir drei Dienste pro Stack / Docker Compose:

  • nginx
  • php
  • db

Ich habe das hier gerade einmal ausprobiert. Das macht für uns einfach keinen Sinn das zu trennen. Wir müssten den Code sowohl in den nginx Container als auch in den fpm Container rein reichen. Dafür müssten wir ein Volume haben und dort den Code vom Docker Host aus reinladen. Das macht einfach keinen Sinn und das Setup nur deutlich komplizierter. Ich halte es für einfacher, wenn es einen Web Container gibt, der den kompletten PHP und nginx Service beinhaltet und einen separaten DB Service. Das Verlinken von verschiedenen Diensten in einem nginx würde eh wegen der Docker Netzwerk Isolation nicht den Standards entsprechen

- Removed unnecessary files
- Added db ready check in docker compose --> WEB Container only starts after db with migrations etc.
- Set Timezone for Docker Container
- Integrated DB Env Vars in .env.local and .env
- persist cert folder of web service
@SimonFrank14
Copy link
Author

SimonFrank14 commented Aug 1, 2024

Ich habe noch ein Problem mit dem Docker Image:

Seit dem Merge erhalte ich den folgenden Fehler:

5.711 > build
5.711 > encore production
5.711
5.786 Browserslist: caniuse-lite is outdated. Please run:
5.786   npx update-browserslist-db@latest
5.786   Why you should do it regularly: https://github.com/browserslist/update-db#readme
5.793 Running webpack ...
5.793
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
12.73  DONE  Compiled successfully in 6569ms9:58:16 PM
12.73
12.73 16 files written to public/build
12.73 webpack compiled successfully
17.58 21:58:16 CRITICAL  [console] Error thrown while running command "assets:install". Message: "Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleSubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/ContainerCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected" ["exception" => ArgumentCountError { …},"command" => "assets:install","message" => "Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleSubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/ContainerCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected"]
21.32
21.32 In ConsoleSubscriber.php line 13:
21.32
21.32   Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleS
21.32   ubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/Containe
21.32   rCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected
21.32
21.32
21.32 assets:install [--symlink] [--relative] [--no-cleanup] [--] [<target>]
21.32
------
failed to solve: process "/bin/sh -c npm install     && npm run build     && php bin/console assets:install" did not complete successfully: exit code: 255

Hast du eine Idee, woran das liegen könnte?

Mit Commit 42edb49 funktioniert noch alles.

@SimonFrank14
Copy link
Author

Es gab tatsächlich eine problematische Migration - habe ich mit c46516e behoben. Das sollte dann die Fehlermeldungen lösen. Ich empfehle, die bisher entstandene Datenbank zu löschen.

Ok. Dann teste ich das später mal. Ich würde vorschlagen, dass wir das Image dann per GitHub Action automatisch bauen und in die Docker Registry laden. Dafür braucht man aber einen Account. Ich teste das erstmal auf meinem Account, aber für's mergen sollten wir dann am Besten einen Account für die ganze SchulIT Umgebung nutzen.

Ich konnte es leider noch nicht testen, weil ich den Branch noch nicht bauen kann (s.o.)

@SimonFrank14
Copy link
Author

Ich habe noch ein Problem mit dem Docker Image:

Seit dem Merge erhalte ich den folgenden Fehler:

5.711 > build
5.711 > encore production
5.711
5.786 Browserslist: caniuse-lite is outdated. Please run:
5.786   npx update-browserslist-db@latest
5.786   Why you should do it regularly: https://github.com/browserslist/update-db#readme
5.793 Running webpack ...
5.793
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
12.73  DONE  Compiled successfully in 6569ms9:58:16 PM
12.73
12.73 16 files written to public/build
12.73 webpack compiled successfully
17.58 21:58:16 CRITICAL  [console] Error thrown while running command "assets:install". Message: "Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleSubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/ContainerCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected" ["exception" => ArgumentCountError { …},"command" => "assets:install","message" => "Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleSubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/ContainerCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected"]
21.32
21.32 In ConsoleSubscriber.php line 13:
21.32
21.32   Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleS
21.32   ubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/Containe
21.32   rCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected
21.32
21.32
21.32 assets:install [--symlink] [--relative] [--no-cleanup] [--] [<target>]
21.32
------
failed to solve: process "/bin/sh -c npm install     && npm run build     && php bin/console assets:install" did not complete successfully: exit code: 255

Hast du eine Idee, woran das liegen könnte?

Mit Commit 42edb49 funktioniert noch alles.

Scheinbar läuft der Build auf anderen Maschinen (wie z.B. der Github Action) durch.

Zum Testen enfach docker build ./ im Repo machen, wenn Docker läuft. Ich tippe mal auf irgendeinen Cache bei mir, der nicht aufgeräumt wurde, muss ich nochmal nach suchen

@SimonFrank14
Copy link
Author

Ich habe noch ein Problem mit dem Docker Image:
Seit dem Merge erhalte ich den folgenden Fehler:

5.711 > build
5.711 > encore production
5.711
5.786 Browserslist: caniuse-lite is outdated. Please run:
5.786   npx update-browserslist-db@latest
5.786   Why you should do it regularly: https://github.com/browserslist/update-db#readme
5.793 Running webpack ...
5.793
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
11.86 Browserslist: caniuse-lite is outdated. Please run:
11.86   npx update-browserslist-db@latest
11.86   Why you should do it regularly: https://github.com/browserslist/update-db#readme
12.73  DONE  Compiled successfully in 6569ms9:58:16 PM
12.73
12.73 16 files written to public/build
12.73 webpack compiled successfully
17.58 21:58:16 CRITICAL  [console] Error thrown while running command "assets:install". Message: "Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleSubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/ContainerCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected" ["exception" => ArgumentCountError { …},"command" => "assets:install","message" => "Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleSubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/ContainerCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected"]
21.32
21.32 In ConsoleSubscriber.php line 13:
21.32
21.32   Too few arguments to function SchulIT\CommonBundle\EventSubscriber\ConsoleS
21.32   ubscriber::__construct(), 0 passed in /var/www/html/var/cache/prod/Containe
21.32   rCJnuec6/getConsoleSubscriberService.php on line 21 and exactly 2 expected
21.32
21.32
21.32 assets:install [--symlink] [--relative] [--no-cleanup] [--] [<target>]
21.32
------
failed to solve: process "/bin/sh -c npm install     && npm run build     && php bin/console assets:install" did not complete successfully: exit code: 255

Hast du eine Idee, woran das liegen könnte?
Mit Commit 42edb49 funktioniert noch alles.

Scheinbar läuft der Build auf anderen Maschinen (wie z.B. der Github Action) durch.

Zum Testen enfach docker build ./ im Repo machen, wenn Docker läuft. Ich tippe mal auf irgendeinen Cache bei mir, der nicht aufgeräumt wurde, muss ich nochmal nach suchen

Ok, bei mir klappt es jetzt auch auf dem Rechner, nachdem ich das Repo nochmal neu gepullt habe. Dann könnte man das von mir aus mergen. Ich habe auch schon ein Test Deploy auf unserem Docker Schul-Server hinbekommen.

@SimonFrank14
Copy link
Author

Man könnte jetzt noch das Repo für den Upload im Docker Hub ändern.

@SimonFrank14
Copy link
Author

Die Doku habe ich auch schon angepasst. Ich stelle den Branch mal auf Ready to merge. Du kannst ja dann mal mit Ruhe über alles drüber schauen.

@SimonFrank14 SimonFrank14 marked this pull request as ready for review August 1, 2024 23:49
@frostieDE
Copy link
Contributor

Eine Sache, die im Image noch fehlt (sorry, die Dokumentation dazu ist versteckt), sind Cronjobs... https://docs.schulit.de/idp/guides/cronjobs#cronjobs-auf-betriebssystemebene-ausf%C3%BChren

Kann man das mittels Crontab in Docker Images lösen?

@SimonFrank14
Copy link
Author

Eine Sache, die im Image noch fehlt (sorry, die Dokumentation dazu ist versteckt), sind Cronjobs... https://docs.schulit.de/idp/guides/cronjobs#cronjobs-auf-betriebssystemebene-ausf%C3%BChren

Kann man das mittels Crontab in Docker Images lösen?

Ich hätte zwei Ideen, müsste ich aber noch im Detail prüfen:

  1. Man greift über Docker auf die Konsole von PHP zu. Habe ich in der neuen Doku genutzt, um den Benutzer anzulegen:
docker exec it <container_name> /usr/bin/php /var/www/html/bin/console shapecode:cron:run
  1. Oder man könnte auch schauen, ob man crontab noch mit ins Image einbinden kann.

* Added Github Action to automatically build image (#2)

Create Pipeline for auto publish on release

* Added restart prop to web container

* boost startup of web container after db ready

* added docker installation docu
@SimonFrank14 SimonFrank14 marked this pull request as draft August 3, 2024 23:11
@SimonFrank14
Copy link
Author

Noch ToDo:

  • Pipeline anpassen
  • Externen Cron Job testen
  • Lokaler Docker Build schlägt aktuell plötzlich wieder fehl --> Da muss ich mal nach dem Fehler suchen

@SimonFrank14
Copy link
Author

Der Fehler hängt mit dem --no-dev Flag im Composer zusammen. Hier fehlt scheinbar ein Modul (zumindest, wenn ich den dev Mode in den env wieder anschalte). Ich weiß jetzt allerdings nicht, ob das fehlende Modul jetzt nur im dev Mode als Fehlermeldung geworfen wird oder nicht, weil der Build ja nach wie vor ein Prod Build ist.

Ohne no-dev Flag läuft es aber sauber durch und lässt sich auch starten

image

* Added Github Action to automatically build image (#2)

Create Pipeline for auto publish on release

* Added restart prop to web container

* boost startup of web container after db ready

* added docker installation docu

* nginx fix
@frostieDE
Copy link
Contributor

Der Fehler hängt mit dem --no-dev Flag im Composer zusammen. Hier fehlt scheinbar ein Modul (zumindest, wenn ich den dev Mode in den env wieder anschalte). Ich weiß jetzt allerdings nicht, ob das fehlende Modul jetzt nur im dev Mode als Fehlermeldung geworfen wird oder nicht, weil der Build ja nach wie vor ein Prod Build ist.

Ohne no-dev Flag läuft es aber sauber durch und lässt sich auch starten

image

Ursache: Die Umgebungsvariable ENV ist noch auf dev anstatt auf prod gestellt. Allerdings liegt das nicht an einer fehlenden .env.local-Datei, da die Variable in .env definiert wird und standardmäßig auf prod gestellt ist.

@frostieDE
Copy link
Contributor

Nachtrag (mal wieder nicht richtig gelesen...): Schau mal ins Log (var/log/prod.log), ob dort eine Fehlermeldung auftaucht. Für den Fall, dass du in die Dev-Umgebung wechseln willst, musst du den Composer-Befehl ohne --no-dev ausführen. (Hintergrund ist der, dass Composer im Falle der prod-Umgebung den ganzen Dev-Krams nicht herunterladen und einbinden soll)

@frostieDE
Copy link
Contributor

Eine Sache, die im Image noch fehlt (sorry, die Dokumentation dazu ist versteckt), sind Cronjobs... https://docs.schulit.de/idp/guides/cronjobs#cronjobs-auf-betriebssystemebene-ausf%C3%BChren
Kann man das mittels Crontab in Docker Images lösen?

Ich hätte zwei Ideen, müsste ich aber noch im Detail prüfen:

1. Man greift über Docker auf die Konsole von PHP zu. Habe ich in der neuen Doku genutzt, um den Benutzer anzulegen:
docker exec it <container_name> /usr/bin/php /var/www/html/bin/console shapecode:cron:run
2. Oder man könnte auch schauen, ob man crontab noch mit ins Image einbinden kann.

Lösung 1 erscheint mir natürlich flexibler (weil man kann dann selbst entscheiden, ob man Crontab oder bspw. systemd nutzt - ich nutze letzteres), aber Lösung 2 hat den Charme, dass es "out-of-the-box" funktioniert. Ich kenne mich nicht so wahnsinnig gut in der Dockerwelt aus, aber ich hätte vermutlich erwartet, dass das Docker-Image "out-of-the-box" funktioniert (und würde daher Lösung 2 vorschlagen). Aber ich nehme sehr gerne Gegenargumente an :)

@SimonFrank14
Copy link
Author

SimonFrank14 commented Aug 4, 2024

Eine Sache, die im Image noch fehlt (sorry, die Dokumentation dazu ist versteckt), sind Cronjobs... https://docs.schulit.de/idp/guides/cronjobs#cronjobs-auf-betriebssystemebene-ausf%C3%BChren
Kann man das mittels Crontab in Docker Images lösen?

Ich hätte zwei Ideen, müsste ich aber noch im Detail prüfen:

1. Man greift über Docker auf die Konsole von PHP zu. Habe ich in der neuen Doku genutzt, um den Benutzer anzulegen:
docker exec it <container_name> /usr/bin/php /var/www/html/bin/console shapecode:cron:run
2. Oder man könnte auch schauen, ob man crontab noch mit ins Image einbinden kann.

Lösung 1 erscheint mir natürlich flexibler (weil man kann dann selbst entscheiden, ob man Crontab oder bspw. systemd nutzt - ich nutze letzteres), aber Lösung 2 hat den Charme, dass es "out-of-the-box" funktioniert. Ich kenne mich nicht so wahnsinnig gut in der Dockerwelt aus, aber ich hätte vermutlich erwartet, dass das Docker-Image "out-of-the-box" funktioniert (und würde daher Lösung 2 vorschlagen). Aber ich nehme sehr gerne Gegenargumente an :)

Ich habe beides noch nicht genutzt und müsste mir Mal anschauen, wie man die nutzt.

Per Kommandozeile auf den Container zugreifen finde ich jetzt auch nicht so schön, zumal sich der Name oder die ID ja auch schnell ändern können und es dann zu Fehlern kommt.

Ich würde mal schauen, ob man den Zugriff nach außen schön gestaltet bekommt, sodass man crontab oder systemd als zusätzlichen Service in der Docker Compose definieren kann.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants