Self-Hosting Guide - Docker und Docker Compose
-
Wir hosten eine CT-Instanz auf einem eigenen Server (Dedicated Root) und verwenden für eine schnelle Einrichtung Docker bzw Docker Compose. Im Folgenden eine Kurzanleitung sowie der Quelltext des Dockerfile und der docker-compose.yml für die aktuelle CT-Version (Stand 2022-11-26):
Anmerkungen
- Basisimage ist PHP 8.0 mit Apache
- Ein Reverse Proxy sowie die Verwaltung des SSL Zertifikats übernimmt bei uns Plesk (Nginx), daher nicht Bestandteil des Images. Die Konfiguration habe unten aufgeführt.
- Die Datenbankverwaltung geht ebenfalls über Plesk. Ebenfalls nicht Bestandteil der Docker-Images.
- Den Pfad zum Churchtools tar.gz Package habe ich entschärft. Bitte fragt den CT-Support nach der entspr. URL.
- Das einmalige Initialisieren der Datenbank könnte man ebenfalls im Dockerfile unterbringen.
Dockerfile
FROM php:8.0-apache ENV CHURCHTOOLS_VERSION=3.91.1 ENV TZ=Europe/Berlin ADD php.ini /usr/local/etc/php/php.ini RUN mkdir -p /tmptwig/cache && chown -R www-data:www-data /tmptwig RUN set -ex; \ apt update && \ apt install -y libldap2-dev libmcrypt-dev wget ssl-cert unzip \ libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev libwebp-dev && \ rm -rf /var/lib/apt/lists/* RUN set -ex; \ docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \ docker-php-ext-install -j$(nproc) ldap && \ docker-php-ext-install -j$(nproc) iconv && \ docker-php-ext-configure gd --with-webp --with-freetype --with-jpeg && \ docker-php-ext-install -j$(nproc) gd && \ docker-php-ext-install -j$(nproc) exif && \ docker-php-ext-install -j$(nproc) pdo pdo_mysql zip && \ a2enmod rewrite && a2enmod headers USER www-data RUN curl -SL https://########/#/#######/files/?p=%2Fchurchtools-$CHURCHTOOLS_VERSION.tar.gz\&dl=1 \ | tar -xz --strip 1 -C /var/www/html
docker-compose.yml
version: '2.3' services: churchtools: image: myname-churchtools:80 container_name: myname-churchtools restart: unless-stopped mem_limit: 1G environment: - TZ=Europe/Berlin ports: - "11180:80" volumes: - ./app/sites:/var/www/html/sites build: context: build/ dockerfile: Dockerfile args: - EXTRA_LOCALES=fr_FR.UTF-8 UTF-8, de_DE.UTF-8 UTF-8, it_IT.UTF-8 UTF-8, es_ES.UTF-8 UTF-8
nginx Konfiguration
location ~ ^/(?!(\.well-known)).* { proxy_pass http://0.0.0.0:11180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
Verbesserungsvorschläge sind gerne willkommen.