LAMP-Webserver mittels Docker realisieren?


Dsimon24

Recommended Posts

Hallo zusammen,

 

mittlerweile bin ich ein klein wenig vertrauter mit unRAID als vor einigen Tagen.

 

Ich möchte gerne über unRAID mittels Docker einen LAMP-Webserver zum Entwickeln einiger Websites erstellen.

Gibt es dazu mglw. eine Anleitung, wie ich das Ganze mittels Docker realisieren kann? Leider habe ich bisher
noch keinerlei Berührungspunkte mit Docker. Vielleicht lässt sich das Ganze in sofern toppen, dass ich die dort
hinterlegten Websites auch zum Testen hosten und über das Internet verfügbar machen kann?

 

Ich freue mich auf euren Input. Vielleicht bekomme ich das Vorhaben tatsächlich realisiert.

 

VG, David

Link to comment

Du kannst grundsätzlich jeden Docker Container installieren, den du bei https://hub.docker.com/ findest. Der beliebteste LAMP scheint dieser zu sein:

https://hub.docker.com/r/mattrayner/lamp

 

 

Man muss nun schauen welche Variablen und Pfade zwingen notwendig sind. Aus den Beispiel-Kommandos erkenne ich, dass man den Port 80 benötigt und den Pfad "/app" und optional noch den Pfad "/var/lib/mysql".

 

Ich persönlich bin übrigens kein Fan von diesen "All in one" Geschichten. Apache und MySQL gehören für mich nicht zusammen und MySQL bzw MariaDB hat man ja schnell als Container aufgesetzt. Bei PHP sieht es schon anders aus. Die Frage ist allerdings ob man überhaupt Apache dafür nehmen will.

 

Also meine Empfehlung wäre daher PHP zu installieren und beim tag Apache zu ergänzen:

https://hub.docker.com/_/php/

 

Der Name des Repository wäre dann zB php:7-apache

 

Man kann aber auch nginx installieren und php:7-fpm und die beiden Container verlinken.

 

Also Möglichkeiten gibt es da viele. Den groben Ablauf wie man selbst einen Container installiert, kannst du denke ich hier nachvollziehen:

https://forums.unraid.net/topic/99771-container-template-redmine/

 

Link to comment

Danke für deine ausführliche Antwort - das werde ich mir mal in Ruhe ansehen.

 

Zusammengefasst bedeutet das also, dass ich für mein Vorhaben bspw. auch
jeweils einen Container für -Apache -MySQL -PHP aufsetzen kann?

 

Wie kann ich diese (im oben genannten Beispiel drei Container) denn dann
entsprechend verbinden und wo lege ich dann am besten den eigent-
lichen Website-Quellcode ab?

 

Link to comment
1 hour ago, Dsimon24 said:

Zusammengefasst bedeutet das also, dass ich für mein Vorhaben bspw. auch
jeweils einen Container für -Apache -MySQL -PHP aufsetzen kann?

 

Ja, aber man muss wissen, dass es PHP als Apache-Modul gibt und als FPM, also dem FastCGI Process Manager. Daher kann man beim PHP Container auch auswählen, ob man php:7-apache (Apache inkl PHP7 Apache Modul) oder php:7-fpm (nur PHP7) nutzen möchte. Willst du also wirklich alles separat haben, dann würde man php:7-fpm nehmen und beim Apache Container das link-flag nutzen um Apache und PHP zu verlinken. Allerdings ist das für deinen ersten eigenen Container doch etwas anspruchsvoll, denn Apache und PHP-FPM sind nicht so leicht zum Laufen zu bringen. Außerdem hast du durch PHP-FPM keinen Mehrwert. PHP-FPM nutzt man normalerweise bei Apache, wenn man sehr große Websites betreibt oder wenn man Nginx als Werbserver nutzen möchte. Daher sind die Informationen wie man das als separate Container zum Laufen bringt, sehr rar gesäht.

 

Daher solltest du nicht drei Container installieren, sondern wenn zwei. Also php:7-apache und MariaDB oder MySQL.

 

Für PHP sieht das Beispiel-Kommando so der Doku so aus:

$ docker run -d -p 80:80 --name my-apache-php-app -v "$PWD":/var/www/html php:7.2-apache

 

