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.

Wir entwickeln digitale Lösungen mit Leidenschaft

Warum wir das tun? Weil die Verwirklichung Ihrer Vision unser größter Anspruch und die schönste Anerkennung ist. Deshalb nehmen wir uns gerne ausreichend Zeit für die Realisierung Ihres digitalen Projekts.

Kontaktieren Sie uns, wir sind gerne für Ihre Fragen da:

Passend zu diesem Thema:

TYPO3 Tipps und Tricks: Cache für einzelne Extbase-Objekte leeren

TYPO3 Tipps und Tricks: Cache für einzelne Extbase-Objekte leeren

Kürzlich bin ich bei einem Projekt vor folgendem Problem gestanden: Per Plugin werden Extbase-Objekte auf einer Seite ausgegeben und diese auch gecach…

Das war das TYPO3camp München 2019

Das war das TYPO3camp München 2019

Vom 13. – 15. September fand das TYPO3camp 2019 in München statt und auch varioous war vor Ort um sich mit anderen TYPO3-Entwicklern und Unternehmen z…

Warum TYPO3?

Warum TYPO3?

Warum sollten Sie eigentlich auf TYPO3 und nicht auf ein anderes CMS wie Drupal, Wordpress, Contao, Joomla oder ähnliches setzen, bzw. warum empfehlen…