Sziasztok!
Van egy régi weboldalam, CentOS 6 és php 5.3 alatt remekül működik. Mivel hamarosan eljár az OS felett az idő, gondoltam időben elkezdem a migrációt. Csináltam egy teszt szervert CentOS 7-el, a rajta lévő php 5.4-el viszont nem megy a weboldal. Találtam 5.3-as repót, azzal frankó minden.
(amikor nekifutottam, még nem volt CentOS 8, miután kijött azzal is megnéztem, a sokkal frissebb php verzió nem nekem kedvez, de a CentOS 8 lesz a host, azon futnának a konténereim)
Csináltam egy dockerfájlt, amibe pontosan ugyanazokat a lépéseket vettem fel, mint a teszt szerveren, első ránézésre minden klappol, de ha bármilyen módosítást csinálok a konténerben futó weboldalon, akkor egy semmit mondó hibaüzenetet kapok, és a módosítás nem történik meg, mintha az oldal read-only módban működik, miközben az adatbázis írható.
Ez van a dockerfile-ban:
FROM centos:7
COPY src/php-53.repo /etc/yum.repos.d/php-53.repo
RUN yum update -y
RUN yum install -y httpd yum-plugin-versionlock
COPY src/versionlock.list /etc/yum/pluginconf.d/versionlock.list
RUN yum install -y php php-bcmath php-cli php-common php-gd php-intl php-mbstring php-mysql php-pdo php-process php-xml
RUN yum clean all && rm -rf /var/cache/yum/x86_64/7/*
COPY src/php.ini /etc/php.ini
COPY src/httpd.conf /etc/httpd/conf/httpd.conf
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
Így futtatom a konténert:
docker run -d -p 8080:80 --name kontenerem -v /srv/weboldal:/var/www/html kontener:latest
A konténer logokban konkrétan nincs semmi. Kipróbáltam legalább 15-20 php és apache konténert a docker hubról, egyik sem vált be, a legtöbb rosszabb volt, mint a sajátom.
Én még kezdő vagyok a docker világában, pár hete kezdtem el vele foglalkozni, szóval örömmel veszek minden tanácsot, segítséget! Köszönöm!
______________________________________________________________________________
Ezt kellett beszúrnom a megoldáshoz az apache reverse proxyn: ProxyPreserveHost On
Hozzászólások
Elsőre host oldali jogosultság problémának tűnik, mintha a dockernek nem lenne írási joga a weboldal tartalmához (selinux vagy hiányzó rw osztott könyvtár opció miatt).
A hoston ki van kapcsolva az selinux, és a webdir tulajdonosa az apache. Ugyanezzel a beállításokkal ugyanezzel a konténerrel pedig rendben fut egy másik weboldal docker alatt.
a kontenerben futo cuccok garantaltan nem a host uid/gid mappingjet hasznaljak.
`docker exec -it kontener_neve /bin/valamilyen_shell` es ott meg tudod nezni, hogy miatokvan. image faragaskor kezihajtanyban szoktamvolt installalni mindenfelet a kontenerbe be, hogy lehessen debuggolni a gondokat. a docker log, khm, nem szoszatyar. :DDD
Én azt tapasztaltam, hogy ha ugyanaz a host és a guest OS, akkor ugyanazon az UID-n fog látszani pl az apache.
A docker exec segítségével bele tudtam nézni a konténerbe, például az apache logjaiba, de nem látok semmi különöset, nem kerültem közelebb a megoldáshoz.
Ehhez mázli kell. Ha a host-on felveszel 1-2 user-t, máris elcsúszik.
Amikor megunom a host könyvtár mount-olás okozta jogosultsági gondokat, volume-ot adok neki, az mindig működik. Persze odafigyeléssel meg meg sok debuggal ki lehet fésülni, de akkor már kevesebb meló és sok szempontból egészségesebb megoldás a volume. Pl security
:D ez egy veletlen tapasztalas mindossze, ne epits ra. ;)
ha nem talaltal relevans logot, akkor nincs bekapcsolva (jol), vagy az sem tud irni a neki szant helyre.
(es akkor most tovabbolvasom, hatha kozben kitalatad a megoldast. :D )
Gondolom nem leszek népszerű az ötlettel, de: túl nagy munka lenne át/újraírni? nem olyan halálosan nagy kaland a php verzióugrás.. csak mert ha a szmötyit becsomagold attól még szmötyi marad :(.
Az apache-od biztosan figyel a 80as porton?
a listen address-e
/*nem célszerű a hostra közvetlenk kirakni a szolgáltatást, erre docker network & valami reverse -t szokás használni pl
- https://containo.us/traefik/
- nginx
- haproxy
etc*/
Én egyáltalán nem értek a php kódhoz, ezt a weboldalt örököltem, próbálom életben tartani. A tulajdonosa egy BAZ megyei pici falu Önkormányzata, szívességből adminisztrálom a szervert, ők nem tudnak egy fejlesztő céget ezzel megbízni.
Az apache biztosan a 80-ason figyel, localhostra bindeltem, és van egy apache rev proxy is elé téve.
Az is megfordult a fejemben, hogy hagyom a fenébe, és tiszta lappal összedobok egy új wordpress alapú weboldalt nekik, amihez feltehetőleg hosszú évekig lesz frissítés.
Hűha, ez így elég erős! De végre nem egy politikával, népszaporulattal, használati szokásokkal foglalkozó post. :)
A CentOS6-nak az idén fog lejárni a támogatása, de az a PHP már öt és fél éve nem támogatott! Ezt azért nem árt szem előtt tartani.
Azzal, hogy a SELinux-ot is lekapcsolod... szerintem eldobod az utolsó hajszálnyi esélyed a túlélésre.
De ha ezt most figyelmen kívül hagyjuk, akkor:
Nem világos számomra, hogy milyen repo-t használsz a PHP-hoz, de ilyen legacy dolgoknál Remi-é jó választás lehet, mert van olyan elvetemült/elhivatott, hogy visszafelé is patch-elt egy csomó hibát:
https://rpms.remirepo.net/
A Docker nem sandbox, szerintem nem is biztonságos. Vigyázz vele, hogy csak olyat futtass a gépeden, amit legalább nagyjából átlátsz/értesz. Amit csak lehet, azt csatold read-only módban.
A konténerek világában. A Docker csak egy lehetőség és szerintem nem a legjobb.
Mi a host OS-ed? Ha valami RHEL-alapú (SELinux-ból tippelek csak), akkor hagyd a buta Docker-t és használj Podman-t. ;)
"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."
Köszönöm a sok hasznos tippet, el fogom olvasni az ajánlott linket.
A repót én csináltam magamnak ez alapján: https://dev-zero.org/tag/php-5-3-29/
A host OS jelenleg CentOS 8.
Király!
Megnéztem Remi CentOS 7 repóját, 5.4-es benne a legrégebbi php.
https://www.php.net/manual/en/migration54.php
"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."
Tudom, teszteltem azzal is, nem ment az oldal :-(
pontosan I volt a baj? mi a hiba?
tedd ki, megnezem
Akkor tenyleg sokkal jobban jarnal akar a magad altal osszedobott WordPress-szel (csak el ne felejtsd frissiteni..), mint ennyire elavult es mar oven nem tamogatott infran futtatni.
-v /srv/weboldal:/var/www/html:z
Mi volna, ha a docker run volume végéhez hozzáadnál egy :z-t? Bár ez SELinux esetén lehet fontos, ha írni is szeretnéd.
Kipróbáltam, hogy ha direktben csatlakozom a konténerhez, akkor rendben működik a weboldal, tehát szűkül a kör, jobb híján a rev.proxym konfigja lehet a szar:
Itt tartok most...
rproxy? hol? a hoston..?
Honnét van ez a konfig? Hová mutat az a proxypass? php-fpm-et használsz?
A direktbe csatlakozás a bridge-be kapott (NAT-olt) ip címét jelenti a konténernek?
"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."
ProxyPreserveHost ?
Ez volt a megoldás, köszönöm!
Jövök egy sörrel!
na, ez tok jo! :)
le tudnad irni azert, hogy pontosan mi volt a megoldas a hol..? kicsit infoszuk a thread annak, aki nem yum "kornyezetben" kontenerez. (blush) de csak ha van idod.
a fenti apache virtual host konfigba kellett beszúrni ezt: "ProxyPreserveHost On"
nem a yum volt itt a probléma, ugyanúgy szívtam volna ubuntu/debian host és guest alatt is az előbbi paraméter híján
tehat a kontener-apache volt "rosszul" konfiguralva. koszonom.
a proxy volt szarul konfigolva, "megette" a host headert - a service meg nem volt felkeszulve ra h nem kap host headert.
koszi, ertem mar. :) csak mozaikos a leiras - es nem vagyok benne az rpm-es disztrokban es az apache-ban (sem). (blush)
" Van egy régi weboldalam, CentOS 6 és php 5.3 alatt remekül működik. "
Szóval benne lehetett az eredeti apache konfigban a hiányzó sor, és a konténeres tesztelgetés során veszett el valahogy. Ez így teljesen független a dockertől, meg a diszttribucióktól.
vagy eredetileg nem RP mogott seggelt, igy kapta a Host headert a bongeszotol, ahogy illik...
nginx, ha rám hallgatsz.
Nincs ugyanaz a mappa volumeban beadva másik kontnernek is?
Nemrég tapasztaltam, hogy (windows alatti linux konténereknél) ha több konténer is ugyanazt a mappát kapja meg mint volume, akkor nem mennek át a módosítások.
Konkrétan a host fájlrendszerében lementettem amit kellett, közben a konténeren belül ha szerkesztővel belenéztem a fájlba, akkor nem ment át semmi. Amikor a két konténer nem osztozott pontosan ugyanazon a mappán, megszűnt a probléma. (az oké, ha egy almappát kap meg a másik)
Lehet, hogy nem a fenti eset okozta nálam a gondot, majd az idő megmondja, azért egy próbát tehetsz te is, ha esetleg nálad is van átfedés a volume-k között.