Hier erkennen wir also, dass du im Bridge-Modus den Port 80 weiterleiten musst und den Pfad /var/www/html zB mit /mnt/user/appdata/www verlinkst. Mehr scheint nicht notwendig zu sein um Apache inkl PHP zum Laufen zu bringen.

 

Ich habe selbst mal den Docker wie folgt gestartet:

998466491_2021-01-1518_22_22.png.fe85843446b5048b13c6e004b9647a00.png

 

Der Ordner "www" war leer, also habe ich zum Test mal schnell ein Hello World hingefügt ;)

356277688_2021-01-1518_25_23.png.6a4caf801684c4eae8bb001bf56d3445.png

 

Läuft.

 

Natürlich ist es schicker, wenn man noch ein Icon und den Link zum Anklicken hinterlegt (Advanced bei den Container-Einstellungen akivieren):

 

1536349496_2021-01-1518_45_44.png.94eb63e734984aa3ee8c552510921d15.png

 

Was ich allerdings nicht zum Laufen gebracht habe ist die User / Gruppen ID von Unraid zu setzen. Normalerweise macht man dafür das:

296165733_2021-01-1518_46_59.png.179caa71f720f8c70cf0f65a5dcdba16.png

 

Aber dann schmiert der Container sofort ab. @ich777, Hilfe ^^

 

EDIT: Ok, wenn ich diesen Post richtig verstehe, dann müssen manche Container als root gestartet werden und die --user Option verhindert das. Und was macht man dann? Jetzt sag nicht, dass man dann selbst einen Container maintainen muss 🥶

 

Der Apache PHP5 Container ist ja zB auch im App Store und setzt die Rechte per Dockerfile wie folgt:

# Configure user nobody to match unRAID's settings
 RUN \
 usermod -u 99 nobody && \
 usermod -g 100 nobody && \
 usermod -d /home nobody && \
 chown -R nobody:users /home

 

Gibt es keine Möglichkeit solche Befehle zu übermitteln ohne erst einen Docker-Container zu maintainen?

 

EDIT2: Ok, außer nachträglich die Dateirechte ändern, geht wohl nicht:

https://forums.unraid.net/topic/80064-adapt-uidgid-from-dockerhub-container-mediathekview/?tab=comments#comment-751468

 

Dann hoffen wir mal, dass Unraid das irgendwan "on the fly" kann.

Link to comment
13 minutes ago, mgutt said:

Aber dann schmiert der Container sofort ab. @ich777, Hilfe ^^

Kann passieren wenn der Container nicht dafür ausgelegt ist bzw. wenn der Benutzer am Host nicht genügend Rechte hat, das ist leider ein bisschen kompliziert und funktioniert nicht auf anhieb in jedem container bzw müssen die Rechte für den Benutzer am Host auch stimmen.

Auf jeden fall ist das ein Hinweis darauf das die Berechtigungen nicht passen und er nicht starten kann.

 

1 hour ago, Dsimon24 said:

Zusammengefasst bedeutet das also, dass ich für mein Vorhaben bspw. auch
jeweils einen Container für -Apache -MySQL -PHP aufsetzen kann?

Ja das kann man natürlich machen, wäre es für dich keine alternative zB SWAG zu verwenden, das wäre ein Container der nginx, php, LetsEncrypt (certbot) und fail2ban in einem Container vereint.

 

Ich hab zB auch SWAG am laufen mit ein paar custom Packages, damit ich Nextcloud direkt in SWAG ohne extra Container laufen lassen kann, die du mit einem Userscript beim Containerstart installieren kannst bzw. geprüft wird ob die installiert sind.

Hab dann noch zusätzlich den Redis Container und die MariaDB, aus der CA App, mit Nextcloud verknüpft  und die können miteinander kommunizieren. :)

 

Wenn du natürlich Apache willst dann gibt's glaub ich den 'Apache PHP' Container in der CA App.

Link to comment
4 minutes ago, ich777 said:

den 'Apache PHP' Container in der CA App.

 

Ja, aber der nutzt PHP5. Daher hatte ich gehofft, dass man die Nutzerrechte selbst setzen kann. Sonst hat man ja nachher in den Unraid Apps zig verschiedene Apache/Nginx/lighthttpd + PHP Version X Kombinationen. Auch nicht wirklich zielführend.

Link to comment
7 minutes ago, ich777 said:

damit ich Nextcloud direkt in SWAG ohne extra Container laufen lassen kann

 

