Ich experimentiere momentan mit dem Open-Source PIM/MDM Pimcore und die Erstellung und Integration von selbstgeschriebenen Plugins. Damit nicht unnötig Zeit für das Setup verschwendet wird, habe ich mir eine Dockerkonfiguration für die lokale Entwicklung angelegt, die mittels docker-compose gestartet werden kann.
Doch zunächst – Was ist Pimcore?
Pimcore ist eine Kombination aus Product-Information-Management (PIM) und Master-Data-Management (MDM). Auf deutsch bedeutet das soviel, dass Produkte zentral in einem System verwaltet werden können. Ebenfalls Stammdaten wie Mitarbeiter, Kunden, Hersteller oder Lieferanten können über Pimcore gepflegt werden.
Wer einen Online-Shop betreiben möchte, kann dieses ebenfalls mit Pimcore erledigen. Dazu gibt es die Erweiterung CoreShop, die viele Funktionalitäten abdeckt.
Was Pimcore unter anderem auszeichnet, ist die benutzerdefinierte Modellierung von Inhalten. Neben bereits vorgefertigten Inhaltstypen können eigene Datenstrukturen angelegt und definiert werden – ganz einfach in der grafischen Adminoberfläche.
Genug Intro – los geht’s mit Docker
Die zentrale Einstiegsstelle ist die docker-compose.yml Datei. Diese liegt direkt im Hauptprojektverzeichnis. Hier werden die Services defniert, die für Pimcore benötigt werden. Das sind ein Webserver (hier Nginx), eine Datenbank (hier MySQL) und PHP.
version: '3.3'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./docker/nginx/config/site.conf:/etc/nginx/conf.d/default.conf
links:
- php
networks:
- pimcorenet
mysql:
image: mysql:5.7
restart: always
ports:
- "3306:3306"
command: --init-file /data/application/init.sql
volumes:
- ./docker/mysql_init.sql:/data/application/init.sql
- ./data/mysql:/var/lib/mysql
- .:/var/www/html
environment:
MYSQL_ROOT_PASSWORD: pimcore
MYSQL_DATABASE: pimcore
MYSQL_USER: pimcore
MYSQL_PASSWORD: pimcore
networks:
- pimcorenet
php:
build: ./docker/php
volumes:
- .:/var/www/html
links:
- mysql:mysql
depends_on:
- mysql
networks:
- pimcorenet
networks:
pimcorenet:
Für die Container Nginx und MySQL benutze ich fertige Docker Images. Diese können dann von außen über Parameter konfiguriert werden. Bei dem MySQL Image wird in dem Command eine SQL Datei aufgerufen, welche dafür sorgt, dass der User pimcore existiert.
Den kompletten Source Code findest du in meinem Repository unter: https://github.com/StefanieD/pimcore-docker-setup
Für den PHP Container nutze ich ein angepasstes Dockerfile. Dieses liegt unter ./docker/php und wird über den build Parameter in der Servicekonfiguration referenziert.
Oft reichen fertige PHP Docker Images nicht aus, da bestimmte Erweiterungen nachinstalliert werden müssen. Aus diesem Grund erweitert das Dockerfile ein existierendes Image für php7.2-fpm
FROM php:7.2-fpm
# install git
RUN apt-get update && \
apt-get install -y --no-install-recommends git
#install some base extensions
RUN apt-get install -y \
zlib1g-dev \
zip \
libpng-dev \
exiftool \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libicu-dev \
libpq-dev \
libxpm-dev \
libvpx-dev \
mariadb-client \
libxml2-dev
RUN docker-php-ext-install -j$(nproc) \
zip \
exif \
bcmath \
intl \
pcntl \
mysqli \
pdo \
pdo_mysql \
pdo_pgsql \
mbstring \
soap \
opcache \
iconv
# Install Imagick
RUN apt-get update && apt-get install -y \
libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer --version
Und zu guter Letzt – Docker starten
Um die Anwendung nun zu starten, braucht man nichts anderes tun als im Terminal zu seinem Projektordner zu wechseln und folgende Befehle auszuführen
docker-compose build
zum Bauen der Images und
docker-compose up -d
Beim ersten Aufruf werden die Images vom Docker Repository heruntergeladen und es kann etwas länger dauern. Später sind diese jedoch im Cache und müssen nicht erneut geladen werden.
Nachdem die Container gestartet sind, müssen noch einige Befehle manuell durchgeführt werden.
Pimcore muss installiert, ein initialer Admin User angelegt und die Datenbank konfiguriert werden.
Die Anleitung dazu findest du hier https://github.com/StefanieD/pimcore-docker-setup
Nachdem diese Schritte erfolgreich durchgeführt wurden, ist die Anwendung nun unter http://localhost:8080 erreichbar.
Den Adminbereich erreicht man unter http://localhost:8080/admin.
Mit dem zuvor angelegten Benutzer admin – admin könnt ihr euch in Pimcore anmelden.
Viel Spaß beim Experimentieren !
Quellen
- https://pimcore.com/de
- https://blog.perfion.com/de/was-ist-der-unterschied-zwischen-pim-und-mdm-und-warum-sie-sich-interessieren-sollten
- https://basilicom.de/de/pimcore
- https://www.mds.eu/blog/pim/was-ist-pimcore
- https://divante.co/blog/pimcore-special-agency-point-view/
29. August 2019 um 16:14 Uhr
Hallo Stefanie,
ich arbeite ebenfalls viel mit pimcore und docker. Finde die Anleitung sehr gut, jedoch bekomme ich immer bei der installation diesen fehler? Wie kann ich die extentions installieren? Kannst du mir vielleicht helfen? LG Milan
root@ec40dd87c675:/var/www/html# COMPOSER_MEMORY_LIMIT=-1 composer create-project pimcore/skeleton
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Installing pimcore/skeleton (v2.1.2)
– Installing pimcore/skeleton (v2.1.2): Loading from cache
Created project in /var/www/html/skeleton
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
Problem 1
– Installation request for endroid/qr-code 3.6.1 -> satisfiable by endroid/qr-code[3.6.1].
– endroid/qr-code 3.6.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
Problem 2
– Installation request for pimcore/pimcore v6.1.2 -> satisfiable by pimcore/pimcore[v6.1.2].
– pimcore/pimcore v6.1.2 requires ext-gd * -> the requested PHP extension gd is missing from your system.
To enable extensions, verify that they are enabled in your .ini files:
–
– /usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini
– /usr/local/etc/php/conf.d/docker-php-ext-exif.ini
– /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini
– /usr/local/etc/php/conf.d/docker-php-ext-intl.ini
– /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini
– /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
– /usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini
– /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
– /usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini
– /usr/local/etc/php/conf.d/docker-php-ext-soap.ini
– /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
– /usr/local/etc/php/conf.d/docker-php-ext-zip.ini
You can also run `php –ini` inside terminal to see which files are used by PHP in CLI mode.
root@ec40dd87c675:/var/www/html#
29. August 2019 um 16:25 Uhr
Hallo Milan,
danke dass du die Anleitung nutzt. Ich habe das Setup für die Pimcore Twig Demo Version erstellt. Es kann also sein, dass es mit der Skeleton Version nicht ganz kompatibel ist.
Wie es aussieht fehlt die PHP GD Extension. Ich habe sie durch Imagick ersetzt, weil es Fehler bei der Thumbnail Generierung gab. Aber du kannst versuchen GD wieder in das Dockerfile zu integrieren.
Dazu musst du in
/docker/php/Dockerfile
folgendes eintragen:RUN docker-php-ext-install -j$(nproc) gd
Danach nochmals
docker-compose build
ausführen und starten.