====== Docker mit NGINX, PHP-FPM und rsyslog ======
Weiterführende Links:
* [[https://bobcares.com/blog/docker-nginx-php-fpm-separate-containers/]]
* [[https://hub.docker.com/_/php]]
* [[https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/]]
Stdout to syslog:
sudo docker run \
--log-driver syslog \
--log-opt syslog-address=tcp://syslog-host:1514 \
--log-opt syslog-format=rfc5424micro \
-d --name php \
-v /home/urs/docker-www:/usr/share/nginx/html \
-v /dev/log:/dev/log \
php:fpm-alpine
Der Skript Pfad muss in beiden Container identisch sein (vgl. -v option)
Reload NGINX aus Container:
kill -s HUP 1
Reload PHP-FPM aus Container:
kill -s USR2 1
===== NGINX Konfig =====
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 172.17.0.3:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Für fasctcgi_pass muss die IP des php containers angegeben sein, wenn sie nicht über docker compose im gleichen Netz sind (fehlende DNS).
===== PHP-FPM Konfig =====
error_log=syslog
===== rsyslog Konfig =====
Ohne spezielle Anpassung werden aus einem Container weitergeleitete Log-Nachrichten über den unix-socket /dev/log mit dem Namen des Docker Hosts geloggt. Um dies zu umgehen muss ein dedizierter Socket eingerichtet werden. Mittels "HostName" Parameter kann der Hostname für diesen Socket definiert werden.
input(type="imuxsock"
HostName="docker"
Socket="/dev/log-docker")
[[https://www.rsyslog.com/doc/configuration/modules/imuxsock.html#read-log-data-from-jails]]
Die Container müssen nach Neustart von rsyslog ebenfalls neu gestartet werden, da der Socket sonst ins leere läuft.