Und warum machst du das so? Auf die Art musst du die Updates ja selbst pflegen. Wenn ich jetzt den Overhead von Apache vermeiden möchte, würde ich denke ich nextcloud:fpm nehmen und den mit nginx verlinken.

Link to comment
8 minutes ago, mgutt said:

Ja, aber der nutzt PHP5

Hab grad gesehen das der das letzt mal vor 5 Jahren upgedated wurde... :D

Nicht die beste Lösung...

 

2 minutes ago, mgutt said:

Und warum machst du das so? Auf die Art musst du die Updates ja selbst pflegen.

Warum nicht? Stimmt updates muss man dann selbst machen aber das funktioniert komfortabel über die WebUI oder würde auch mit Cron funktionieren hab ich mal gelesen mit occ soweit ich weiß, korrigier mich wenn ich falsch liege...

 

Ich mach die Updates lieber selbst, du glaubst nicht wie oft ich mit Gitea Probleme hab weil die irgend ein Update gepusht haben das wieder irgendwas nicht funktioniert. So weiß man wenigstens wo man zu Suchen beginnen muss.

Link to comment
15 minutes ago, mgutt said:

Daher hatte ich gehofft, dass man die Nutzerrechte selbst setzen kann.

Funktioniert in vielen Container mit einer Variable...

 

Ich hab auch Container die haben Redis oder MariaDB eingebaut weil es einfach einfach ist aber das ist manchmal ganzschön schwierig die ohne root rechte laufen zu lassen weil das ist bei mir das oberste Gebot... :D

Link to comment

Guten Abend,

 

danke euch, für eure Unterstützung.

 

Ich habe jetzt drei Container erstellt:

- php (+ Apache)

- phpmyadmin

- mysql

 

Versuche ich jetzt, mich mit entsprechenden Zugangsdaten über phpmyadmin einzuloggen, erhalte
ich die folgende Fehlermeldung:

Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.

Ich nutze tatsächlich HTTP bzw. die Standardeinstellungen, die während der Installation des
Containers vergeben und vor der Installation bereits vorgeschlagen wurden.

 

Wie kann ich das Problem am besten beheben? Habt ihr eine Idee?

 

Ansonsten ist mir im PHP/Apache-Container noch aufgefallen, dass von /var/www/html zu /mnt/user/appdata/html gemappt wird.

Wenn ich Websites in Laravel entwickeln möchte, müsste entsprechend auf /var/www/html/myLARAVEL-PROJEKT/public gemappt
werden. Wie kann ich das am besten realisieren? Müsste ich für jede Laravel-Website dann einen eigenen Container erstellen?

 

VG, David

Edited by Dsimon24
Link to comment
1 hour ago, Dsimon24 said:

Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.

 

Irgendwas dabei?

 

https://stackoverflow.com/questions/49811804/phpmyadmin-failed-to-set-session-cookie-maybe-you-are-using-http-instead-of-htt

 

1 hour ago, Dsimon24 said:

Wenn ich Websites in Laravel entwickeln möchte, müsste entsprechend auf /var/www/html/myLARAVEL-PROJEKT/public gemappt

 

Na dann erstell doch den Ordner /mnt/user/appdata/html/myLARAVEL-PROJEKT/public oder verstehe ich da jetzt etwas falsch? Der wäre dann im PHP-Apache Container über den Pfad /var/www/html/myLARAVEL-PROJEKT/public erreichbar.

 

1 hour ago, Dsimon24 said:

entsprechenden Zugangsdaten über phpmyadmin

 

Welche bzw wie wurde der MySQL Container gestartet? Bridge oder Host? Du musst natürlich die richtige IP des Containers hinterlegen. Bei Bedarf auch mal mit HeidiSQL die Verbindung testen. Dann kannst du mal von "außen" prüfen ob MySQL überhaupt richtig läuft.

 

2 hours ago, Dsimon24 said:

drei Container ... phpmyadmin

 

Hier wieder die Frage ob man dafür einen separaten Container braucht. Der phpmyadmin-Container startet ein eigenes Betriebssystem, einen eigenen Webserver und eine eigene Datenbank um zu laufen. Massig Overhead also. Stattdessen könnte man sich auch phpmyadmin in einem Unterverzeichnis installieren. Ist aber natürlich auch die Frage ob man darauf überhaupt Bock hat ;)

Link to comment
  • 4 weeks later...

