Webserver Docker alapokon (Rendszerek egyesítése)

Szerző: Ványi Albert |

Ebből a leírásból megtudható, hogy az első és második részben elkészített image-ből készített konténereket hogyan indítjuk automatizáltan, illetve kiegészítjük még a redis és maradb szerverekkel. Ezek használatára a php-fpm alkalmazás szerverünket már felkészítettük.

Host Apache beállítása

Elképzelésem szerint a weboldalam mail.zsoltina.eu domain néven fog futni, a szerveremen lévő apache a 80-as porton figyel. a konfigurációm szerint az erre a névre érkező kéréseket átproxy -a a konténerben futó 8080-as porton figyelő apache szervernek, majd a tőle kapott választ továbbítja a kérő felé. Ehhez telepítsük a gazda gépre a szükséges csomagokat:

apt install apache2

Engedélyezzük a szükséges modulokat:

a2enmod proxy proxy_http
systemctl restart apache2

Ezután készítsük el a konfigurációnkat:

cd /etc/apache2/site-available && nano mail.zsoltina.conf
<VirtualHost *:80>
ServerName mail.zsoltina.eu
        ProxyPass / http://localhost:8080/
        <Location />
              ProxyPassReverse http://localhost:8080/
              Require all granted
        </Location>
</VirtualHost>

Engedélyezzük a beállításunkat:

a2ensite mail.zsoltina.conf

Ez ugyan egy nagyon egyszerű konfiguráció, de a célnak megfelel.

Redis szerver

A Docker Hub-ról töltsünk le egy redis szervert és illesszük a rendszerünkhöz:

docker pull redis:3-alpine

Teszteljük le:

docker run -ti --rm redis:3-alpine

CTRL+C -vel ki tudunk lépni.

MariaDB szerver

Szintén a Docker Hub-ról szedjük le a mariadb adatbáziskezelő rendszer image-t:

docker pull mariadb:latest

Docker Compose (automatikus indítás)

Készítsük el az egyes konténerek automatikus indítását és konfigurálását leíró yaml fájlt, melyet a docker-compose-al fogunk tudni használni:

nanno /usr/local/etc/apache/apache.yml
# Apache SERVER
########## Apache YAML ########
# nano /usr/local/etc/apache/apache.yml
version: "2"

services:
apache:
image: slapic/apache:latest
ports:
- 8080:8080/tcp
volumes:
- /usr/local/etc/apache/www:/var/www/
tmpfs:
/run:rw,noexec,nosuid,size=65536k
environment:
SERVERNAME: mail.zsoltina.eu
SERVERADMIN: albert@vanyi.eu
HTTPPORT: 8080
DOCROOT: /var/www/
FCGI: php:9000
depends_on:
- php
php:
image: slapic/php:7.0-alpine
volumes:
- /usr/local/etc/apache/www:/var/www/
depends_on:
- dbserver
- redis
dbserver:
image: mariadb:latest
volumes:
- /usr/local/etc/apache/db:/var/lib/mysql/
#Az adatbázis beállításához szükséges adatoknak értelmszerűen csak az első alkalommal kellenk
environment:
MYSQL_ROOT_PASSWORD: <rootpasswd>
MYSQL_DATABASE: <db name>
MYSQL_USER: <db user>
MYSQL_PASSWORD: <db passwd>
redis:
image: redis:3-alpine
volumes:
- /usr/local/etc/apache/redis:/data/
tmpfs:
- /run:rw,noexec,nosuid,size=65536k
#volumes:
# db:
# redis:

A konfigurációból is kiolvasható, hogy a beállítások gyökérkönyvtáraként a: /usr/local/etc/apache használom.
Természetesen ide kerültek az apache és a php konténer által használt konfigurációk is a megfelelő könyvtárszerkezettel és a yaml fájlt is itt hoztam létre.

Szolgáltatások automatikus indítása

Amennyiben azt szeretnénk elérni, hogy a rendszerünk indításával együtt induljanak el a konténereink, tegyük meg a szükséges lépéseket:

nano /etc/systemd/system/docker_apache.service
[Unit]
Description=Docker Zsoltina Service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker-compose -p zsoltina -f /usr/local/etc/apache/apache.yml down
ExecStart=-/usr/bin/docker-compose -p zsoltina -f /usr/local/etc/apache/apache.yml up
ExecStop=-/usr/bin/docker-compose -p zsoltina -f /usr/local/etc/apache/apache.yml down
[Install]
WantedBy=multi-user.target

Ezt követően indítsuk el a szolgáltatásokat:

systemctl enable docker_apache.service
systemctl start docker_apache.service