docker compose / kubernetes Installation

  • Um OpenXE schnell lokal zu starten habe ich für den Tag 1.7 ein Docker Image gebaut.

    Mit Docker Compose kann man eine MariaDB und OpenXE 1.7 Instanz lokal starten. http://localhost:8282/www/setup/setup.php


    bios/openxe:V.1.7

    Code: Docker Quickstart
    git clone https://github.com/tsgoff/docker-openxe.git && \
      cd docker-openxe && \
      docker compose up

    Aktuell wird nur der Datenbank und der userdata Ordner lokal gemountet.

    Auf Kubernetes läuft das Konstrukt ebenfalls.

    Code
    kubectl apply -f openxe-depl-svc.yaml

    Wird der OpenXE Container gekillt und neu erstellt muss man conf/user.inc.php manuell neu erstellen.

  • Vielen Dank Tobias.

    Ich habe damit bei mir lokal zum Entwickeln auch bereits angefangen, habe aber noch nichts "ordentliches" zusammengestellt was man pushen könnte. Ist das Dockerfile auch irgendwo open source verfügbar? Dann könnte man das ja integrieren. Zum Entwickeln und Testen ist docker ja wirklich prima, aber auch für die langfristige Release- und Update-Politik kann ich mir eine Docker-Variante sehr gut vorstellen.


    Also mach gerne einen PR hierfür...

  • Das Dockerfile liegt hier: https://github.com/tsgoff/docker-openxe/blob/main/Dockerfile

    Also Basis verwende ich ein zweites Dockerfile bios/openxe-base mit php:8.1-apache in dem die Dependencies installiert werden damit der Build für OpenXE nicht so lange dauert.

    Mir fehlt noch eine Lösung wie man am besten mit dem Config Ordner umgeht. Wenn man ihn direkt mountet ist der bei einer Installation leer und das Template fehlt. Da müsste man noch ein entrypoint script mit der Logik hinterlegen für neue bzw. bestehende Installationen. Wenn ich Zeit habe und mir was passendes einfällt erstelle ich einen PR.

  • Alex

    Hat das Label Erledigt hinzugefügt.
  • Kurze Frage - besteht hier noch Bedarf an einer Dockerfile? Ich hab mir mal für mich selbst eine gebaut - auf Basis von Alpine Linux selbst und nicht von einem Image einer Einzelperson, da die immer wieder das Problem haben irgendwann nicht mehr maintained zu werden. Falls gewünscht kann ich die Dockerfile gerne hochladen. :)

  • Vailder Punkt :) Bin nicht mehr dazu gekommen den Merge Request zu erstellen.
    Ich hatte es aufgeteilt in ein base image und in eins mit der eigentlichen app.

    Hier zur Vollständigkeit:


    Code: base image
    ARG PHP_VERSION
    FROM php:${PHP_VERSION}-apache
    
    RUN apt update &&  apt-get install -y unzip wget zlib1g-dev libzip-dev libc-client2007e-dev libc-client-dev libkrb5-dev libxml2-dev libpng-dev libldap-dev && rm -r /var/lib/apt/lists/*
    RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl && docker-php-ext-install zip mysqli imap soap gd ldap intl
    
    RUN curl -fsSL "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" -o ioncube.tar.gz && \    tar -xvvzf ioncube.tar.gz && \    mv ioncube/ioncube_loader_lin_8.1.so `php-config --extension-dir` && \    rm -Rf ioncube.tar.gz ioncube && \    docker-php-ext-enable ioncube_loader_lin_8.1.so
    
    RUN printf 'ServerTokens Prod\nServerSignature Off\nTraceEnable Off\n' > /etc/apache2/conf-enabled/security.conf && \    printf 'expose_php = off' > /usr/local/etc/php/conf.d/secure.ini
    Docker: app
    FROM bios/openxe-base
    
    ARG TAG
    
    RUN cd /var/www && \    curl -L -o /var/www/openxe.zip https://github.com/OpenXE-org/OpenXE/archive/refs/tags/${TAG}.zip && \    unzip openxe.zip -x "OpenXE-*/userdata/wiki/XentralHandbuch/*" && \    rm -f openxe.zip && \    rm -rf /var/www/html && \    mv OpenXE-* html && \    chown -R www-data:www-data html
    
    RUN curl -s https://raw.githubusercontent.com/OpenXE-org/OpenXE/ce11caac120a515d9c792839a690f353762b1643/www/setup/setup.php > www/setup/setup.php

    Pack die Alpine Version mal mit rein oder stelle gleich einen Merge Request dann haben wir eine einheitliche Basis

  • Hmm php-apache ist schon wieder Debian-Unterbau... Das geht schneller und kleiner. ;)

    Zumal meins auch nur ein Ansatz für eigene Tests ist und da fehlt auch definitiv noch der Cronjob drin!


    Sucht euch eins aus, dass euch besser gefällt:

    php.ini:

    supervisord.conf:

    Code
    [supervisord]
    nodaemon=true
    logfile=/dev/null
    logfile_maxbytes=0
    pidfile=/run/supervisord.pid
    
    [program:apache2]
    command=/usr/sbin/httpd -DFOREGROUND

    Dockerfile:

    Die Dateien in einen Ordner packen und dann mit

    Code
    docker build -f ./Dockerfile -t my-repo:tag .

    bauen.

    Kleines Learning bisher:

    Man kann diesen Container hinter einen nginX-Reverse-Proxy schrauben (in meinem Fall über nginX-Reverse-Proxy-Manager) und der funkt 1a. :)

    Edit - Hinweis: Die PHP-Abhängigkeiten sind drin, weil die Dockerfile die Basis für meine Laravel-Projekte war. Kann man entweder noch eindampfen oder drin lassen.

  • Ich habe es ausprobiert. Funktioniert

    Schneller und kleiner ist ein Mythos :)


    [+] Building 112.4s (24/24) FINISHED alpine

    [+] Building 53.6s (6/6) FINISHED bios

    Code: docker images
    REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
    openxe        latest    3a2fbb4eb5f8   25 minutes ago   2.73GB
    bios/openxe   V.1.7     ff19c97955eb   2 months ago     756MB

    Cron würde ich als Sidecar oder von extern triggern. Mehrere Daemons in einem Container widerspricht dem Konzept von Docker. Das trifft auch auch den supervisord zu. Für was einen weiteren Prozess der keine Funktion hat außer den eigentlichen Prozess zu wrappen?


    SSL Proxy ist kein Problem. Getestet mit HaProxy und Kubernetes Nginx Ingress.
    Den einzigen Bug den ich bisher gesehen habe ist, dass beim Logout ein 302 Redirect passiert der zwar noch auf https geht aber plötzlich port 80 in der URL hat -> location: https://devhost:80/www/index.php

  • Lag lediglich an X-Forwarded-Proto https

    Den Aufruf von Port 80 URLs hatte ich auch an diversen Stellen. Konnte ich dann aber ultimativ beheben durch Eintrag der kompletten Server URL und Port 443 unter System -> Einstellungen -> Grundeinstellungen, dort im Reiter System.

    Habe aber mit dem Docker von dir Tobias noch ein anderes Problem: Artikelimport funktioniert nicht. Bei jedem Import wird eine Zeile aus der CSV eingelesen und in die Datenbank geschrieben. Danach bricht der Import mit dem folgenden mysql Fehler ab.

    Code
    Unknown column 'artikelbeschreibung_de' in 'field list'

    Jedes Mal, wenn ich den Import wiederhole, wird aber eine weitere Zeile eingefügt. Heißt wenn ich den Prozess ein paar hundert Mal wiederhole, hätte ich alle Daten drin. Aber das kann es ja nicht sein. Hast du den Importer mal getestet?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!