Die me-php Images geben eine schnelle und einfache Möglichkeit einen Webserver auf Docker-Basis aufzusetzen.
Nachfolgend wird als hosting name me-team.net
genutzt!
Man erstellt eine docker-compose.yml unter /srv/www/vhosts/me-team.net
/docker/docker-compose.yml
Diese wird wie im nächsten punkt erläutert.
Versionen des me-php Images werden mit dem Tag unterschieden, welches nach dem ":" steht.
Bis auf die PHP Version und davon abhängige Versionen unterscheiden sich die Images nicht.
Alle Bash-Scripts sollten mit Linux-Zeilenumbrüchen (LF) erstellt werden, damit Docker unter Linux damit klar kommt. Die Docker-Images werden auf Albiorix erstellt (vorher Rhea aber läuft kein Docker mehr).
core_module, so_module, watchdog_module, http_module, log_config_module, logio_module, version_module, unixd_module, access_compat_module, alias_module, auth_basic_module, authn_core_module, authn_file_module, authz_core_module, authz_host_module, authz_user_module, autoindex_module, deflate_module, dir_module, env_module, filter_module, headers_module, mime_module, mpm_prefork_module, negotiation_module, php7_module, remoteip_module, reqtimeout_module, rewrite_module, setenvif_module, socache_shmcb_module, ssl_module, status_module
[PHP Modules] : apcu bcmath Core ctype curl date dom exif fileinfo filter ftp gd hash iconv json ldap libxml mbstring mcrypt mysqli mysqlnd OAuth openssl pcntl pcre PDO pdo_mysql pdo_sqlite pdo_sqlsrv Phar posix pspell readline Reflection session SimpleXML soap SPL sqlite3 sqlsrv standard tokenizer xdebug xml xmlreader xmlrpc xmlwriter Zend OPcache zip zlib
[Zend Modules] : Xdebug Zend OPcache
nano, git, composer, yarn, nodejs, npm
Envorinment Variablen werden dazu genutzt um das Image für das jeweilige hosting anzupassen.
Für diese Images gibt es folgende Envorinment-Variablen:
DOCKER_HOST_IP
- IP-Adresse des Docker-Host-ContainersSERVER_NAME
- Fully qualified domain name (Default: me-php.garmisch.net)MYHOSTNAME
- Alias für SERVER_NAME für PostfixREMOTE_IP_PROXY
- IP Adresse des ReverseProxy (Default: Host_IP)RELAYHOST
- Adresse des Relay-ServersRELAYHOST_PORT
- Port des Relay-ServersPOSTFIX_MYHOSTNAME
- Myhostname für PostfixPOSTFIX_MYDESTINATION
- MYDESTINATION für Postfix (Default: localhost.localdomain, localhost)POSTFIX_SMTP_USERNAME
- USERNAME für SMTP-Versand (SASL-Auth)POSTFIX_SMTP_PASSWORD
- PASSWORD für SMTP-Versand (SASL-Auth)POSTFIX_SMTP_AUTHTLS
- SASL-Auth mit TLS [yes|no] (Default: no)POSTFIX_SMTP_SENDER
- Absender auf diese Mailadresse ändernPOSTFIX_SENDER_CANONICAL_MAPS
- sender_canonical_maps aktivieren. Absender-Adresse wird auf POSTFIX_SMTP_SENDER gesetzt. Vorsicht: REPLY-TO funktioniert damit nicht!POSTFIX_SENDER_HEADER_CHANGE
- smtp_header_checks aktivieren. Absender-Adresse wird auf POSTFIX_SMTP_SENDER gesetzt. Vorsicht: Hostname muss valid und auflösbar sein!POSTFIX_SASLAUTH_FILEMAPPED
- sasl_password als file-mapping damit die daten nicht als env-variablen gesetzt werden. [yes|no] (Default: no)DOCUMENT_ROOT
- Document Root für apache (Ordner der index.html/php)ALIASES
- Eine Liste von Aliasen für den Apache mit ";" getrennt.START_RSYSLOGD
- Soll der Syslog-Daemon gestartet werden (Default: no)START_CROND
- Soll der Cron-Daemon gestartet werden (Default: no)START_POSTFIX
- Soll Postfix gestartet werden (Default: yes)APACHE_TIMEOUT
- Timeout für Apache2 in Sekunden (default:300)SSL_VHOST
- SSL-Vhost aktivieren? Zertifikats-Dateien müssen über volume reingemappt werden. [yes|no] (default: no)SSL_CERT
- Pfad zum SSL-Zertifikat (bsp: /etc/ssl/sslvw/mycandy.de/certificate.crt)SSL_CACERT
- Pfad zum SSL-CA-Zertifikat (bsp: /etc/ssl/sslvw/mycandy.de/cert.bundle)SSL_PRIVATEKEY
- Pfad zum SSL-Private-Key (bsp: /etc/ssl/sslvw/mycandy.de/private.key)PHP_ENABLE_XDEBUG
- XDEBUG PHP-Extension aktivieren / mit Option um Modul-Datei zu aktivieren [yes|no] (Default: no)PHP_ENABLE_SQLSRV
- SQLSRV PHP-Extension aktivieren / mit Option um Modul-Datei zu aktivieren [yes|no] (Default: no)PHP_ENABLE_IMAGICK
- IMAGICK PHP-Extension aktivieren / mit Option um Modul-Datei zu aktivieren [yes|no] (Default: no)PHP_ENABLE_APCU
- APCU PHP-Extension aktivieren / mit Option um Modul-Datei zu aktivieren [yes|no] (Default: no)PHP_ENABLE_OAUTH
- OAUTH PHP-Extension aktivieren / mit Option um Modul-Datei zu aktivieren [yes|no] (Default: no)START_ME_AUTOSTART
- Das Script "/etc/me-autostart.sh" wird beim Starten des Containers ausgeführt. Wird bspw. zum Anlegen von Mountpoints verwendet. [yes|no] (Default: yes)
version: '3'
services:
webserver_me_team:
container_name: webserver_me_team
image: marschallelectronics/me-php:7.1-apache
volumes:
- ../public/www/:/var/www/html/
ports:
- '8020:80'
environment:
SERVER_NAME: me-team.net
REMOTE_IP_PROXY: 172.18.0.1
RELAYHOST: mx2.garmisch.net
DOCUMENT_ROOT: /var/www/html
ALIASES:
/foo "/var/www/html/foo/";
/bar "/var/www/html/bar/";
/bsp "/var/www/html/bsp/";
container_name
- Eindeutiger Name des Containers (Einzigartiger Name)image
- Name des Image das genutzt werden sollvolumes
- Eine Liste von "Volumes" die genutzt werdenports
- Externer Port / Container Portenvironment
- Variablen die an den Container gebeben werden (Mehr im Nächstem Punkt)
Um die Docker-Container dauerhaft laufen zu lassen und das sie sich nach Fehlern neu starten erstellen wir einen SystemD Dienst.
Hierzu legen wir eine docker-me-team.service
unter /lib/systemd/system/ an, und passen folgenden text für das Hosting an.
[Unit]
Description=Webserver fuer me-team.net
After=network.target docker.service
[Service]
Type=simple
WorkingDirectory=/srv/www/vhosts/me-team.net/docker
ExecStart=/usr/local/bin/docker-compose -f /srv/www/vhosts/me-team.net/docker/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /srv/www/vhosts/me-team.net/docker/docker-compose.yml down
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Hat man eine das Startscript angelegt, muss man dieses noch aktivieren, damit das OS den Docker-Container automatisch beim Systemstart startet. Dies geschieht über den Befehl systemctl mit Root-Rechten.
systemctl enable docker-me-team.service
Zum Deaktivieren dient der Befehl:
systemctl disable docker-me-team.service
Das Starten des Containers geschieht über systemctl mit dem Befehl:
systemctl start docker-me-team.service
Zum Beenden dient der Befehl:
systemctl stop docker-me-team.service
In der default vhost.conf wird automatisch "HTTPS=on" gesetzt wenn der RequestHeader "X-Forwarded-Proto" auf "https" gesetzt ist.
Um diesen Header übergeben zu können muss im Hostsystem die vhost.conf für das jeweilige hosting angepasst werden.
RequestHeader set X-Forwarded-Proto "https"
muss in den SSL Teil der config eingetragen werden.
Im Docker-Container wird in Apache-Config mittels SetEnvIf X-Forwarded-Proto https HTTPS=on
der Header HTTPS auf on gesetzt.
IMPORTANT: HTTPS=on wirkt nicht auf die .htaccess! D.h. eine Weiterleitung auf https muss über X-Forwarded-Proto gemacht werden: RewriteCond %{HTTP:X-Forwarded-Proto} !=https [NC]
- Github-Repository: https://github.com/MarschallElectronics/docker.me-php
- Lokal-Repository: https://git.garmisch.net/docker.me-php.git
- Tobias Bergkofer - Nightscore
- Benedict Reuthlinger - BeneReuthlinger