TYPO3 Tipps und Tricks: Microsoft SQL Server (MSSQL) und TYPO3 in einem Docker-Container

In diesem Blogbeitrag zeigen wir, wie man eine Microsoft SQL-Server (MSSQL) Datenbank in einem Docker-Container mit ddev laufen lässt. Zusätzlich werden wird auch der passende PHP-Treiber "sqlsrv" (Microsoft SQL Server Driver for PHP) installiert, damit man direkt aus TYPO3 auf die Datenbank zugreifen kann.

Um einen Microsoft SQL-Server in einer ddev-Umgebung zum laufen zu bringen, muss die Datei "docker-compose.override.yaml" im .ddev-Ordner erstellt werden. In diese Datei muss der folgende Code kopiert werden:

version: '3.6'services:  web:    environment:      - TYPO3_CONTEXT=Development    links:      - mssql:mssql  mssql:    # https://hub.docker.com/_/microsoft-mssql-server    image: "mcr.microsoft.com/mssql/server"    volumes:      - mssql-db-data:/var/opt/mssql/      # Volume wird verwendet um das bestehende SQL-Backup zu importieren      - sql-backup:/var/opt/sql-backup    environment:      SA_PASSWORD: "MyPassword001"      ACCEPT_EULA: "Y"    ports:      - "1433:1433"volumes:  mssql-db-data:    driver: local

Damit läuft nun der Microsoft SQL-Server in einem Docker-Image. Damit man nun auch Abfragen ausführen kann im TYPO3 (zBsp. per Doctrine/QueryBuilder) muss zusätzlich noch der passende PHP-Treiber installiert werden. Dazu muss zuerst folgendes Dockerfile mit dem name "Dockerfile"im Ordner web-build erstellt werden:

ARG BASE_IMAGEFROM $BASE_IMAGECOPY install_sqlsrv.sh /tmp/RUN apt-get update && DEBIAN_FRONTEND=noninteractive sudo apt-get install -y -o Dpkg::Options::="--force-confold" --no-install-recommends --no-install-suggests gcc make autoconf libc-dev pkg-config php-pearRUN /bin/bash /tmp/install_sqlsrv.sh

Anschließend muss noch dieses Skript ebenfalls im web-Build-Ordner mit dem Namen "install_sqlsrv.sh" erstellt werden:

#!/bin/bash# This script installs MSSQL server. Contains some ddev-specific tweaks:# - doesn't add ondrej's repo because that's already added# - doesn't source .bashrc because that will happen anyway.# - doesn't restart Apache; it's not started at this point.# - assumes it's being run under sudo anyway and doesn't use sudo or su or exit# - tries to run apt update as few times as possible# - Apache's mpm_event module is already disabled.#   Those don't work well with Docker builds.# https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017#step-1-install-php-2# Some of these packages will be redundant.export DEBIAN_FRONTEND=noninteractive# Install sqlsrv drivers.export PHP_VERSIONS="php7.4"# Note: Only works for PHP 7.0+.export PHP_SUFFIXES="7.4"# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -#Download appropriate package for the OS version#Choose only ONE of the following, corresponding to your OS version#Debian 9curl https://packages.microsoft.com/config/debian/9/prod.list >/etc/apt/sources.list.d/mssql-release.list &&  apt-get updateapt-get install -y curl apt-transport-httpsfor v in $PHP_VERSIONS; do  apt-get install -y "$v" "$v"-dev "$v"-xmldoneACCEPT_EULA=Y apt-get install -y msodbcsql17# optional: for bcp and sqlcmdACCEPT_EULA=Y apt-get install -y mssql-toolsecho 'export PATH="$PATH:/opt/mssql-tools/bin"' >>~/.bash_profileecho 'export PATH="$PATH:/opt/mssql-tools/bin"' >>~/.bashrc# optional: for unixODBC development headersapt-get install -y unixodbc-dev# https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017#step-3-install-the-php-drivers-for-microsoft-sql-server# See https://stackoverflow.com/questions/40419718/how-to-install-php-extension-using-pecl-for-specific-php-version-when-several-p/48352487for v in $PHP_SUFFIXES; do  pecl -d php_suffix="$v" install sqlsrv  pecl -d php_suffix="$v" install pdo_sqlsrv  # This does not remove the extensions; it just removes the metadata that says  # the extensions are installed.  pecl uninstall -r sqlsrv  pecl uninstall -r pdo_sqlsrvdonefor v in $PHP_SUFFIXES; do  printf "; priority=20\nextension=sqlsrv.so\n" >/etc/php/"$v"/mods-available/sqlsrv.ini  printf "; priority=30\nextension=pdo_sqlsrv.so\n" >/etc/php/"$v"/mods-available/pdo_sqlsrv.ini  chmod 666 /etc/php/"$v"/mods-available/*sqlsrv*.inidonephpenmod sqlsrv pdo_sqlsrv# Step 4 skipped because Apache is already configured.# Step 5 skipped because Apache is not started at this point.# Reduce image size some.rm -rf /var/lib/apt/lists/*

Nach einem "ddev start" kann nun die MSSQL-Datenbank ganz normal verwendet werden.

Nützliche Links / Quellen

Danke an Christian Sonntag und rfay.