Az oldalam WordPress alapú, a biztonság, a könnyebb kezelhetőség és a hordozhatóság miatt, úgy döntöttem, hogy bezárom egy Docker konténerbe.
A Docker hasonló a virtuális géphez. Lényeges különbség, hogy a különböző konténerek osztozhatnak a kernelen és a folyamatok a gazda gépen futnak elkülönítve.
Sikerült találnom egy már kész Docker imaget. Ez Alpine Linuxot, Apache2-t és PHP7-et tartalmaz. Örültem neki, hogy új PHP verziót használhatok. Ez az ulsmith/alpine-apache-php7 image volt. Elég sok PHP modult tartalmaz, sajnos a WordPress hiányolta belőle a zlib-et.
Szóval inkább készítettem a fentebb említett image alapján egy sajátot. Ez már tartalmazza a zlib modult és a megadott időzónát beírja a /etc/TZ fájlba és a php.ini-be is. Úgy vettem észre, hogy az eredetinek utóbbiba valamiért nem sikerült beírnia. Az imagem felkerült a Docker Hubra. Tartalmaz egy példa docker-compose fájlt docker-compose.example.yml néven:
Itt látható, hogy a www könyvtárt fogja behúzni, ebben kell elhelyezni a Wordpress fájljait, ill a logs könyvtárban lesznek majd a logfájlok.
A továbbiakban látható néhány beállítás, melyek a php.ini megfelelő beállításait fogják megadni, kivéve az elsőt, mert az az Appaché.
Az image a
docker-compose up -d
parancssal indítható el.
Most, hogy már van egy futó konténer ami a gazda gép 8888-as portján figyel, irányítsuk rá a forgalmat! Mivel az Apache fel van telepítve, kézenfekvő azt használni proxynak. Egy egyszerű reverse proxyt kell beállítani.
A 6. sorban van egy kis extra, ez plusz információt ad a headerhez, ebből tudja majd a WordPress, hogy HTTPS kapcsolatról van szó. Ez azért szükséges, mert a proxytól már csak HTTP kapcsolat lesz.
Szükség volt néhány módosításra a wp-config.php nevű fájlban. Először is, a WordPressnek tudnia kell a saját címét:
És a MySQL szerverét is. Jelen esetben a MySQL szerver ugyanazon a gépen fut ahol a Docker:
$tmp = explode(".", $_SERVER['SERVER_ADDR']);
$tmp[3] = "1";
define('DB_HOST', implode(".", $tmp));