So, ist jetzt schon ein paar Tage her, aber ich glaube, es funktioniert (nun fast).

 

Siehe Screenshot, das sind meine Settings für eine Laravel-Applikation.

Ich habe dazu jetzt erst mal einen apache-php74-Container erstellt.

Allerdings erhalte ich die Fehlermeldung, dass ich keine Permissions habe.

Muss ich das in den Settings im Screenshot anders hinterlegen? In /smafin/ 
liegt der Laravel-Code. Die Website soll aber über dem darin enthaltenen
Ordner /public einsteigen.

 

Hat einer ne Idee?

 

VG, David

Bildschirmfoto 2021-02-13 um 11.21.44.png

Edited by Dsimon24
Link to comment

Der Container hat laut Beschreibung den Pfad /var/www/html. Du hast nun keinen solchen Pfad hinterlegt, sondern /var/www/html/smafin/public. Der Container sucht nun vermutlich im Pfad /var/www/html nach Dateien, aber findet nichts. Richtig wäre es also /var/www/html mit /mnt/user/appdata/www/smafin/public zu verlinken. Nun kann der Container im Pfad /var/www/html die Dateien finden.

 

Wobei ich natürlich nicht weiß ob "/var/www/html" überhaupt der gewollte Pfad von dem Container ist. Das ergibt sich erst durch die Doku des Containers.

Link to comment
  • 11 months later...
On 2/13/2021 at 11:53 AM, mgutt said:

Der Container hat laut Beschreibung den Pfad /var/www/html. Du hast nun keinen solchen Pfad hinterlegt, sondern /var/www/html/smafin/public. Der Container sucht nun vermutlich im Pfad /var/www/html nach Dateien, aber findet nichts. Richtig wäre es also /var/www/html mit /mnt/user/appdata/www/smafin/public zu verlinken. Nun kann der Container im Pfad /var/www/html die Dateien finden.

 

Wobei ich natürlich nicht weiß ob "/var/www/html" überhaupt der gewollte Pfad von dem Container ist. Das ergibt sich erst durch die Doku des Containers.

Ich hab mir das Thema durchgelesen sowie die selbe "aufgabe" möchte ein paar php files austesten / intern eine website hosten.

verwende jetzt den container mit dem tag:  php:7.4-apache

jedoch brauche ich hierbei Apache-Module mod_expires und mod_rewrite.

Kann man die hier auch nachinstallieren?

 

P.s: recherchiere bereits seit 2 Wochen um ein lauffähiges system apache / php zu laufen haben... aber das hier ist die einige die läuft

Danke

Link to comment
2 hours ago, Curtis777 said:

jedoch brauche ich hierbei Apache-Module mod_expires und mod_rewrite.

Kann man die hier auch nachinstallieren?

Ganz simpel danach suchen. Also "php docker mod_rewrite":

https://github.com/docker-library/php/issues/377#issuecomment-282157859

 

Fazit: Geht nicht. Die wollen, dass sich einen eigenen Container baut. Die Maintainer des PHP Containers sind schon ziemlich stur, dass sie wirklich gar keinen Weg anbieten wollen, dass man sich Module zb einfach per Variable installieren kann.

 

Fazit2: Suche im offiziellen Docker Hub nach einem Container, der ein Fork vom Original PHP Container ist und diese Funktionen mitbringt. Ich bin sicher, dass da welche mit vielen Downloads sind.

Link to comment
16 hours ago, mgutt said:

Ganz simpel danach suchen. Also "php docker mod_rewrite":

https://github.com/docker-library/php/issues/377#issuecomment-282157859

 

Fazit: Geht nicht. Die wollen, dass sich einen eigenen Container baut. Die Maintainer des PHP Containers sind schon ziemlich stur, dass sie wirklich gar keinen Weg anbieten wollen, dass man sich Module zb einfach per Variable installieren kann.

 

Fazit2: Suche im offiziellen Docker Hub nach einem Container, der ein Fork vom Original PHP Container ist und diese Funktionen mitbringt. Ich bin sicher, dass da welche mit vielen Downloads sind.

Ok, schade.

 

Dann dürfte da wohl kein Weg drumherum führen mir eine Linux VM zu installieren und das auf alte Wege zu machen.
Leider hab ich noch keine Ahnung wie ich Docker Container erstelle sonst hätte ich mich da mal versucht.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.