Už dlouho jsem věděl, že chci kontejnerizovat některé své osobní linuxové služby. I když mám velké zkušenosti s kontejnerizací, nezdálo se mi, že bych se dostal k práci na svých vlastních aplikacích. Konečně jsem to udělal a jsem rád!
První článek této série představil služby, které jsem kontejnerizoval. Diskutovalo se také o některých úskalích. Zvažoval jsem možnosti zvedání a posunu, refaktorování a přepisování. Aplikacím jsem také dal hodnocení snadné/střední/obtížné. Poté jsem ve druhé části popsal své zkušenosti s kontejnerizací WordPress.
Zde se zabýváme MediaWiki, která bude podobná, protože je to také Apache, PHP FPM, služba založená na PHP.
Poznámka editora:Pro účely tohoto článku předpokládáme, že své kontejnery budete stavět na Red Hat Enterprise Linux 8 pomocí sestavení podman. Pokyny můžete použít v jiných distribucích nebo s jinými nástroji, mohou však být nutné určité úpravy.
Přesun MediaWiki
Sestavit
MediaWiki běží v obrazu kontejneru vytvořeném z přesně stejného souboru Containerfile. Všimněte si jedné maličkosti, která není zmíněna v sekci WordPress – instalujeme crontabs
a Cronie
. Na rozdíl od WordPressu, který má pokročilý nástroj pro zálohování, s MediaWiki musíme vypsat databázi MariaDB, abychom získali zálohy, takže potřebujeme cron
.
FROM registry.access.redhat.com/ubi8/ubi-init
MAINTAINER fatherlinux <[email protected]>
RUN yum install -y mariadb-server mariadb php php-apcu php-intl php-mbstring php-xml php-json php-mysqlnd crontabs cronie iputils net-tools;yum clean all
RUN systemctl enable mariadb
RUN systemctl enable httpd
RUN systemctl disable systemd-update-utmp.service
ENTRYPOINT ["/sbin/init"]
CMD ["/sbin/init"]
Kromě použití cron
, Mediawiki se nespoléhá na nic zvláštního v httpd-php
obrázek kontejneru.
[ Čtenářům se také líbilo: Kontejnery bez kořenů využívající Podman ]
Spustit
Nyní se pojďme podívat na to, jak provozujeme MediaWiki trochu jinak než WordPress:
[Unit]
Description=Podman container - learn.fatherlinux.com
[Service]
Type=simple
ExecStart=/usr/bin/podman run -i --read-only --rm -p 8080:80 --name learn.fatherlinux.com \
-v /srv/learn.fatherlinux.com/code/mediawiki:/var/www/html/learn.fatherlinux.com:ro \
-v /srv/learn.fatherlinux.com/config/LocalSettings.php:/var/www/html/learn.fatherlinux.com/LocalSettings.php:ro \
-v /srv/learn.fatherlinux.com/config/learn.fatherlinux.com.conf:/etc/httpd/conf.d/learn.fatherlinux.com.conf:ro \
-v /srv/learn.fatherlinux.com/config/htpasswd:/etc/httpd/conf.d/htpasswd:ro \
-v /srv/learn.fatherlinux.com/config/root-crontab:/var/spool/cron/root:ro \
-v /srv/learn.fatherlinux.com/data/mariadb/:/var/lib/mysql:Z \
-v /srv/learn.fatherlinux.com/data/images/:/var/www/html/learn.fatherlinux.com/images:Z \
-v /srv/learn.fatherlinux.com/data/skins/:/var/www/html/learn.fatherlinux.com/skins:Z \
-v /srv/learn.fatherlinux.com/data/logs/httpd:/var/log/httpd:Z \
-v /srv/learn.fatherlinux.com/data/backups/:/root/.backups:Z \
--tmpfs /etc \
--tmpfs /var/log/ \
--tmpfs /var/tmp \
localhost/httpd-php
ExecStop=/usr/bin/podman stop -t 3 learn.fatherlinux.com
ExecStopPost=/usr/bin/podman rm -f learn.fatherlinux.com
Restart=always
[Install]
WantedBy=multi-user.target
Kontejner spouštíme pomocí –read-only
a –rm
, stejně jako WordPress, takže je pomíjivý. Všimněte si, že vážeme také připojovací kód/mediawiki pouze pro čtení. Mohli jsme vytvořit další vrstvený obraz a vložit kód MediaWiki do této vrstvy, ale rozhodli jsme se jej místo toho svázat a připojit. Mnoho aplikací PHP používá vzor jako WordPress, kde se očekává, že adresář s kódem bude zapisovatelný za běhu. Toto rozhodnutí o návrhu nám záměrně dává možnost učinit adresář s kódem pouze pro čtení nebo zapisovat v závislosti na webové aplikaci PHP, kterou vkládáme do kontejneru. To samé httpd-php
image lze použít pro všechny z nich, čímž se sníží velikost našeho dodavatelského řetězce softwaru. Pokud aktualizujeme Glibc, OpenSSL, Apache, PHP FPM nebo PHP, abychom opravili bezpečnostní problémy, všechny naše aplikace PHP zdědí po restartu novou konfiguraci. V dokonalém světě bychom tento httpd-php
neustále přestavovali obraz v systému CI/CD s dobrým testovacím svazkem pro neustálé aktualizace.
Konfigurační soubory, jako je WordPress, jsou za běhu připojeny do kontejneru pouze pro čtení. Opět se jedná o skvělý upgrade zabezpečení ze standardního serveru LAMP.
Do MediaWiki je připojeno více datových adresářů. Zde je důvod:
- data/mariadb – To je jednoduché. Důvody jsou totožné s WordPress.
- data/images – Ukládá obrázky, soubory PDF a další soubory nahrané do wiki.
- data/vzhledy – Stejně jako WordPress byla i MediaWiki navržena před kontejnery. Nikdy nemohli znát potřeby budoucích technologií, jako jsou kontejnery. Na rozdíl od WordPressu přichází MediaWiki s předvyplněnými vzhledy v tomto adresáři, který se nachází v adresáři code/mediawiki/skins. Toto je kopie těchto dat v kombinaci s našimi vlastními vzhledy. Je to vázání připojené ke čtení/zápisu, takže pokud chceme, můžeme přidat nové vzhledy. V budoucnu to bude pravděpodobně vyřešeno překryvnou možností "-v skins:skins:o" pro Podman. To nám umožní „překrýt“ naše vlastní data nad stávající data kódu/mediawiki/vzhledů, která přicházejí s počátečním stažením kódu.
- data/logy – Stejně jako WordPress chceme přístup k našim protokolům mimo kontejner.
- data/zálohy – Na rozdíl od WordPressu musíme použít
cron
úkol vypsat databázi MariaDB podle plánu. Tyto zálohy jsou umístěny do tohoto adresáře a poté zkopírovány mimo web hostitelem kontejneru.
[ Bezplatný průvodce:Jak vysvětlit DevOps v jednoduché angličtině ]
Zabalit
Takže, to je druhá služba - MediaWiki! Možná trochu náročnější než WordPress, ale nic, co byste nezvládli. V tomto případě jsem přidal cronie
konfigurace. Je také zřejmé, jak důležité je systemd
nastavení jsou.
Nezapomeňte se podívat zpět na kontejnerování WordPress, pokud jste to ještě neudělali. Dále se budeme zabývat kontejnerizací Sledování požadavků.
Tato série je založena na „Hacker's Guide to Moveing Linux Services into Containers“ na CrunchTools.com a je znovu publikována se svolením.